Test for friends controllers

This commit is contained in:
Artemy
2025-07-12 19:51:15 +07:00
parent 96587b491d
commit 97b2ea14b2
4 changed files with 392 additions and 397 deletions
@@ -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<ILogger<FriendsController>> _loggerMock;
private Mock<IFriendsService> _friendsServiceMock;
private Mock<ICurrentUserService> _currentUserServiceMock;
private FriendsController _controller;
[SetUp]
public void SetUp()
{
_fixture = new Fixture();
_fixture.Behaviors.OfType<ThrowingRecursionBehavior>().ToList().ForEach(b => _fixture.Behaviors.Remove(b));
_fixture.Behaviors.Add(new OmitOnRecursionBehavior());
_loggerMock = new Mock<ILogger<FriendsController>>();
_friendsServiceMock = new Mock<IFriendsService>();
_currentUserServiceMock = new Mock<ICurrentUserService>();
_controller = new FriendsController(
_loggerMock.Object,
_friendsServiceMock.Object,
_currentUserServiceMock.Object
);
}
// Tests for Search action
[Test]
public async Task Search_ValidRequest_ReturnsOkResult()
{
var users = _fixture.CreateMany<User>().ToList();
var userId = _fixture.Create<Guid>();
var query = _fixture.Create<string>();
_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<UserDto> userDtos = value as List<UserDto>;
// 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<BadRequestObjectResult>());
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<string>(), It.IsAny<Guid>()))
.ThrowsAsync(new SearchUsersException(_fixture.Create<string>()));
// Act
var result = await _controller.Search(_fixture.Create<string>());
// Assert
Assert.That(result, Is.InstanceOf<NotFoundObjectResult>());
}
[Test]
public async Task Search_StatusCode500_IfThrowsSomeException()
{
// Arrange
_friendsServiceMock.Setup(f => f.SearchUsersAsync(It.IsAny<string>(), It.IsAny<Guid>()))
.ThrowsAsync(new Exception(_fixture.Create<string>()));
// Act
var result = await _controller.Search(_fixture.Create<string>());
// Assert
Assert.That(result, Is.InstanceOf<ObjectResult>());
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<OkObjectResult>());
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<UnprocessableEntityObjectResult>());
}
[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<ConflictObjectResult>());
}
[Test]
public async Task SendRequest_StatusCode500_IfThrowsSomeException()
{
// Arrange
_friendsServiceMock.Setup(f => f.SendFriendRequestAsync(It.IsAny<Guid>(), It.IsAny<Guid>()))
.ThrowsAsync(new Exception(_fixture.Create<string>()));
// Act
var result = await _controller.Search(_fixture.Create<string>());
// Assert
Assert.That(result, Is.InstanceOf<ObjectResult>());
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<Guid>();
var friendships = _fixture.CreateMany<Friendship>().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<OkObjectResult>());
var okResult = result as OkObjectResult;
List<FriendshipDto> value = okResult.Value as List<FriendshipDto>;
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<Guid>();
_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<BadRequestObjectResult>());
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<Guid>();
_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<ObjectResult>());
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<OkObjectResult>());
}
[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<NotFoundObjectResult>());
}
[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<ForbidResult>());
}
[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<ObjectResult>());
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<Guid>();
var users = _fixture.CreateMany<User>().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<OkObjectResult>());
var okResult = result as OkObjectResult;
List<UserDto> value = okResult.Value as List<UserDto>;
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<Guid>();
var users = _fixture.CreateMany<User>().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<OkObjectResult>());
}
[Test]
public async Task GetFriends_Exception_ReturnsStatusCode500()
{
// Arrange
var currentId = _fixture.Create<Guid>();
var users = _fixture.CreateMany<User>().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<ObjectResult>());
var objectResult = result as ObjectResult;
Assert.That(objectResult.StatusCode, Is.EqualTo(500));
}
[TearDown]
public void TearDown()
{
_controller.Dispose();
}
*/
}
@@ -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<ILogger<FriendsRequestQueryController>> _loggerMock;
private Mock<IFriendRequestQueryService> _friendsServiceMock;
private Mock<ICurrentUserService> _currentUserServiceMock;
private Mock<IMapper> _mapperMock;
private FriendsRequestQueryController _controller;
[SetUp]
public void SetUp()
{
_fixture = new Fixture();
_fixture.Behaviors.OfType<ThrowingRecursionBehavior>().ToList().ForEach(b => _fixture.Behaviors.Remove(b));
_fixture.Behaviors.Add(new OmitOnRecursionBehavior());
_loggerMock = new Mock<ILogger<FriendsRequestQueryController>>();
_friendsServiceMock = new Mock<IFriendRequestQueryService>();
_currentUserServiceMock = new Mock<ICurrentUserService>();
_mapperMock = new Mock<IMapper>();
_controller = new FriendsRequestQueryController(
_loggerMock.Object,
_friendsServiceMock.Object,
_currentUserServiceMock.Object,
_mapperMock.Object
);
}
[Test]
public async Task GetIncomingRequests_ValidRequest_ReturnsOkResult()
{
// Arrange
var currentId = _fixture.Create<Guid>();
var friendships = _fixture.CreateMany<Friendship>().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<List<FriendshipDto>>(friendships)).Returns(dtos);
// Act
var result = await _controller.GetIncomingRequests();
// Assert
Assert.That(result, Is.InstanceOf<OkObjectResult>());
var okResult = result as OkObjectResult;
List<FriendshipDto> value = okResult.Value as List<FriendshipDto>;
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<Guid>();
_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<OkObjectResult>());
var okResult = result as OkObjectResult;
List<FriendshipDto> value = okResult.Value as List<FriendshipDto>;
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<Guid>();
_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<ObjectResult>());
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<Guid>();
var friendships = _fixture.CreateMany<Friendship>().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<List<FriendshipDto>>(friendships)).Returns(dtos);
// Act
var result = await _controller.GetResponses();
// Assert
Assert.That(result, Is.InstanceOf<OkObjectResult>());
var okResult = result as OkObjectResult;
List<FriendshipDto> value = okResult.Value as List<FriendshipDto>;
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<Guid>();
_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<OkObjectResult>());
var okResult = result as OkObjectResult;
List<FriendshipDto> value = okResult.Value as List<FriendshipDto>;
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<Guid>();
_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<ObjectResult>());
var objectResult = result as ObjectResult;
Assert.That(objectResult.StatusCode, Is.EqualTo(500));
}
}
@@ -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<ILogger<FriendshipController>> _loggerMock;
private Mock<IFriendshipService> _friendsServiceMock;
private Mock<ICurrentUserService> _currentUserServiceMock;
private Mock<IMapper> _mapperMock;
private FriendshipController _controller;
[SetUp]
public void SetUp()
{
_fixture = new Fixture();
_fixture.Behaviors.OfType<ThrowingRecursionBehavior>().ToList().ForEach(b => _fixture.Behaviors.Remove(b));
_fixture.Behaviors.Add(new OmitOnRecursionBehavior());
_loggerMock = new Mock<ILogger<FriendshipController>>();
_friendsServiceMock = new Mock<IFriendshipService>();
_currentUserServiceMock = new Mock<ICurrentUserService>();
_mapperMock = new Mock<IMapper>();
_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<User>().ToList();
var dtos = users.Select(u => new UserDto { Id = u.Id }).ToList();
var userId = _fixture.Create<Guid>();
var query = _fixture.Create<string>();
_currentUserServiceMock.Setup(c => c.GetCurrentUserId()).Returns(userId);
_friendsServiceMock.Setup(f => f.SearchUsersAsync(query, userId))
.ReturnsAsync(users);
_mapperMock.Setup(m => m.Map<List<UserDto>>(users)).Returns(dtos);
// Act
var result = await _controller.Search(query);
var okResult = result as OkObjectResult;
dynamic value = okResult.Value;
List<UserDto> userDtos = value as List<UserDto>;
// 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<BadRequestObjectResult>());
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<string>(), It.IsAny<Guid>()))
.ThrowsAsync(new SearchUsersException(_fixture.Create<string>()));
// Act
var result = await _controller.Search(_fixture.Create<string>());
// Assert
Assert.That(result, Is.InstanceOf<NotFoundObjectResult>());
}
[Test]
public async Task Search_StatusCode500_IfThrowsSomeException()
{
// Arrange
_friendsServiceMock.Setup(f => f.SearchUsersAsync(It.IsAny<string>(), It.IsAny<Guid>()))
.ThrowsAsync(new Exception(_fixture.Create<string>()));
// Act
var result = await _controller.Search(_fixture.Create<string>());
// Assert
Assert.That(result, Is.InstanceOf<ObjectResult>());
var objectResult = result as ObjectResult;
Assert.That(objectResult.StatusCode, Is.EqualTo(500));
}
[Test]
public async Task GetFriends_ValidRequest_ReturnsOkResult()
{
// Arrange
var currentId = _fixture.Create<Guid>();
var users = _fixture.CreateMany<User>().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<List<UserDto>>(users)).Returns(dtos);
// Act
var result = await _controller.GetFriends();
// Assert
Assert.That(result, Is.InstanceOf<OkObjectResult>());
var okResult = result as OkObjectResult;
List<UserDto> value = okResult.Value as List<UserDto>;
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<Guid>();
var users = _fixture.CreateMany<User>().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<OkObjectResult>());
}
[Test]
public async Task GetFriends_Exception_ReturnsStatusCode500()
{
// Arrange
var currentId = _fixture.Create<Guid>();
var users = _fixture.CreateMany<User>().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<ObjectResult>());
var objectResult = result as ObjectResult;
Assert.That(objectResult.StatusCode, Is.EqualTo(500));
}
[TearDown]
public void TearDown()
{
_controller.Dispose();
}
}
@@ -42,7 +42,7 @@ public class FriendsRequestQueryController : Controller
catch (InvalidOperationException ex) catch (InvalidOperationException ex)
{ {
_logger.LogError(ex, ex.Message); _logger.LogError(ex, ex.Message);
return BadRequest("Failed to get friend requests. User data missing."); return Ok(new List<FriendshipDto>());
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -57,12 +57,14 @@ public class FriendsRequestQueryController : Controller
try try
{ {
var result = await _friendsService.GetResponsesAsync(_currentUserService.GetCurrentUserId()); var result = await _friendsService.GetResponsesAsync(_currentUserService.GetCurrentUserId());
return Ok(BuildFriendshipDtos(result)); var response = _mapper.Map<List<FriendshipDto>>(result);
return Ok(response);
} }
catch (InvalidOperationException ex) catch (InvalidOperationException ex)
{ {
_logger.LogError(ex, ex.Message); _logger.LogError(ex, ex.Message);
return Ok(Array.Empty<FriendshipDto>()); return Ok(new List<FriendshipDto>());
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -70,12 +72,4 @@ public class FriendsRequestQueryController : Controller
return StatusCode(500, new { error = "Internal server error." }); return StatusCode(500, new { error = "Internal server error." });
} }
} }
private List<FriendshipDto> BuildFriendshipDtos(IEnumerable<Friendship> friendships) => friendships.Select(f => new FriendshipDto
{
Id = f.Id,
Status = f.Status,
AddresseeId = f.AddresseeId,
RequesterId = f.RequesterId,
}).ToList();
} }