public async void PexaApiTokenQueryRetrieveFromCache()
        {
            var query = new PexaApiTokenQuery()
            {
                AuthenticatedUser    = new WCAUser(),
                BypassAndUpdateCache = false
            };

            var credentialId = $"PEXA-API-token-for-user-{query.AuthenticatedUser.Id}";

            var testTokenInCache        = "{\"access_token\": \"Test Access Token in Cache\"}";
            var testPexaApiTokenInCache = PexaApiToken.Success(JObject.Parse(testTokenInCache), Instant.FromUtc(2019, 7, 14, 2, 5));

            var testTokenInVault        = "{\"access_token\": \"Test Access Token in Vault\"}";
            var testPexaApiTokenInVault = PexaApiToken.Success(JObject.Parse(testTokenInVault), Instant.FromUtc(2019, 7, 14, 2, 5));

            using (var pexaTestKeyVaultClient = new PexaTestKeyVaultClient(credentialId, testPexaApiTokenInVault))
                using (var testMemoryCache = new MemoryCache(Options.Create(new MemoryCacheOptions())))
                {
                    testMemoryCache.Set(credentialId, testPexaApiTokenInCache);
                    var handlerUnderTest = new PexaApiTokenQueryHandler(
                        pexaTestKeyVaultClient,
                        new PexaApiTokenQuery.Validator(),
                        testMemoryCache,
                        Options.Create(new WCACoreSettings()
                    {
                        CredentialAzureKeyVaultUrl = "https://dummy"
                    }));

                    var result = await handlerUnderTest.Handle(query, new CancellationToken());

                    Assert.Equal("Test Access Token in Cache", result.AccessToken);
                }
        }
        public async void PexaApiTokenOtherKeyVaultExceptionThrows()
        {
            var query = new PexaApiTokenQuery()
            {
                AuthenticatedUser = new WCAUser()
            };

            var keyVaultErrorException = new KeyVaultErrorException();

            using (var pexaTestKeyVaultClient = new PexaTestKeyVaultClient(keyVaultErrorException))
                using (var memoryCache = new MemoryCache(Options.Create(new MemoryCacheOptions())))
                {
                    var handlerUnderTest = new PexaApiTokenQueryHandler(
                        pexaTestKeyVaultClient,
                        new PexaApiTokenQuery.Validator(),
                        memoryCache,
                        Options.Create(new WCACoreSettings()
                    {
                        CredentialAzureKeyVaultUrl = "https://dummy"
                    }));

                    await Assert.ThrowsAsync <KeyVaultErrorException>(async() =>
                    {
                        var result = await handlerUnderTest.Handle(query, new CancellationToken());
                    });
                }
        }
        public async void PexaApiTokenForbiddenReturnsNull()
        {
            var query = new PexaApiTokenQuery()
            {
                AuthenticatedUser = new WCAUser()
            };

            using (var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.Forbidden))
            {
                var keyVaultErrorException = new KeyVaultErrorException()
                {
                    Response = new HttpResponseMessageWrapper(httpResponseMessage, null)
                };

                using (var pexaTestKeyVaultClient = new PexaTestKeyVaultClient(keyVaultErrorException))
                    using (var memoryCache = new MemoryCache(Options.Create(new MemoryCacheOptions())))
                    {
                        var handlerUnderTest = new PexaApiTokenQueryHandler(
                            pexaTestKeyVaultClient,
                            new PexaApiTokenQuery.Validator(),
                            memoryCache,
                            Options.Create(new WCACoreSettings()
                        {
                            CredentialAzureKeyVaultUrl = "https://dummy"
                        }));

                        var result = await handlerUnderTest.Handle(query, new CancellationToken());

                        Assert.Null(result);
                    }
            }
        }
        public async void PexaApiTokenQueryNoTokenReturnsNull()
        {
            var query = new PexaApiTokenQuery()
            {
                AuthenticatedUser = new WCAUser()
            };

            using (var pexaTestKeyVaultClient = new PexaTestKeyVaultClient(null, null))
                using (var memoryCache = new MemoryCache(Options.Create(new MemoryCacheOptions())))
                {
                    var handlerUnderTest = new PexaApiTokenQueryHandler(
                        pexaTestKeyVaultClient,
                        new PexaApiTokenQuery.Validator(),
                        memoryCache,
                        Options.Create(new WCACoreSettings()
                    {
                        CredentialAzureKeyVaultUrl = "https://dummy"
                    }));

                    var result = await handlerUnderTest.Handle(query, new CancellationToken());

                    Assert.Null(result);
                }
        }