public void WhenInstantiated_ThenShouldBeOfCorrectType()
    {
        var controller = new CustomerQueryController(_queryBrokerMoq.Object, _mapper);

        Assert.IsAssignableFrom <ControllerBase>(controller);
        Assert.IsType <CustomerQueryController>(controller);
    }
    public async Task GivenWeAreRetrievingACustomerById_WhenCustomerIsNotFound_ThenShouldReturnNotFound()
    {
        _queryBrokerMoq.Setup(x => x.SendAsync(It.IsAny <GetCustomer>()))
        .ReturnsAsync((Customer)null !);

        var controller = new CustomerQueryController(_queryBrokerMoq.Object, _mapper);

        var actionResult = await controller.GetCustomer(Customers.Customer1.Id);

        var notFoundResult = actionResult as NotFoundResult;

        Assert.NotNull(actionResult);
        Assert.NotNull(notFoundResult);
    }
    public async Task GivenWeAreRetrievingACustomerById_WhenSuccessful_ThenCorrectCustomerShouldBeReturned()
    {
        _queryBrokerMoq.Setup(x => x.SendAsync(It.IsAny <GetCustomer>()))
        .ReturnsAsync(_mapper.Map <Customer>(Customers.Customer1));

        var controller = new CustomerQueryController(_queryBrokerMoq.Object, _mapper);

        var actionResult = await controller.GetCustomer(Customers.Customer1.Id);

        var okResult = Assert.IsType <OkObjectResult>(actionResult);
        var value    = (CustomerView)okResult.Value !;

        Assert.Equal(CustomerViews.Customer1.Id, value.Id);
    }
    public async Task WhenRetrievingAllCustomers_ThenAllCustomersShouldBeReturned()
    {
        _queryBrokerMoq.Setup(x => x.SendAsync(It.IsAny <GetCustomers>()))
        .ReturnsAsync(new List <Customer>
        {
            _mapper.Map <Customer>(Customers.Customer1),
            _mapper.Map <Customer>(Customers.Customer2),
            _mapper.Map <Customer>(Customers.Customer3)
        });

        var controller = new CustomerQueryController(_queryBrokerMoq.Object, _mapper);

        var actionResult = await controller.GetCustomers();

        var okResult = Assert.IsType <OkObjectResult>(actionResult);
        var value    = (IEnumerable <CustomerView>)okResult.Value !;

        Assert.Collection(value,
                          c => Assert.Equal(CustomerViews.Customer1.Id, c.Id),
                          c => Assert.Equal(CustomerViews.Customer2.Id, c.Id),
                          c => Assert.Equal(CustomerViews.Customer3.Id, c.Id));
    }