using AutoFixture; using AutoMapper; using Govor.API.Controllers; using Govor.Application.Interfaces; using Govor.Application.Interfaces.Infrastructure.Extensions; using Govor.Contracts.Requests; using Govor.Contracts.Responses; using Govor.Core.Models.Messages; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Moq; namespace Govor.API.Tests.IntegrationTests.Controllers; [TestFixture] public class ChatLoadControllerTests { private Mock _currentUserServiceMock; private Mock> _loggerMock; private Mock _messagesLoaderMock; private Mock _mapperMock; private Fixture _fixture; private ChatLoadController _controller; private Guid _userId = Guid.NewGuid(); private Guid _chatId = Guid.NewGuid(); private Guid _currentId = Guid.NewGuid(); [SetUp] public void SetUp() { _fixture = new Fixture(); _fixture.Behaviors.OfType().ToList().ForEach(b => _fixture.Behaviors.Remove(b)); _fixture.Behaviors.Add(new OmitOnRecursionBehavior()); _currentUserServiceMock = new Mock(); _loggerMock = new Mock>(); _messagesLoaderMock = new Mock(); _mapperMock = new Mock(); _currentUserServiceMock.Setup(u => u.GetCurrentUserId()).Returns(_currentId); _controller = new ChatLoadController( _loggerMock.Object, _messagesLoaderMock.Object, _currentUserServiceMock.Object, _mapperMock.Object); } // Tests for GetChatMessages action [Test] public async Task GetChatMessages_ValidRequest_ReturnsOkResult() { // Arrange var random = new Random(); var messages = _fixture.CreateMany(random.Next(3, 10)).ToList(); var before = random.Next(1, 10); var after = random.Next(1, 10); var query = new MessageQuery() { Before = before, After = after, StartMessageId = null }; _messagesLoaderMock.Setup(m => m.LoadMessagesInChatGroup(_chatId, _currentId, null, before, after)) .ReturnsAsync(messages); var messagesResponse = messages.Select(m => new MessageResponse() { Id = m.Id, SenderId = m.SenderId, RecipientId = m.RecipientId, RecipientType = m.RecipientType, }).ToList(); _mapperMock.Setup(f => f.Map>(messages)). Returns(messagesResponse); // Act var result = await _controller.GetGroupMessages(_chatId, query); // Assert Assert.That(result, Is.Not.Null); Assert.That(result, Is.InstanceOf()); var okResult = (OkObjectResult)result; var values = okResult.Value as List; Assert.That(values, Is.Not.Null); Assert.That(values.Select(v => v.Id), Is.EquivalentTo(messagesResponse.Select(m => m.Id))); Assert.That(values.Select(v => v.SenderId), Is.EquivalentTo(messagesResponse.Select(m => m.SenderId))); Assert.That(values.Select(v => v.RecipientId), Is.EquivalentTo(messagesResponse.Select(m => m.RecipientId))); Assert.That(values.Select(v => v.RecipientType), Is.EquivalentTo(messagesResponse.Select(m => m.RecipientType))); } }