public void CacheHit()
        {
            var cache         = new Mock <IDistributedCache>(MockBehavior.Strict);
            var cacheProvider = new Mock <IAsyncCacheProvider>(MockBehavior.Strict);
            var cachePolicy   = Policy.CacheAsync(cacheProvider.Object, new Mock <ITtlStrategy>().Object);
            var repository    = new Mock <ISecretRepository>(MockBehavior.Strict);
            var service       = new SecretRepositoryCache(repository.Object, cachePolicy);

            // NB Have to use the underlying methods not the helpful extensions
            cache.Setup(x => x.Get("clientsecret:A")).Returns(Encoding.UTF8.GetBytes("B"));

            var candidate = service.ClientSecret("A");

            Assert.That(candidate, Is.EqualTo("B"), "Secret differs");
        }
        public void CacheMiss()
        {
            var cache         = new Mock <IDistributedCache>(MockBehavior.Strict);
            var cacheProvider = new Mock <IAsyncCacheProvider>(MockBehavior.Strict);
            var cachePolicy   = Policy.CacheAsync(cacheProvider.Object, new Mock <ITtlStrategy>().Object);
            var repository    = new Mock <ISecretRepository>(MockBehavior.Strict);
            var service       = new SecretRepositoryCache(repository.Object, cachePolicy);

            // NB Have to use the underlying methods not the helpful extensions
            cache.Setup(x => x.Get("clientsecret:A")).Returns((byte[])null);
            cache.Setup(x => x.Set("clientsecret:A", It.IsAny <byte[]>(), It.IsAny <DistributedCacheEntryOptions>()));

            repository.Setup(x => x.ClientSecret("A")).Returns("B");

            var candidate = service.ClientSecret("A");

            Assert.That(candidate, Is.EqualTo("B"), "Secret differs");
        }