public async Task GivenARequestForAProductThatExists_ReturnsExpectedResult()
        {
            // Arrange.
            var logger  = new Mock <ILogger <Samples.AspNetCoreMvc.Handlers.GetProduct.Handler> >();
            var handler = new Samples.AspNetCoreMvc.Handlers.GetProduct.Handler(logger.Object);
            var query   = new Samples.AspNetCoreMvc.Handlers.GetProduct.Input {
                ProductId = 1
            };
            var expectedModel = new Samples.AspNetCoreMvc.Handlers.GetProduct.Output
            {
                ProductId = query.ProductId,
                Name      = $"Product #{query.ProductId}"
            };

            // Act.
            var result = await _client.GetAsync($"/products/{query.ProductId}");

            // Assert.
            result.ShouldNotBeNull();
            result.StatusCode.ShouldBe(HttpStatusCode.OK);
            result.Content.ShouldNotBeNull();
            var resultObj = JsonConvert.DeserializeObject <Samples.AspNetCoreMvc.Handlers.GetProduct.Output>(await result.Content.ReadAsStringAsync());

            resultObj.ProductId.ShouldBe(expectedModel.ProductId);
            resultObj.Name.ShouldBe(expectedModel.Name);
        }
        public async Task GivenARequestForAProductThatDoesntExist_ReturnsExpectedResult()
        {
            // Arrange.
            var logger  = new Mock <ILogger <Samples.AspNetCoreMvc.Handlers.GetProduct.Handler> >();
            var handler = new Samples.AspNetCoreMvc.Handlers.GetProduct.Handler(logger.Object);
            var query   = new Samples.AspNetCoreMvc.Handlers.GetProduct.Input {
                ProductId = 0
            };

            // Act.
            var result = await _client.GetAsync($"/products/{query.ProductId}");

            // Assert.
            result.ShouldNotBeNull();
            result.StatusCode.ShouldBe(HttpStatusCode.NotFound);
        }