From 58e7716dedee6ebb66cafa2c4a867ec81866fe19 Mon Sep 17 00:00:00 2001 From: Artemy <109195690+stalcker2288969@users.noreply.github.com> Date: Mon, 21 Jul 2025 13:42:41 +0700 Subject: [PATCH] MessagesLoaderTests --- .../Controllers/MediaControllerTests.cs | 10 -- .../Services/Messages/MessagesLoaderTests.cs | 168 ++++++++++++++++++ 2 files changed, 168 insertions(+), 10 deletions(-) create mode 100644 Govor.Application.Tests/Services/Messages/MessagesLoaderTests.cs diff --git a/Govor.API.Tests/IntegrationTests/Controllers/MediaControllerTests.cs b/Govor.API.Tests/IntegrationTests/Controllers/MediaControllerTests.cs index e0175b6..fcb5e4c 100644 --- a/Govor.API.Tests/IntegrationTests/Controllers/MediaControllerTests.cs +++ b/Govor.API.Tests/IntegrationTests/Controllers/MediaControllerTests.cs @@ -61,16 +61,6 @@ public class MediaControllerTests .With(r => r.EncryptedKey, "secret") .Create(); - var media = new Media( - _userId, - DateTime.UtcNow, - Path.GetFileName(uploadRequest.FromFile.FileName), - fileBytes, - uploadRequest.Type, - uploadRequest.MimeType, - uploadRequest.EncryptedKey - ); - var uploadResult = _fixture.Create(); _mockMedia.Setup(f => f.UploadMediaAsync(It.IsAny())) diff --git a/Govor.Application.Tests/Services/Messages/MessagesLoaderTests.cs b/Govor.Application.Tests/Services/Messages/MessagesLoaderTests.cs new file mode 100644 index 0000000..3c8f76d --- /dev/null +++ b/Govor.Application.Tests/Services/Messages/MessagesLoaderTests.cs @@ -0,0 +1,168 @@ +using Govor.Application.Interfaces; +using Govor.Application.Services.Messages; +using Govor.Core.Models; +using Govor.Core.Models.Messages; +using Govor.Core.Repositories.Groups; +using Govor.Core.Repositories.PrivateChats; +using Govor.Data; +using Microsoft.EntityFrameworkCore; +using Moq; + +namespace Govor.Application.Tests.Services.Messages; + +[TestFixture] +public class MessagesLoaderTests +{ + private IMessagesLoader _loader; + private Mock _privateChatsRepoMock; + private Mock _groupsRepoMock; + private GovorDbContext _dbContext; + + private Guid _currentUserId = Guid.NewGuid(); + private Guid _otherUserId = Guid.NewGuid(); + private Guid _groupChatId = Guid.NewGuid(); + + [SetUp] + public void Setup() + { + _privateChatsRepoMock = new Mock(); + _groupsRepoMock = new Mock(); + + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + _dbContext = new GovorDbContext(options); + + _loader = new MessagesLoader(_groupsRepoMock.Object, _privateChatsRepoMock.Object, _dbContext); + } + + // Tests for LoadLastMessagesInUserChat action + [Test] + public async Task LoadLastMessagesInUserChat_ReturnsMessages_WhenChatExists() + { + // Arrange + var chatId = Guid.NewGuid(); + + _privateChatsRepoMock.Setup(r => r.Exist(_currentUserId, _otherUserId)).Returns(true); + _privateChatsRepoMock.Setup(r => r.GetByMembersAsync(_currentUserId, _otherUserId)) + .ReturnsAsync(new PrivateChat() { Id = chatId }); + + var messages = new List + { + new() { Id = Guid.NewGuid(), RecipientId = chatId, RecipientType = RecipientType.User } + }; + + await _dbContext.Messages.AddRangeAsync(messages); + await _dbContext.SaveChangesAsync(); + + // Act + var result = await _loader.LoadLastMessagesInUserChat(_currentUserId, _otherUserId, null); + + // Assert + Assert.That(result, Has.Count.EqualTo(1)); + } + + [Test] + public async Task LoadLastMessagesInUserChat_ReturnsEmpty_WhenNoMessages() + { + // Arrange + _privateChatsRepoMock.Setup(r => r.Exist(_currentUserId, _otherUserId)).Returns(true); + _privateChatsRepoMock.Setup(r => r.GetByMembersAsync(_currentUserId, _otherUserId)) + .ReturnsAsync(new PrivateChat { Id = Guid.NewGuid() }); + // Act + var result = await _loader.LoadLastMessagesInUserChat(_currentUserId, _otherUserId, null); + + // Assert + Assert.That(result, Is.Empty); + } + + [Test] + public void LoadLastMessagesInUserChat_Throws_WhenUserIdIsEmpty() + { + // Act & Assert + var ex = Assert.ThrowsAsync(async () => + await _loader.LoadLastMessagesInUserChat(Guid.Empty, _currentUserId, null)); + + Assert.That(ex.Message, Does.Contain("User id cannot be empty")); + } + + [Test] + public void LoadLastMessagesInUserChat_Throws_WhenChatNotExists() + { + // Arrange + _privateChatsRepoMock.Setup(r => r.Exist(It.IsAny(), It.IsAny())).Returns(false); + + // Act & Assert + var ex = Assert.ThrowsAsync(async () => + await _loader.LoadLastMessagesInUserChat(_currentUserId, _otherUserId, null)); + + Assert.That(ex.Message, Is.EqualTo("Private chat not found")); + } + + // Tests for LoadLastMessagesInChatGroup action + [Test] + public async Task LoadLastMessagesInChatGroup_ReturnsMessages_WhenUserIsMember() + { + // Arrange + _groupsRepoMock.Setup(g => g.IsUserMemberOfGroupAsync(_currentUserId, _groupChatId)) + .ReturnsAsync(true); + + var messages = new List + { + new() { Id = Guid.NewGuid(), RecipientId = _groupChatId, RecipientType = RecipientType.Group } + }; + + await _dbContext.Messages.AddRangeAsync(messages); + await _dbContext.SaveChangesAsync(); + + // Act + var result = await _loader.LoadLastMessagesInChatGroup(_groupChatId, _currentUserId, null); + + // Assert + Assert.That(result, Has.Count.EqualTo(1)); + } + + [Test] + public void LoadLastMessagesInChatGroup_Throws_WhenChatIdEmpty() + { + // Act & Assert + var ex = Assert.ThrowsAsync(async () => + await _loader.LoadLastMessagesInChatGroup(Guid.Empty, _currentUserId, null)); + + Assert.That(ex.Message, Does.Contain("Chat id cannot be empty")); + } + + [Test] + public void LoadLastMessagesInChatGroup_Throws_WhenUserNotInGroup() + { + // Arrange + _groupsRepoMock.Setup(g => g.IsUserMemberOfGroupAsync(_currentUserId, _groupChatId)) + .ReturnsAsync(false); + + // Act & Assert + var ex = Assert.ThrowsAsync(async () => + await _loader.LoadLastMessagesInChatGroup(_groupChatId, _currentUserId, null)); + + Assert.That(ex.Message, Is.EqualTo("You are not in a group.")); + } + + [Test] + public async Task LoadLastMessagesInChatGroup_ReturnsEmpty_WhenNoMessages() + { + // Arrange + _groupsRepoMock.Setup(g => g.IsUserMemberOfGroupAsync(_currentUserId, _groupChatId)) + .ReturnsAsync(true); + + // Act + var result = await _loader.LoadLastMessagesInChatGroup(_groupChatId, _currentUserId, null); + + // Assert + Assert.That(result, Is.Empty); + } + + [TearDown] + public void TearDown() + { + _dbContext.Dispose(); + } +} \ No newline at end of file