Exemple #1
0
        public async Task PostChatMessage(string receiverId, ChatMessageNewDto chatMessageNew)
        {
            await ValidateMessagePosting(receiverId, chatMessageNew);

            var senderId = _currentUserService.GetUserId();

            var chatMessage = new ChatMessage
            {
                ReceiverId = receiverId,
                SenderId   = senderId,
                Timestamp  = _timeService.GetCurrentTime(),
                Content    = chatMessageNew.Content,
                ModuleId   = chatMessageNew.ModuleId
            };

            await _chatMessagesRepository.Create(chatMessage);

            var sender = await _userManager.FindByIdAsync(senderId);

            var chatMessageDto = new ChatMessageDto
            {
                SenderId   = chatMessage.SenderId,
                Timestamp  = chatMessage.Timestamp,
                SenderName = $"{sender.FirstName} {sender.LastName}",
                Content    = chatMessage.Content
            };

            await _hubsService.SendChatNotificationToUser(senderId, chatMessageDto);

            await _hubsService.SendChatNotificationToUser(receiverId, chatMessageDto);
        }
        public async Task <IActionResult> PostMessage(string userId, [FromBody] ChatMessageNewDto chatMessageNew)
        {
            try
            {
                await _chatsService.PostChatMessage(userId, chatMessageNew);

                return(Ok());
            }
            catch (InvalidOperationException ex)
            {
                return(BadRequest(ex.Message));
            }
        }
        public async Task When_PostingChatMessageAsStudent_Expect_MessagePosted()
        {
            var receiver = await _userManager.FindByEmailAsync("*****@*****.**");

            var sender = await _userManager.FindByEmailAsync("*****@*****.**");

            var chatMessageNewDto = new ChatMessageNewDto {
                Content = "Testing...", ModuleId = 1
            };
            await _chatsService.PostChatMessage(receiver.Id, chatMessageNewDto);

            var chatMessagePosted = await _context.ChatMessages.FirstAsync(cm => cm.Content == "Testing...");

            Assert.Equal(sender.Id, chatMessagePosted.SenderId);
            Assert.Equal(receiver.Id, chatMessagePosted.ReceiverId);
        }
        public async Task When_PostingChatMessageToRandomUser_Expect_Exception(string receiverEmail)
        {
            _currentUserServiceMock
            .Setup(s => s.GetUserId())
            .Returns(_userManager.Users.First(u => u.Email == "*****@*****.**").Id);

            var receiver = await _userManager.FindByEmailAsync(receiverEmail);

            var chatMessageNewDto = new ChatMessageNewDto {
                Content = "Testing..."
            };

            await Assert.ThrowsAsync <InvalidOperationException>(async() =>
                                                                 await _chatsService.PostChatMessage(receiver?.Id, chatMessageNewDto)
                                                                 );
        }
        public async Task When_PostingChatMessageAsTutor_Expect_MessagePosted()
        {
            _currentUserServiceMock
            .Setup(s => s.GetUserId())
            .Returns(_userManager.Users.First(u => u.Email == "*****@*****.**").Id);

            var sender = await _userManager.FindByEmailAsync("*****@*****.**");

            var receiver = await _userManager.FindByEmailAsync("*****@*****.**");

            var chatMessageNewDto = new ChatMessageNewDto {
                Content = "Testing...", ModuleId = 1
            };
            await _chatsService.PostChatMessage(receiver.Id, chatMessageNewDto);

            var chatMessagePosted = await _context.ChatMessages.FirstAsync(cm => cm.Content == "Testing...");

            Assert.Equal(sender.Id, chatMessagePosted.SenderId);
            Assert.Equal(receiver.Id, chatMessagePosted.ReceiverId);
        }
Exemple #6
0
        private async Task ValidateMessagePosting(string receiverId, ChatMessageNewDto chatMessageNew)
        {
            var receiver = await _userManager.Users
                           .Include(u => u.StudentTutors)
                           .Include(u => u.TutorStudents)
                           .FirstOrDefaultAsync(u => u.Id == receiverId);

            if (receiver is null)
            {
                throw new InvalidOperationException($"Could not send message to user (id = '{receiverId}'): user does not exist");
            }

            var senderId  = _currentUserService.GetUserId();
            var isStudent = receiver.StudentTutors.Any(st => st.TutorId == senderId && st.ModuleId == chatMessageNew.ModuleId);
            var isTutor   = receiver.TutorStudents.Any(st => st.StudentId == senderId && st.ModuleId == chatMessageNew.ModuleId);

            if (!isStudent && !isTutor)
            {
                throw new InvalidOperationException($"Could not send message to user (id = '{receiverId}'): user does not exist");
            }
        }