public async Task <MessagesResult> GetLastMessagesAsync(GetLastMessagesRequest request) { var member = await UnitOfWork.MemberRepository.GetMemberBySaasUserIdAsync(request.SaasUserId); if (member == null) { throw new NetKitChatNotFoundException($"Unable to get last messages. Member {nameof(request.SaasUserId)}:{request.SaasUserId} is not found."); } IReadOnlyCollection <Message> messages; var lastReadMessage = await UnitOfWork.MessageRepository.GetLastReadMessageAsync(member.Id, request.ChannelId); if (lastReadMessage != null) { messages = await UnitOfWork.MessageRepository.GetLastMessagesWithOwnersAsync(request.ChannelId, lastReadMessage.Created, _messagesConfiguration.LastMessageReadCount); } else { messages = await UnitOfWork.MessageRepository.GetAllChannelMessagesWithOwnersAsync(request.ChannelId); } var results = messages.Select(message => DomainModelsMapper.MapToMessageResponse(message, lastReadMessage?.Created)).ToList(); return(new MessagesResult { Results = results }); }
public async Task ShouldReturnMessages_WhenFoundLastReadMessage() { // Arrange var request = new GetLastMessagesRequest("864EB62D-D833-47FA-8A88-DDBFE76AE6A7", new Guid("A455F139-09E6-4EF5-B55A-D4C94D05DFDE")); var member = new Member { Id = new Guid("A1538EB3-4E4C-4E39-BDCB-F617003E4BBF") }; _memberRepositoryMock.Setup(x => x.GetMemberBySaasUserIdAsync(It.Is <string>(saasUserId => saasUserId.Equals(request.SaasUserId)))) .ReturnsAsync(member) .Verifiable(); var lastReadMessage = new Message { Created = DateTimeOffset.UtcNow }; _messageRepositoryMock.Setup(x => x.GetLastReadMessageAsync( It.Is <Guid>(memberId => memberId.Equals(member.Id)), It.Is <Guid>(channelId => channelId.Equals(request.ChannelId)))) .ReturnsAsync(lastReadMessage) .Verifiable(); var lastMessage = new Message { Id = new Guid("1E0DDFFA-3A21-44C8-97BB-E94B4F408680") }; var lastMessages = new List <Message> { lastMessage }; _messageRepositoryMock.Setup(x => x.GetLastMessagesWithOwnersAsync( It.Is <Guid>(channelId => channelId.Equals(request.ChannelId)), It.Is <DateTimeOffset>(lastReadMessageCreated => lastReadMessageCreated.Equals(lastReadMessage.Created)), It.Is <int>(pageSize => pageSize.Equals(LastMessageReadCount)))) .ReturnsAsync(lastMessages) .Verifiable(); var messageResponse = new MessageResponse(); _domainModelsMapperMock.Setup(x => x.MapToMessageResponse( It.Is <Message>(message => message.Equals(lastMessage)), It.Is <DateTimeOffset?>(lastReadMessageCreated => lastReadMessageCreated.Equals(lastReadMessage.Created)))) .Returns(messageResponse) .Verifiable(); // Act var result = await _messageService.GetLastMessagesAsync(request); // Assert VerifyMocks(); result.Results.Should().BeEquivalentTo(new List <MessageResponse> { messageResponse }); }
public void ShouldThrowIfMemberDoesNotExist() { // Arrange _memberRepositoryMock.Setup(x => x.GetMemberBySaasUserIdAsync(It.IsAny <string>())) .ReturnsAsync((Member)null) .Verifiable(); var request = new GetLastMessagesRequest("864EB62D-D833-47FA-8A88-DDBFE76AE6A7", new Guid("A455F139-09E6-4EF5-B55A-D4C94D05DFDE")); // Act Func <Task> act = async() => { await _messageService.GetLastMessagesAsync(request); }; // Assert act.Should().Throw <NetKitChatNotFoundException>() .And.Message.Should().Be($"Unable to get last messages. Member {nameof(request.SaasUserId)}:{request.SaasUserId} is not found."); VerifyMocks(); }
public async Task <MessagesResult> GetLastMessagesAsync(GetLastMessagesRequest request) { var member = await UnitOfWork.MemberRepository.GetMemberBySaasUserIdAsync(request.SaasUserId); Ensure.That(member).WithException(x => new NotFoundException(new ErrorDto(ErrorCode.NotFound, "Member does not exist."))).IsNotNull(); var lastReadMessage = await UnitOfWork.MessageRepository.GetLastReadMessageAsync(member.Id, request.ChannelId); var messages = await UnitOfWork.MessageRepository.GetLastMessagesAsync(request.ChannelId, lastReadMessage?.Created); var results = messages.Select(x => x.ToMessageResponse(lastReadMessage, _cloudStorageConfiguration)).ToList(); var result = new MessagesResult { Results = results }; return(result); }