public async Task GetItemJsonAsync_ResponseIsCached()
        {
            const string codename    = "codename";
            var          url         = $"items/{codename}";
            var          item        = CreateItemResponse(CreateItem(codename, "original"));
            var          updatedItem = CreateItemResponse(CreateItem(codename, "updated"));

            var scenarioBuilder = new ScenarioBuilder();

            var scenario      = scenarioBuilder.WithResponse(url, item).Build();
            var firstResponse = await scenario.CachingClient.GetItemJsonAsync(codename);

            scenario = scenarioBuilder.WithResponse(url, updatedItem).Build();
            var secondResponse = await scenario.CachingClient.GetItemJsonAsync(codename);

            firstResponse.Should().NotBeNull();
            firstResponse.Should().BeEquivalentTo(secondResponse);
            scenario.GetRequestCount(url).Should().Be(1);
        }
        public async Task GetItemJsonAsync_InvalidatedByItemDependency()
        {
            const string codename    = "codename";
            var          url         = $"items/{codename}";
            var          item        = CreateItemResponse(CreateItem(codename, "original"));
            var          updatedItem = CreateItemResponse(CreateItem(codename, "updated"));

            var scenarioBuilder = new ScenarioBuilder();

            var scenario      = scenarioBuilder.WithResponse(url, item).Build();
            var firstResponse = await scenario.CachingClient.GetItemJsonAsync(codename);

            scenario = scenarioBuilder.WithResponse(url, updatedItem).Build();
            scenario.InvalidateDependency(CacheHelper.GetItemDependencyKey(codename));
            var secondResponse = await scenario.CachingClient.GetItemJsonAsync(codename);

            firstResponse.Should().NotBeNull();
            secondResponse.Should().NotBeNull();
            firstResponse.Should().NotEqual(secondResponse);
            scenario.GetRequestCount(url).Should().Be(2);
        }