public async Task GivenValidRequestWithReactionType_ShouldUpdateMessage()
        {
            var client = await _factory.GetAuthenticatedClientAsync();

            // init DB for test
            var context = _factory.InitializeDbForTests();

            var messageId = Guid.Parse("b73477a4-f61d-46fa-873c-7d71c01dfbdf");

            UpdateMessageChatCommand command = new UpdateMessageChatCommand()
            {
                MessageId    = Guid.Parse("b73477a4-f61d-46fa-873c-7d71c01dfbdf"),
                ReactionType = "+1",
            };
            // reactionType ['+1', 'grinning', 'white_frowning_face', 'angry', 'astonished'];
            var content = IntegrationTestHelper.GetRequestContent(command);

            var response = await client.PutAsync($"/api/Messages/{messageId}", content);

            response.EnsureSuccessStatusCode();
            response.StatusCode.ShouldBe(HttpStatusCode.OK);

            // release DB
            _factory.DisposeDbForTests(context);
        }
        public async Task <ActionResult> Update(string messageId, UpdateMessageChatCommand command)
        {
            if (!messageId.Equals(command.MessageId.ToString()))
            {
                return(BadRequest());
            }

            await Mediator.Send(command);

            return(Ok());
        }
Example #3
0
        public void Validate_ValidCommand_ShouldBeTrue()
        {
            var command = new UpdateMessageChatCommand
            {
                MessageId = Guid.NewGuid(),
            };

            var validator = new UpdateMessageChatCommandValidator();

            var result = validator.Validate(command);

            result.IsValid.ShouldBe(true);
        }
Example #4
0
        public void Validate_ConversationIdEmpty_ShouldBeFalse()
        {
            var command = new UpdateMessageChatCommand
            {
                MessageId = Guid.Empty,
            };

            var validator = new UpdateMessageChatCommandValidator();

            var result = validator.Validate(command);

            result.IsValid.ShouldBe(false);
        }
Example #5
0
        public async Task Handle_GivenInvalidMessageId_ThrowsNotFoundException()
        {
            // Login user is Reactor
            _sut = SetLoginUser(reactor);

            var invalidTaskId = Guid.NewGuid();

            var command = new UpdateMessageChatCommand {
                MessageId = invalidTaskId
            };

            await Assert.ThrowsAsync <NotFoundException>(() => _sut.Handle(command, CancellationToken.None));
        }
        public async Task GivenValidRequest_ReturnsSuccessCode()
        {
            var client = await _factory.GetAuthenticatedClientAsync();

            var command = new UpdateMessageChatCommand
            {
                MessageId    = new Guid("B73477A4-F61D-46FA-873C-7D71C01DFBDF"),
                ReactionType = "Like"
            };

            var content = IntegrationTestHelper.GetRequestContent(command);

            var response = await client.PutAsync($"/api/MessageChat/{command.MessageId.ToString()}", content);

            response.EnsureSuccessStatusCode();
        }
Example #7
0
        public async Task Handle_GivenValidMessageIdAndIsPinHasValue_UpdateSuccess()
        {
            // Login user is Reactor
            _sut = SetLoginUser(reactor);

            var command = new UpdateMessageChatCommand
            {
                MessageId = messageHasOneReactionId,
                IsPin     = true
            };

            await _sut.Handle(command, CancellationToken.None);

            var message = await _context.MessageChats.FindAsync(messageHasOneReactionId);

            message.IsPin.ShouldBeTrue();
        }
Example #8
0
        public async Task Handle_GivenValidMessageIdAndReactionTypeAndIsDeleteReactionIsTrue_NotRemoveReactionSuccess()
        {
            // Login user is not reactor
            _sut = SetLoginUser(reactor);

            var command = new UpdateMessageChatCommand
            {
                MessageId    = messageHasOneReactionId,
                ReactionType = "Angry",
            };

            await _sut.Handle(command, CancellationToken.None);

            var message = await _context.MessageChats.FindAsync(messageHasOneReactionId);

            message.ReactionList.Count.ShouldBe(1);
            message.IsPin.ShouldBeFalse();
        }
        public async Task GivenInvalidRequest_ShouldRaiseBadRequest()
        {
            var client = await _factory.GetAuthenticatedClientAsync();

            // init DB for test
            var context = _factory.InitializeDbForTests();

            var messageId = Guid.Parse("B73477A4-F61D-46FA-873C-7D71C01DFBDF");

            UpdateMessageChatCommand command = new UpdateMessageChatCommand()
            {
                MessageId = Guid.Parse("B73477A4-F61D-46FA-873C-7D71C01DFBD1"),
                IsPin     = true,
            };
            var content = IntegrationTestHelper.GetRequestContent(command);

            var response = await client.PutAsync($"/api/Messages/{messageId}", content);

            response.StatusCode.ShouldBe(HttpStatusCode.BadRequest);

            // release DB
            _factory.DisposeDbForTests(context);
        }
        public async Task GivenValidRequestWithIsPin_ShouldUpdateMessage()
        {
            var client = await _factory.GetAuthenticatedClientAsync();

            // init DB for test
            var context = _factory.InitializeDbForTests();

            var messageId = Guid.Parse("b73477a4-f61d-46fa-873c-7d71c01dfbdf");

            UpdateMessageChatCommand command = new UpdateMessageChatCommand()
            {
                MessageId = Guid.Parse("b73477a4-f61d-46fa-873c-7d71c01dfbdf"),
                IsPin     = true,
            };
            var content = IntegrationTestHelper.GetRequestContent(command);

            var response = await client.PutAsync($"/api/Messages/{messageId}", content);

            response.EnsureSuccessStatusCode();
            response.StatusCode.ShouldBe(HttpStatusCode.OK);

            // release DB
            _factory.DisposeDbForTests(context);
        }
        public async Task <ActionResult> Update(string messageId, UpdateMessageChatCommand command)
        {
            if (!messageId.Equals(command.MessageId.ToString()))
            {
                return(BadRequest());
            }

            var updateType = await Mediator.Send(command);

            // query message chat
            var messageChat = await Mediator.Send(new GetMessageChatByIdQuery
            {
                MessageChatId = new Guid(messageId)
            });

            // query other members of the conversation
            var conversation = await Mediator.Send(new GetConversationQuery
            {
                ConversationId = messageChat.ConversationId.ToString()
            });

            // create Notification
            if (messageChat.ReactionList.Count > 0 &&
                updateType == "addReaction" &&
                messageChat.CreatedBy != _currentUserService.UserId)
            {
                messageChat.TeamId = conversation.TeamId;
                await CreateNotification(messageChat, messageChat.Id, "Reaction",
                                         conversation.Members.Where(u => u.UserId.ToString() == messageChat.CreatedBy).ToList());
            }

            // notify to other members of conversation about the new update message chat
            // Add user to group
            foreach (UserModel user in conversation.Members)
            {
                foreach (var entity in GetConnectionEntitys(user.UserId.ToString()))
                {
                    await _hubContext.Groups.AddToGroupAsync(entity.RowKey, conversation.Id.ToString());
                }
            }
            var Connections = GetConnectionIds(_currentUserService.UserId);

            messageChat.ConversationName = conversation.Name;
            await _hubContext.Clients.GroupExcept(conversation.Id.ToString(), Connections).SendAsync("ReceiveMessage", messageChat);

            await _hubContext.Clients.GroupExcept(conversation.Id.ToString(), Connections).SendAsync("NewConversation", new ConversationLastContentModel
            {
                Conversation           = conversation,
                LastMessageChatContent = new MessageChatModel
                {
                    RegUserName    = messageChat.RegUserName,
                    Content        = messageChat.Content,
                    ConversationId = conversation.Id,
                    Created        = messageChat.Created
                }
            });

            foreach (var entity in GetConnectionEntitys(_currentUserService.UserId))
            {
                await _hubContext.Clients.Client(entity.RowKey).SendAsync("ReceiveMessage", messageChat);
            }

            return(Ok());
        }