public async Task SelectTheFirstAvailableProviderTestAsync()
        {
            var providers = new List <ITokenProvider>
            {
                new MockProvider {
                    Available = false
                },
                new MockProvider {
                    Available = false
                },
                new MockProvider {
                    Available = true,
                    Token     = new MockToken {
                        AccessToken = "foo", ExpiresOn = DateTime.UtcNow.AddSeconds(60)
                    }
                },
                new MockProvider
                {
                    Available = true,
                    Token     = new MockToken {
                        AccessToken = "bar", ExpiresOn = DateTime.UtcNow.AddSeconds(60)
                    }
                }
            };
            var chain = new TokenProviderChain(providers);

            var token = await chain.GetTokenAsync(new List <string> {
                "something"
            }).ConfigureAwait(false);

            Assert.AreEqual("foo", token.AccessToken);
        }
        public async Task NoAvailableProbesTestAsync()
        {
            var providers = new List <ITokenProvider>
            {
                new MockProvider {
                    Available = false, Token = new MockToken {
                    }
                },
            };
            var chain = new TokenProviderChain(providers);

            await Assert.ThrowsExceptionAsync <NoProvidersAvailableException>(async() => await chain.GetTokenAsync(new List <string> {
                "something"
            })
                                                                              .ConfigureAwait(false)).ConfigureAwait(false);
        }