From 97b2ea14b286f41d7d95fee647df0e4d5bb53bdc Mon Sep 17 00:00:00 2001 From: Artemy <109195690+stalcker2288969@users.noreply.github.com> Date: Sat, 12 Jul 2025 19:51:15 +0700 Subject: [PATCH] Test for friends controllers --- .../Controllers/FriendsControllerTests.cs | 386 ------------------ .../FriendsRequestQueryControllerTests.cs | 196 +++++++++ .../Controllers/FriendshipControllerTests.cs | 191 +++++++++ .../Friends/FriendsRequestQueryController.cs | 16 +- 4 files changed, 392 insertions(+), 397 deletions(-) delete mode 100644 Govor.API.Tests/IntegrationTests/Controllers/FriendsControllerTests.cs create mode 100644 Govor.API.Tests/IntegrationTests/Controllers/FriendsRequestQueryControllerTests.cs create mode 100644 Govor.API.Tests/IntegrationTests/Controllers/FriendshipControllerTests.cs diff --git a/Govor.API.Tests/IntegrationTests/Controllers/FriendsControllerTests.cs b/Govor.API.Tests/IntegrationTests/Controllers/FriendsControllerTests.cs deleted file mode 100644 index cb3d70d..0000000 --- a/Govor.API.Tests/IntegrationTests/Controllers/FriendsControllerTests.cs +++ /dev/null @@ -1,386 +0,0 @@ -using AutoFixture; -using Govor.API.Controllers; -using Govor.Application.Exceptions.FriendsService; -using Govor.Application.Interfaces; -using Govor.Application.Interfaces.Infrastructure.Extensions; -using Govor.Contracts.DTOs; -using Govor.Core.Models; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Logging; -using Moq; - -namespace Govor.API.Tests.IntegrationTests.Controllers; - -[TestFixture] -public class FriendsControllerTests -{ - /* - private Fixture _fixture; - private Mock> _loggerMock; - private Mock _friendsServiceMock; - private Mock _currentUserServiceMock; - private FriendsController _controller; - - [SetUp] - public void SetUp() - { - _fixture = new Fixture(); - _fixture.Behaviors.OfType().ToList().ForEach(b => _fixture.Behaviors.Remove(b)); - _fixture.Behaviors.Add(new OmitOnRecursionBehavior()); - - _loggerMock = new Mock>(); - _friendsServiceMock = new Mock(); - _currentUserServiceMock = new Mock(); - - _controller = new FriendsController( - _loggerMock.Object, - _friendsServiceMock.Object, - _currentUserServiceMock.Object - ); - } - // Tests for Search action - [Test] - public async Task Search_ValidRequest_ReturnsOkResult() - { - var users = _fixture.CreateMany().ToList(); - var userId = _fixture.Create(); - var query = _fixture.Create(); - - _currentUserServiceMock.Setup(c => c.GetCurrentUserId()).Returns(userId); - - _friendsServiceMock.Setup(f => f.SearchUsersAsync(query, userId)) - .ReturnsAsync(users); - - // Act - var result = await _controller.Search(query); - - var okResult = result as OkObjectResult; - dynamic value = okResult.Value; - - List userDtos = value as List; - - // Assert - Assert.That(value, Is.Not.Null); - Assert.That(value.Count, Is.EqualTo(users.Count)); - Assert.That(userDtos.Select(u => u.Id), Is.EqualTo(users.Select(u => u.Id))); - } - - [Test] - public async Task Search_InvalidQuery_BadRequest() - { - // Act - var result = await _controller.Search(string.Empty); - // Assert - Assert.That(result, Is.InstanceOf()); - var badRequestResult = result as BadRequestObjectResult; - Assert.That(badRequestResult.Value, Is.EqualTo("Query cannot be empty")); - } - - - [Test] - public async Task Search_NotFound_IfThrowsSearchUsersException() - { - // Arrange - _friendsServiceMock.Setup(f => f.SearchUsersAsync(It.IsAny(), It.IsAny())) - .ThrowsAsync(new SearchUsersException(_fixture.Create())); - - // Act - var result = await _controller.Search(_fixture.Create()); - // Assert - Assert.That(result, Is.InstanceOf()); - } - - [Test] - public async Task Search_StatusCode500_IfThrowsSomeException() - { - // Arrange - _friendsServiceMock.Setup(f => f.SearchUsersAsync(It.IsAny(), It.IsAny())) - .ThrowsAsync(new Exception(_fixture.Create())); - - // Act - var result = await _controller.Search(_fixture.Create()); - // Assert - Assert.That(result, Is.InstanceOf()); - var objectResult = result as ObjectResult; - Assert.That(objectResult.StatusCode, Is.EqualTo(500)); - } - - // Test for SendRequest action - [Test] - public async Task SendRequest_ValidRequest_ReturnsOk() - { - var targetUserId = Guid.NewGuid(); - - var result = await _controller.SendRequest(targetUserId); - - Assert.That(result, Is.InstanceOf()); - var okResult = result as OkObjectResult; - Assert.That(okResult?.Value.ToString(), Does.Contain("Friend request sent")); - } - - [Test] - public async Task SendRequest_Throws_InvalidOperationException_ReturnsUnprocessableEntity() - { - var targetUserId = Guid.NewGuid(); - - _currentUserServiceMock.Setup(c => c.GetCurrentUserId()).Returns(targetUserId); - - _friendsServiceMock.Setup(f => f.SendFriendRequestAsync(targetUserId, targetUserId)) - .ThrowsAsync(new InvalidOperationException()); - - var result = await _controller.SendRequest(targetUserId); - - Assert.That(result, Is.InstanceOf()); - } - - [Test] - public async Task SendRequest_Throws_RequestAlreadySentException_ReturnsConflict() - { - var targetUserId = Guid.NewGuid(); - var currentUserId = Guid.NewGuid(); - - _currentUserServiceMock.Setup(c => c.GetCurrentUserId()).Returns(currentUserId); - - _friendsServiceMock.Setup(f => f.SendFriendRequestAsync(currentUserId, targetUserId)) - .ThrowsAsync(new RequestAlreadySentException(currentUserId, targetUserId)); - - var result = await _controller.SendRequest(targetUserId); - - Assert.That(result, Is.InstanceOf()); - } - - [Test] - public async Task SendRequest_StatusCode500_IfThrowsSomeException() - { - // Arrange - _friendsServiceMock.Setup(f => f.SendFriendRequestAsync(It.IsAny(), It.IsAny())) - .ThrowsAsync(new Exception(_fixture.Create())); - - // Act - var result = await _controller.Search(_fixture.Create()); - - // Assert - Assert.That(result, Is.InstanceOf()); - var objectResult = result as ObjectResult; - Assert.That(objectResult.StatusCode, Is.EqualTo(500)); - } - - // Tests for GetIncomingRequests action - [Test] - public async Task GetIncomingRequests_ValidRequest_ReturnsOkResult() - { - // Arrange - var currentId = _fixture.Create(); - var friendships = _fixture.CreateMany().ToList(); - - _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) - .Returns(currentId); - - _friendsServiceMock.Setup(f => f.GetIncomingRequestsAsync(currentId)) - .ReturnsAsync(friendships); - // Act - var result = await _controller.GetIncomingRequests(); - - // Assert - Assert.That(result, Is.InstanceOf()); - var okResult = result as OkObjectResult; - List value = okResult.Value as List; - Assert.That(value, Is.Not.Null); - Assert.That(value.Count, Is.EqualTo(friendships.Count)); - } - - [Test] - public async Task GetIncomingRequests_Throws_InvalidOperationException_ReturnsBadRequest() - { - // Arrange - var currentId = _fixture.Create(); - - _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) - .Returns(currentId); - - _friendsServiceMock.Setup(f => f.GetIncomingRequestsAsync(currentId)) - .ThrowsAsync(new InvalidOperationException()); - - // Act - var result = await _controller.GetIncomingRequests(); - - // Assert - Assert.That(result, Is.InstanceOf()); - var badRequestResult = result as BadRequestObjectResult; - dynamic value = badRequestResult.Value; - Assert.That(value, Is.EqualTo("Failed to get friend requests. User data missing.")); - } - - [Test] - public async Task GetIncomingRequest_StatusCode500_IfThrowsSomeException() - { - // Arrange - var currentId = _fixture.Create(); - - _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) - .Returns(currentId); - - _friendsServiceMock.Setup(f => f.GetIncomingRequestsAsync(currentId)) - .ThrowsAsync(new Exception()); - - // Act - var result = await _controller.GetIncomingRequests(); - - // Assert - Assert.That(result, Is.InstanceOf()); - var objectResult = result as ObjectResult; - Assert.That(objectResult.StatusCode, Is.EqualTo(500)); - } - - // Tests for AcceptFriend action - [Test] - public async Task AcceptFriend_ValidRequest_ReturnsOkResult() - { - // Arrange - var currentId = Guid.NewGuid(); - var targetUserId = Guid.NewGuid(); - - _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) - .Returns(currentId); - // Act - var result = await _controller.AcceptFriend(targetUserId); - - // Assert - Assert.That(result, Is.InstanceOf()); - } - - [Test] - public async Task AcceptFriend_InvalidOperationException_ReturnsNotFound() - { - // Arrange - var currentId = Guid.NewGuid(); - var targetUserId = Guid.NewGuid(); - - _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) - .Returns(currentId); - - _friendsServiceMock.Setup(f => f.AcceptFriendRequestAsync(targetUserId, currentId)) - .ThrowsAsync(new InvalidOperationException()); - - // Act - var result = await _controller.AcceptFriend(targetUserId); - - // Assert - Assert.That(result, Is.InstanceOf()); - } - [Test] - public async Task AcceptFriend_UnauthorizedAccessException_ReturnsForbid() - { - // Arrange - var currentId = Guid.NewGuid(); - var targetUserId = Guid.NewGuid(); - - _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) - .Returns(currentId); - - _friendsServiceMock.Setup(f => f.AcceptFriendRequestAsync(targetUserId, currentId)) - .ThrowsAsync(new UnauthorizedAccessException()); - - // Act - var result = await _controller.AcceptFriend(targetUserId); - - // Assert - Assert.That(result, Is.InstanceOf()); - } - - [Test] - public async Task AcceptFriend_Exception_ReturnsStatusCode500() - { - // Arrange - var currentId = Guid.NewGuid(); - var targetUserId = Guid.NewGuid(); - - _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) - .Returns(currentId); - - _friendsServiceMock.Setup(f => f.AcceptFriendRequestAsync(targetUserId, currentId)) - .ThrowsAsync(new Exception()); - - // Act - var result = await _controller.AcceptFriend(targetUserId); - - // Assert - Assert.That(result, Is.InstanceOf()); - var objectResult = result as ObjectResult; - Assert.That(objectResult.StatusCode, Is.EqualTo(500)); - } - - // Tests for GetFriends action - [Test] - public async Task GetFriends_ValidRequest_ReturnsOkResult() - { - // Arrange - var currentId = _fixture.Create(); - var users = _fixture.CreateMany().ToList(); - - _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) - .Returns(currentId); - - _friendsServiceMock.Setup(f => f.GetFriendsAsync(currentId)) - .ReturnsAsync(users); - // Act - var result = await _controller.GetFriends(); - - // Assert - Assert.That(result, Is.InstanceOf()); - var okResult = result as OkObjectResult; - List value = okResult.Value as List; - Assert.That(value, Is.Not.Null); - Assert.That(value.Count, Is.EqualTo(users.Count)); - } - - [Test] - public async Task GetFriends_InvalidOperationException_ReturnsBadRequest() - { - // Arrange - var currentId = _fixture.Create(); - var users = _fixture.CreateMany().ToList(); - - _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) - .Returns(currentId); - - _friendsServiceMock.Setup(f => f.GetFriendsAsync(currentId)) - .ThrowsAsync(new InvalidOperationException()); - - // Act - var result = await _controller.GetFriends(); - - // Assert - Assert.That(result, Is.InstanceOf()); - } - - [Test] - public async Task GetFriends_Exception_ReturnsStatusCode500() - { - // Arrange - var currentId = _fixture.Create(); - var users = _fixture.CreateMany().ToList(); - - _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) - .Returns(currentId); - - _friendsServiceMock.Setup(f => f.GetFriendsAsync(currentId)) - .ThrowsAsync(new Exception()); - - // Act - var result = await _controller.GetFriends(); - - // Assert - Assert.That(result, Is.InstanceOf()); - var objectResult = result as ObjectResult; - Assert.That(objectResult.StatusCode, Is.EqualTo(500)); - } - - - [TearDown] - public void TearDown() - { - _controller.Dispose(); - } - */ -} \ No newline at end of file diff --git a/Govor.API.Tests/IntegrationTests/Controllers/FriendsRequestQueryControllerTests.cs b/Govor.API.Tests/IntegrationTests/Controllers/FriendsRequestQueryControllerTests.cs new file mode 100644 index 0000000..8b6c204 --- /dev/null +++ b/Govor.API.Tests/IntegrationTests/Controllers/FriendsRequestQueryControllerTests.cs @@ -0,0 +1,196 @@ +using AutoFixture; +using AutoMapper; +using Govor.API.Controllers.Friends; +using Govor.Application.Interfaces.Friends; +using Govor.Application.Interfaces.Infrastructure.Extensions; +using Govor.Contracts.DTOs; +using Govor.Core.Models; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using Moq; + +namespace Govor.API.Tests.IntegrationTests.Controllers; + +[TestFixture] +public class FriendsRequestQueryControllerTests +{ + private Fixture _fixture; + private Mock> _loggerMock; + private Mock _friendsServiceMock; + private Mock _currentUserServiceMock; + private Mock _mapperMock; + private FriendsRequestQueryController _controller; + + [SetUp] + public void SetUp() + { + _fixture = new Fixture(); + _fixture.Behaviors.OfType().ToList().ForEach(b => _fixture.Behaviors.Remove(b)); + _fixture.Behaviors.Add(new OmitOnRecursionBehavior()); + + _loggerMock = new Mock>(); + _friendsServiceMock = new Mock(); + _currentUserServiceMock = new Mock(); + _mapperMock = new Mock(); + + _controller = new FriendsRequestQueryController( + _loggerMock.Object, + _friendsServiceMock.Object, + _currentUserServiceMock.Object, + _mapperMock.Object + ); + } + + [Test] + public async Task GetIncomingRequests_ValidRequest_ReturnsOkResult() + { + // Arrange + var currentId = _fixture.Create(); + var friendships = _fixture.CreateMany().ToList(); + var dtos = friendships.Select(f => new FriendshipDto() + { AddresseeId = f.AddresseeId, RequesterId = f.RequesterId }).ToList(); + + _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) + .Returns(currentId); + + _friendsServiceMock.Setup(f => f.GetIncomingAsync(currentId)) + .ReturnsAsync(friendships); + + _mapperMock.Setup(f => f.Map>(friendships)).Returns(dtos); + + // Act + var result = await _controller.GetIncomingRequests(); + + // Assert + Assert.That(result, Is.InstanceOf()); + var okResult = result as OkObjectResult; + List value = okResult.Value as List; + + Assert.That(value, Is.Not.Null); + Assert.That(value.Count, Is.EqualTo(friendships.Count)); + Assert.That(value.Select(f => f.AddresseeId), Is.EquivalentTo(friendships.Select(f => f.AddresseeId))); + Assert.That(value.Select(f => f.RequesterId), Is.EquivalentTo(friendships.Select(f => f.RequesterId))); + } + + [Test] + public async Task GetIncomingRequests_Throws_InvalidOperationException_ReturnsBadRequest() + { + // Arrange + var currentId = _fixture.Create(); + + _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) + .Returns(currentId); + + _friendsServiceMock.Setup(f => f.GetIncomingAsync(currentId)) + .ThrowsAsync(new InvalidOperationException()); + + // Act + var result = await _controller.GetIncomingRequests(); + + // Assert + Assert.That(result, Is.InstanceOf()); + var okResult = result as OkObjectResult; + List value = okResult.Value as List; + + Assert.That(value, Is.Not.Null); + Assert.That(value.Count, Is.EqualTo(0)); + } + + [Test] + public async Task GetIncomingRequest_StatusCode500_IfThrowsSomeException() + { + // Arrange + var currentId = _fixture.Create(); + + _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) + .Returns(currentId); + + _friendsServiceMock.Setup(f => f.GetIncomingAsync(currentId)) + .ThrowsAsync(new Exception()); + + // Act + var result = await _controller.GetIncomingRequests(); + + // Assert + Assert.That(result, Is.InstanceOf()); + var objectResult = result as ObjectResult; + Assert.That(objectResult.StatusCode, Is.EqualTo(500)); + } + + // Test for GetResponses action + [Test] + public async Task GetResponses_ValidRequest_ReturnsOkResult() + { + // Arrange + var currentId = _fixture.Create(); + var friendships = _fixture.CreateMany().ToList(); + var dtos = friendships.Select(f => new FriendshipDto() + { AddresseeId = f.AddresseeId, RequesterId = f.RequesterId }).ToList(); + + _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) + .Returns(currentId); + + _friendsServiceMock.Setup(f => f.GetResponsesAsync(currentId)) + .ReturnsAsync(friendships); + + _mapperMock.Setup(f => f.Map>(friendships)).Returns(dtos); + + // Act + var result = await _controller.GetResponses(); + + // Assert + Assert.That(result, Is.InstanceOf()); + var okResult = result as OkObjectResult; + List value = okResult.Value as List; + + Assert.That(value, Is.Not.Null); + Assert.That(value.Count, Is.EqualTo(friendships.Count)); + Assert.That(value.Select(f => f.AddresseeId), Is.EquivalentTo(friendships.Select(f => f.AddresseeId))); + Assert.That(value.Select(f => f.RequesterId), Is.EquivalentTo(friendships.Select(f => f.RequesterId))); + } + + [Test] + public async Task GetResponses_Throws_InvalidOperationException_ReturnsEmptyList() + { + // Arrange + var currentId = _fixture.Create(); + + _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) + .Returns(currentId); + + _friendsServiceMock.Setup(f => f.GetResponsesAsync(currentId)) + .ThrowsAsync(new InvalidOperationException()); + + // Act + var result = await _controller.GetResponses(); + + // Assert + Assert.That(result, Is.InstanceOf()); + var okResult = result as OkObjectResult; + List value = okResult.Value as List; + + Assert.That(value, Is.Not.Null); + Assert.That(value.Count, Is.EqualTo(0)); + } + + [Test] + public async Task GetResponses_StatusCode500_IfThrowsSomeException() + { + // Arrange + var currentId = _fixture.Create(); + + _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) + .Returns(currentId); + + _friendsServiceMock.Setup(f => f.GetResponsesAsync(currentId)) + .ThrowsAsync(new Exception()); + + // Act + var result = await _controller.GetResponses(); + + // Assert + Assert.That(result, Is.InstanceOf()); + var objectResult = result as ObjectResult; + Assert.That(objectResult.StatusCode, Is.EqualTo(500)); + } +} \ No newline at end of file diff --git a/Govor.API.Tests/IntegrationTests/Controllers/FriendshipControllerTests.cs b/Govor.API.Tests/IntegrationTests/Controllers/FriendshipControllerTests.cs new file mode 100644 index 0000000..85bda4b --- /dev/null +++ b/Govor.API.Tests/IntegrationTests/Controllers/FriendshipControllerTests.cs @@ -0,0 +1,191 @@ +using AutoFixture; +using AutoMapper; +using Govor.API.Controllers.Friends; +using Govor.Application.Exceptions.FriendsService; +using Govor.Application.Interfaces.Friends; +using Govor.Application.Interfaces.Infrastructure.Extensions; +using Govor.Contracts.DTOs; +using Govor.Core.Models.Users; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using Moq; + +namespace Govor.API.Tests.IntegrationTests.Controllers; + +[TestFixture] +public class FriendshipControllerTests +{ + private Fixture _fixture; + private Mock> _loggerMock; + private Mock _friendsServiceMock; + private Mock _currentUserServiceMock; + private Mock _mapperMock; + private FriendshipController _controller; + + [SetUp] + public void SetUp() + { + _fixture = new Fixture(); + _fixture.Behaviors.OfType().ToList().ForEach(b => _fixture.Behaviors.Remove(b)); + _fixture.Behaviors.Add(new OmitOnRecursionBehavior()); + + _loggerMock = new Mock>(); + _friendsServiceMock = new Mock(); + _currentUserServiceMock = new Mock(); + _mapperMock = new Mock(); + + _controller = new FriendshipController( + _loggerMock.Object, + _friendsServiceMock.Object, + _currentUserServiceMock.Object, + _mapperMock.Object + ); + } + + // Tests for Search action + [Test] + public async Task Search_ValidRequest_ReturnsOkResult() + { + var users = _fixture.CreateMany().ToList(); + var dtos = users.Select(u => new UserDto { Id = u.Id }).ToList(); + var userId = _fixture.Create(); + var query = _fixture.Create(); + + _currentUserServiceMock.Setup(c => c.GetCurrentUserId()).Returns(userId); + + _friendsServiceMock.Setup(f => f.SearchUsersAsync(query, userId)) + .ReturnsAsync(users); + + _mapperMock.Setup(m => m.Map>(users)).Returns(dtos); + + // Act + var result = await _controller.Search(query); + + var okResult = result as OkObjectResult; + dynamic value = okResult.Value; + + List userDtos = value as List; + + // Assert + Assert.That(value, Is.Not.Null); + Assert.That(value.Count, Is.EqualTo(users.Count)); + Assert.That(userDtos.Select(u => u.Id), Is.EqualTo(users.Select(u => u.Id))); + } + + [Test] + public async Task Search_InvalidQuery_BadRequest() + { + // Act + var result = await _controller.Search(string.Empty); + // Assert + Assert.That(result, Is.InstanceOf()); + var badRequestResult = result as BadRequestObjectResult; + Assert.That(badRequestResult.Value, Is.EqualTo("Query cannot be empty")); + } + + + [Test] + public async Task Search_NotFound_IfThrowsSearchUsersException() + { + // Arrange + _friendsServiceMock.Setup(f => f.SearchUsersAsync(It.IsAny(), It.IsAny())) + .ThrowsAsync(new SearchUsersException(_fixture.Create())); + + // Act + var result = await _controller.Search(_fixture.Create()); + // Assert + Assert.That(result, Is.InstanceOf()); + } + + [Test] + public async Task Search_StatusCode500_IfThrowsSomeException() + { + // Arrange + _friendsServiceMock.Setup(f => f.SearchUsersAsync(It.IsAny(), It.IsAny())) + .ThrowsAsync(new Exception(_fixture.Create())); + + // Act + var result = await _controller.Search(_fixture.Create()); + // Assert + Assert.That(result, Is.InstanceOf()); + var objectResult = result as ObjectResult; + Assert.That(objectResult.StatusCode, Is.EqualTo(500)); + } + + [Test] + public async Task GetFriends_ValidRequest_ReturnsOkResult() + { + // Arrange + var currentId = _fixture.Create(); + var users = _fixture.CreateMany().ToList(); + var dtos = users.Select(u => new UserDto { Id = u.Id }).ToList(); + + _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) + .Returns(currentId); + + _friendsServiceMock.Setup(f => f.GetFriendsAsync(currentId)) + .ReturnsAsync(users); + + _mapperMock.Setup(m => m.Map>(users)).Returns(dtos); + + // Act + var result = await _controller.GetFriends(); + + // Assert + Assert.That(result, Is.InstanceOf()); + var okResult = result as OkObjectResult; + List value = okResult.Value as List; + Assert.That(value, Is.Not.Null); + Assert.That(value.Count, Is.EqualTo(users.Count)); + Assert.That(value.Select(u => u.Id), Is.EqualTo(users.Select(u => u.Id))); + } + + [Test] + public async Task GetFriends_InvalidOperationException_ReturnsBadRequest() + { + // Arrange + var currentId = _fixture.Create(); + var users = _fixture.CreateMany().ToList(); + + _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) + .Returns(currentId); + + _friendsServiceMock.Setup(f => f.GetFriendsAsync(currentId)) + .ThrowsAsync(new InvalidOperationException()); + + // Act + var result = await _controller.GetFriends(); + + // Assert + Assert.That(result, Is.InstanceOf()); + } + + [Test] + public async Task GetFriends_Exception_ReturnsStatusCode500() + { + // Arrange + var currentId = _fixture.Create(); + var users = _fixture.CreateMany().ToList(); + + _currentUserServiceMock.Setup(c => c.GetCurrentUserId()) + .Returns(currentId); + + _friendsServiceMock.Setup(f => f.GetFriendsAsync(currentId)) + .ThrowsAsync(new Exception()); + + // Act + var result = await _controller.GetFriends(); + + // Assert + Assert.That(result, Is.InstanceOf()); + var objectResult = result as ObjectResult; + Assert.That(objectResult.StatusCode, Is.EqualTo(500)); + } + + + [TearDown] + public void TearDown() + { + _controller.Dispose(); + } +} \ No newline at end of file diff --git a/Govor.API/Controllers/Friends/FriendsRequestQueryController.cs b/Govor.API/Controllers/Friends/FriendsRequestQueryController.cs index 02e86e3..77deda3 100644 --- a/Govor.API/Controllers/Friends/FriendsRequestQueryController.cs +++ b/Govor.API/Controllers/Friends/FriendsRequestQueryController.cs @@ -42,7 +42,7 @@ public class FriendsRequestQueryController : Controller catch (InvalidOperationException ex) { _logger.LogError(ex, ex.Message); - return BadRequest("Failed to get friend requests. User data missing."); + return Ok(new List()); } catch (Exception ex) { @@ -57,12 +57,14 @@ public class FriendsRequestQueryController : Controller try { var result = await _friendsService.GetResponsesAsync(_currentUserService.GetCurrentUserId()); - return Ok(BuildFriendshipDtos(result)); + var response = _mapper.Map>(result); + + return Ok(response); } catch (InvalidOperationException ex) { _logger.LogError(ex, ex.Message); - return Ok(Array.Empty()); + return Ok(new List()); } catch (Exception ex) { @@ -70,12 +72,4 @@ public class FriendsRequestQueryController : Controller return StatusCode(500, new { error = "Internal server error." }); } } - - private List BuildFriendshipDtos(IEnumerable friendships) => friendships.Select(f => new FriendshipDto - { - Id = f.Id, - Status = f.Status, - AddresseeId = f.AddresseeId, - RequesterId = f.RequesterId, - }).ToList(); } \ No newline at end of file