public async Task GetMessageByIdHandler_ShouldReturnMessage_WhenMessageExists()
        {
            // Arrange
            GetMessageByIdQuery request = new GetMessageByIdQuery {
                MessageId = 1
            };

            IQueryable <Message> expectedMessage = new[]
            {
                new Message {
                    MessageId = 1
                }
            }
            .AsQueryable()
            .BuildMock()
            .Object;

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

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

            // Act
            MessageResource message = await handler.Handle(request);

            // Assert
            Assert.NotNull(message);
        }
Example #2
0
        public async Task <ActionResult <MessageResource> > GetMessageById([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 allowed to see the message
            CanAccessMessageQuery canAccessQuery = new CanAccessMessageQuery {
                MessageId = messageId
            };

            bool canAccess = await _mediator.Send(canAccessQuery, cancellationToken);

            if (!canAccess)
            {
                return(StatusCode(StatusCodes.Status403Forbidden, new ErrorResource
                {
                    StatusCode = StatusCodes.Status403Forbidden,
                    Message = "The user is not permitted to see this message. He may only see messages that he received or wrote himself"
                }));
            }

            // Get the message
            GetMessageByIdQuery fetchQuery = new GetMessageByIdQuery {
                MessageId = messageId
            };

            MessageResource message = await _mediator.Send(fetchQuery, cancellationToken);

            return(Ok(message));
        }