public async Task InvalidTokenReported(string rootUrl, string username, string password, string relativeUrl)
        {
            var tokenProvider = new TokenProvider(rootUrl, username, password);
            var gateway       = new PortalGateway(rootUrl, tokenProvider: tokenProvider);
            var endpoint      = new ArcGISServerEndpoint(relativeUrl);

            var token = await IntegrationTestFixture.TestPolicy.Execute(() =>
            {
                return(tokenProvider.CheckGenerateToken(CancellationToken.None));
            });

            Assert.NotNull(token);
            Assert.NotNull(token.Value);
            Assert.False(token.IsExpired);
            Assert.Null(token.Error);

            token.Value += "chuff";
            var query = new Query(endpoint)
            {
                Token = token.Value
            };

            var exception = await Assert.ThrowsAsync <InvalidOperationException>(() => gateway.Query <Point>(query));

            Assert.NotNull(exception);
            Assert.Contains("invalid token", exception.Message.ToLowerInvariant());
        }
        public async Task CanGenerateToken(string rootUrl, string username, string password)
        {
            var tokenProvider = new TokenProvider(rootUrl, username, password);
            var token         = await IntegrationTestFixture.TestPolicy.Execute(() =>
            {
                return(tokenProvider.CheckGenerateToken(CancellationToken.None));
            });

            Assert.NotNull(token);
            Assert.NotNull(token.Value);
            Assert.False(token.IsExpired);
            Assert.Null(token.Error);
        }
        public async Task CanUseServerInfoToGenerateToken(string rootUrl, string username, string password)
        {
            var gateway    = new PortalGateway(rootUrl);
            var serverInfo = await IntegrationTestFixture.TestPolicy.Execute(() =>
            {
                return(gateway.Info());
            });

            var tokenProvider = new TokenProvider(serverInfo.AuthenticationInfo.TokenServicesUrl, username, password);
            var token         = await IntegrationTestFixture.TestPolicy.Execute(() =>
            {
                return(tokenProvider.CheckGenerateToken(CancellationToken.None));
            });

            Assert.NotNull(token);
            Assert.NotNull(token.Value);
            Assert.False(token.IsExpired);
            Assert.Null(token.Error);
        }