Beispiel #1
0
        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);
        }