public async Task IsAuthorOfMessageQuery_ShouldReturnFalse_WhenUserIsNotAuthor()
        {
            // Arrange
            IsAuthorOfMessageQuery request = new IsAuthorOfMessageQuery {
                MessageId = 1
            };

            IQueryable <Message> databaseMessage = new[]
            {
                new Message {
                    MessageId = 1, AuthorId = 2
                }
            }
            .AsQueryable()
            .BuildMock()
            .Object;

            _unitOfWorkMock
            .Setup(m => m.Messages.GetById(request.MessageId))
            .Returns(databaseMessage);

            IsAuthorOfMessageQuery.Handler handler = new IsAuthorOfMessageQuery.Handler(_unitOfWorkMock.Object, _userProviderMock.Object);

            // Act
            bool isAuthor = await handler.Handle(request);

            // Assert
            Assert.False(isAuthor);
        }
Exemplo n.º 2
0
        public async Task <ActionResult> EditMessage([FromRoute] int messageId, [FromBody] EditMessageBody body, CancellationToken cancellationToken = default)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            // Check if the message exists
            MessageExistsQuery existsQuery = new MessageExistsQuery {
                MessageId = messageId
            };

            bool exists = await _mediator.Send(existsQuery, cancellationToken);

            if (!exists)
            {
                return(NotFound(new ErrorResource
                {
                    StatusCode = StatusCodes.Status404NotFound,
                    Message = $"Message with ID '{messageId}' does not exist"
                }));
            }

            // Check if the user is the author of the message and thus allowed to update it
            IsAuthorOfMessageQuery isAuthorQuery = new IsAuthorOfMessageQuery {
                MessageId = messageId
            };

            bool isAuthor = await _mediator.Send(isAuthorQuery, cancellationToken);

            if (!isAuthor)
            {
                return(StatusCode(StatusCodes.Status403Forbidden, new ErrorResource
                {
                    StatusCode = StatusCodes.Status403Forbidden,
                    Message = "Only the author of a message is allowed to update a message"
                }));
            }

            // Update the message
            EditMessageCommand editCommand = new EditMessageCommand {
                MessageId = messageId, HtmlContent = body.HtmlContent
            };

            await _mediator.Send(editCommand, cancellationToken);

            return(NoContent());
        }
Exemplo n.º 3
0
        public async Task <ActionResult> DeleteMessage([FromRoute] int messageId, CancellationToken cancellationToken = default)
        {
            // Check if the message exists
            MessageExistsQuery existsQuery = new MessageExistsQuery {
                MessageId = messageId
            };

            bool exists = await _mediator.Send(existsQuery, cancellationToken);

            if (!exists)
            {
                return(NotFound(new ErrorResource
                {
                    StatusCode = StatusCodes.Status404NotFound,
                    Message = $"Message with ID '{messageId}' does not exist"
                }));
            }

            // Check if the user is the author of the message and thus allowed to update it
            IsAuthorOfMessageQuery isAuthorQuery = new IsAuthorOfMessageQuery {
                MessageId = messageId
            };

            bool isAuthor = await _mediator.Send(isAuthorQuery, cancellationToken);

            if (!isAuthor)
            {
                return(StatusCode(StatusCodes.Status403Forbidden, new ErrorResource
                {
                    StatusCode = StatusCodes.Status403Forbidden,
                    Message = "Only the author of a message is allowed to delete a message"
                }));
            }

            // Delete the message
            DeleteMessageCommand deleteCommand = new DeleteMessageCommand {
                MessageId = messageId
            };

            await _mediator.Send(deleteCommand, cancellationToken);

            return(NoContent());
        }
Exemplo n.º 4
0
    public async Task IsAuthorOfMessageQuery_ShouldReturnTrue_WhenUserIsAuthor()
    {
        // Arrange
        IsAuthorOfMessageQuery request = new IsAuthorOfMessageQuery {
            MessageId = 1
        };

        Message databaseMessage = new() { MessageId = 1, AuthorId = 1 };

        _unitOfWorkMock
        .Setup(m => m.Messages.GetByIdAsync(request.MessageId))
        .ReturnsAsync(databaseMessage);

        IsAuthorOfMessageQuery.Handler handler = new(_unitOfWorkMock.Object, _userProviderMock.Object);

        // Act
        bool isAuthor = await handler.Handle(request);

        // Assert
        Assert.True(isAuthor);
    }