private void AssertResponse(CreateCardCommandResult commandResult, CreateCardResponse response)
 {
     Assert.Equal(commandResult.Id, response.Id);
     Assert.Equal(commandResult.Number, response.Number);
     Assert.Equal(commandResult.CardHolder, response.CardHolder);
     Assert.Equal(commandResult.ExpirationDate, response.ExpirationDate);
 }
        public async Task Should_Return_CreatedResult_With_Correct_Data()
        {
            // Arrange
            var request = new CreateCardRequest
            {
                Number         = "xxxx-xxxx-xxxx-xxx",
                CardHolder     = "Filipe A. L. Souza",
                ExpirationDate = new DateTime(2022, 1, 12),
            };

            var commandResult = new CreateCardCommandResult(
                id: Guid.NewGuid(),
                number: "xxxx-xxxx-xxxx-xxx",
                cardHolder: "Filipe A. L. Souza",
                expirationDate: new DateTime(2022, 1, 12),
                success: true
                );

            commandDispatcherMock
            .Setup(x => x.Dispatch(It.IsAny <CreateCardCommand>()))
            .ReturnsAsync(commandResult);

            // Act
            var actionResult = await sut.Post(request);

            // Assert
            var createdResult = Assert.IsType <CreatedAtActionResult>(actionResult);
            var response      = Assert.IsAssignableFrom <CreateCardResponse>(createdResult.Value);

            AssertResponse(commandResult, response);
        }