public async Task RetrieveData_SuccessfulResponseAndUnexpectedDataResponse()
        {
            // ARRANGE
            var appCache = (IAppCache)_context.Properties["appCache"];
            var httpClientFactoryMock = new Mock <IHttpClientFactory>();
            var keyVaultServiceMock   = new Mock <IAzureKeyVaultService>();
            var configuration         = (IConfiguration)_context.Properties["configuration"];
            var clientHandlerStub     = new DelegatingHandlerStub();
            var client        = new HttpClient(clientHandlerStub);
            var unitUnderTest = new HISCTokenService(appCache, httpClientFactoryMock.Object, keyVaultServiceMock.Object, configuration);

            httpClientFactoryMock.Setup(mock => mock.CreateClient(It.IsAny <string>()))
            .Returns(client).Verifiable();

            var clientId = "ClientId";

            keyVaultServiceMock.Setup(mock => mock.GetSecret("BarerTokenClientId"))
            .ReturnsAsync(() => clientId).Verifiable();

            var appKey = "ClientSecret";

            keyVaultServiceMock.Setup(mock => mock.GetSecret("BarerTokenClientSecret"))
            .ReturnsAsync(() => appKey).Verifiable();

            // ACT
            var _ = await unitUnderTest.RetrieveToken();
        }
        public async Task RetrieveToken_Success()
        {
            // ARRANGE
            var appCache = (IAppCache)_context.Properties["appCache"];
            var httpClientFactoryMock = new Mock <IHttpClientFactory>();
            var keyVaultServiceMock   = new Mock <IAzureKeyVaultService>();
            var configuration         = (IConfiguration)_context.Properties["configuration"];
            var expectedAccessToken   = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImllX3FXQ1hoWHh0MXpJRXN1NGM3YWNRVkduNCIsImtpZCI6ImllX3FXQ1hoWHh0MXpJRXN1NGM3YWNRVkduNCJ9.eyJhdWQiOiJodHRwczovL2hpc2Nwcm9ncmFtZGF0YWR2LmF6dXJld2Vic2l0ZXMubmV0IiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvNDNlNWRlYmEtMmM1NC00M2E0LTlhMTAtYzlmMTBiMWM2NmE1LyIsImlhdCI6MTU2Njk5NzUyNywibmJmIjoxNTY2OTk3NTI3LCJleHAiOjE1NjcwMDE0MjcsImFpbyI6IjQyRmdZR2grTGVPNmI2N09qMGx4VzdhL0NIa1NEUUE9IiwiYXBwaWQiOiJlNTBmMTE0Ny1lZGQxLTQ4NDItYmQzMS0wZjlmYTM1MjNhNjYiLCJhcHBpZGFjciI6IjEiLCJpZHAiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC80M2U1ZGViYS0yYzU0LTQzYTQtOWExMC1jOWYxMGIxYzY2YTUvIiwib2lkIjoiNzQxZWQ5OTUtM2UyOC00NWM3LWIyYzAtYzJiZTU5NGQwYjY0Iiwic3ViIjoiNzQxZWQ5OTUtM2UyOC00NWM3LWIyYzAtYzJiZTU5NGQwYjY0IiwidGlkIjoiNDNlNWRlYmEtMmM1NC00M2E0LTlhMTAtYzlmMTBiMWM2NmE1IiwidXRpIjoiZDF2dUNoWmp4MFNUalNZcjMyc0tBQSIsInZlciI6IjEuMCJ9.iERX4wBdjEouoNnCQFL4BrxCtRPID6P1WxQMGjxyRyYgF-ZX7vloB8Uw9j5bcLLO3u80C6W84vYct7IkHBrznzV2iRMe84yNTVbx9-87VvnJnilWiF0nHHWrBcnRqFJtckZM2qcUYbUMfDO_83fdoPaZAOUnc-h7qsu3MYXYxkBiNWpSQQbAgzIG4UM9eIYFYEnkBToGrOQz6NtB1JO00czfROYxFe2_dAGO8eQ5abRbHSwRLSxyzHQHXBfCKfw7S4CA6d0o-5Izo3HKxoYfxRUnBvDLdeIxs8LQDi5EFOv4rA0ioQOWskBNc6KiB5vyJjo0ZsBDjtc9Df_nEScbCw";
            var jsonTokenResponse     = "{\"token_type\":\"Bearer\",\"expires_in\":\"3599\",\"ext_expires_in\":\"3599\",\"expires_on\":\"1567001427\",\"not_before\":\"1566997527\",\"resource\":\"https://hiscprogramdatadv.azurewebsites.net\",\"access_token\":\"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImllX3FXQ1hoWHh0MXpJRXN1NGM3YWNRVkduNCIsImtpZCI6ImllX3FXQ1hoWHh0MXpJRXN1NGM3YWNRVkduNCJ9.eyJhdWQiOiJodHRwczovL2hpc2Nwcm9ncmFtZGF0YWR2LmF6dXJld2Vic2l0ZXMubmV0IiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvNDNlNWRlYmEtMmM1NC00M2E0LTlhMTAtYzlmMTBiMWM2NmE1LyIsImlhdCI6MTU2Njk5NzUyNywibmJmIjoxNTY2OTk3NTI3LCJleHAiOjE1NjcwMDE0MjcsImFpbyI6IjQyRmdZR2grTGVPNmI2N09qMGx4VzdhL0NIa1NEUUE9IiwiYXBwaWQiOiJlNTBmMTE0Ny1lZGQxLTQ4NDItYmQzMS0wZjlmYTM1MjNhNjYiLCJhcHBpZGFjciI6IjEiLCJpZHAiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC80M2U1ZGViYS0yYzU0LTQzYTQtOWExMC1jOWYxMGIxYzY2YTUvIiwib2lkIjoiNzQxZWQ5OTUtM2UyOC00NWM3LWIyYzAtYzJiZTU5NGQwYjY0Iiwic3ViIjoiNzQxZWQ5OTUtM2UyOC00NWM3LWIyYzAtYzJiZTU5NGQwYjY0IiwidGlkIjoiNDNlNWRlYmEtMmM1NC00M2E0LTlhMTAtYzlmMTBiMWM2NmE1IiwidXRpIjoiZDF2dUNoWmp4MFNUalNZcjMyc0tBQSIsInZlciI6IjEuMCJ9.iERX4wBdjEouoNnCQFL4BrxCtRPID6P1WxQMGjxyRyYgF-ZX7vloB8Uw9j5bcLLO3u80C6W84vYct7IkHBrznzV2iRMe84yNTVbx9-87VvnJnilWiF0nHHWrBcnRqFJtckZM2qcUYbUMfDO_83fdoPaZAOUnc-h7qsu3MYXYxkBiNWpSQQbAgzIG4UM9eIYFYEnkBToGrOQz6NtB1JO00czfROYxFe2_dAGO8eQ5abRbHSwRLSxyzHQHXBfCKfw7S4CA6d0o-5Izo3HKxoYfxRUnBvDLdeIxs8LQDi5EFOv4rA0ioQOWskBNc6KiB5vyJjo0ZsBDjtc9Df_nEScbCw\"}";

            var clientHandlerStub = new DelegatingHandlerStub((request, cancellationToken) =>
            {
                var response = new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = new StringContent(jsonTokenResponse, Encoding.UTF8)
                };
                return(Task.FromResult(response));
            }
                                                              );

            var client        = new HttpClient(clientHandlerStub);
            var unitUnderTest = new HISCTokenService(appCache, httpClientFactoryMock.Object, keyVaultServiceMock.Object, configuration);

            httpClientFactoryMock.Setup(mock => mock.CreateClient(It.IsAny <string>()))
            .Returns(client).Verifiable();

            var clientId = "ClientId";

            keyVaultServiceMock.Setup(mock => mock.GetSecret("BearerTokenClientId"))
            .ReturnsAsync(() => clientId).Verifiable();

            var appKey = "ClientSecret";

            keyVaultServiceMock.Setup(mock => mock.GetSecret("BearerTokenClientSecret"))
            .ReturnsAsync(() => appKey).Verifiable();

            // ACT
            var token = await unitUnderTest.RetrieveToken();

            client.Dispose();

            // ASSERT
            httpClientFactoryMock.Verify();
            Assert.AreEqual(expectedAccessToken, token);
        }
        public async Task RetrieveDataWithUnsuccessfulResponse()
        {
            // ARRANGE
            var appCache = (IAppCache)_context.Properties["appCache"];
            var httpClientFactoryMock = new Mock <IHttpClientFactory>();
            var keyVaultServiceMock   = new Mock <IAzureKeyVaultService>();
            var configuration         = (IConfiguration)_context.Properties["configuration"];
            var clientHandlerStub     = new DelegatingHandlerStub((request, cancellationToken) =>
            {
                var response = new HttpResponseMessage(HttpStatusCode.BadRequest)
                {
                    Content = new StringContent(_badResponseString, Encoding.UTF8)
                };

                return(Task.FromResult(response));
            });

            var client        = new HttpClient(clientHandlerStub);
            var unitUnderTest = new HISCTokenService(appCache, httpClientFactoryMock.Object, keyVaultServiceMock.Object, configuration);

            httpClientFactoryMock.Setup(mock => mock.CreateClient(It.IsAny <string>()))
            .Returns(client).Verifiable();

            var clientId = "ClientId";

            keyVaultServiceMock.Setup(mock => mock.GetSecret("BarerTokenClientId"))
            .ReturnsAsync(() => clientId).Verifiable();

            var appKey = "ClientSecret";

            keyVaultServiceMock.Setup(mock => mock.GetSecret("BarerTokenClientSecret"))
            .ReturnsAsync(() => appKey).Verifiable();

            // ACT
            var _ = await unitUnderTest.RetrieveToken();
        }