diff --git a/Govor.API.Tests/IntegrationTests/Controllers/FriendsControllerTests.cs b/Govor.API.Tests/IntegrationTests/Controllers/FriendsControllerTests.cs index a940339..9b51bf0 100644 --- a/Govor.API.Tests/IntegrationTests/Controllers/FriendsControllerTests.cs +++ b/Govor.API.Tests/IntegrationTests/Controllers/FriendsControllerTests.cs @@ -166,8 +166,216 @@ public class FriendsControllerTests } // 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() diff --git a/Govor.API/Controllers/AdminStuff/InviteUserController.cs b/Govor.API/Controllers/AdminStuff/InviteUserController.cs index 9f6e68a..0e2724b 100644 --- a/Govor.API/Controllers/AdminStuff/InviteUserController.cs +++ b/Govor.API/Controllers/AdminStuff/InviteUserController.cs @@ -9,7 +9,7 @@ namespace Govor.API.Controllers.AdminStuff; [Route("api/[controller]")] [ApiController] -//[Authorize(Roles = "Admin")] +[Authorize(Roles = "Admin")] public class InviteUserController : Controller { private readonly IInvitesRepository _repository; diff --git a/Govor.API/Controllers/FriendsController.cs b/Govor.API/Controllers/FriendsController.cs index 7000c2a..32c48f5 100644 --- a/Govor.API/Controllers/FriendsController.cs +++ b/Govor.API/Controllers/FriendsController.cs @@ -88,7 +88,7 @@ public class FriendsController : Controller catch (InvalidOperationException ex) { _logger.LogError(ex, ex.Message); - return BadRequest(new { error = "Failed to get friend requests. User data missing." }); + return BadRequest("Failed to get friend requests. User data missing."); } catch (Exception ex) {