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); }
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)); }