public async Task allow_refresh_an_accessToken_from_refresh_token()
        {
            var server = new TestServerBuilder()
                         .WithSuccessAuthentication()
                         .WithInMemoryStore()
                         .Build();

            var client = server.CreateClient();

            var response = await client.PostAsync("/token", GrantTypes.APasswordGrantType());

            response.EnsureSuccessStatusCode();
            var tokenResponse = await ReadRequestResponseToJwtTokenResponse(response);

            response = await client.PostAsync("/token", GrantTypes.ARefreshTokenGranType(tokenResponse.RefreshToken));

            response.EnsureSuccessStatusCode();
            var refreshTokenResponse = await ReadRequestResponseToJwtTokenResponse(response);

            refreshTokenResponse.AccessToken.Should().NotBeEmpty();
            refreshTokenResponse.RefreshToken.Should().NotBeEmpty();

            refreshTokenResponse.AccessToken.Should().NotBe(tokenResponse.AccessToken);
            refreshTokenResponse.RefreshToken.Should().NotBe(tokenResponse.RefreshToken);
        }
        public async Task return_a_valid_jwt_token_when_grant_type_password()
        {
            var server = new TestServerBuilder()
                         .WithSuccessAuthentication()
                         .Build();

            var response = await server.CreateClient().PostAsync("/token", GrantTypes.APasswordGrantType());

            response.EnsureSuccessStatusCode();
            var content = await response.Content.ReadAsStringAsync();

            var jwtTokenResponse = JsonConvert.DeserializeObject <JwtTokenResponse>(content);

            jwtTokenResponse.Should().NotBeNull();
            jwtTokenResponse.AccessToken.Should().NotBeNull();
            jwtTokenResponse.ExpiresIn.Should().BeGreaterThan(0);
        }
        public async Task allow_invoking_authorized_controller_with_a_token()
        {
            var server = new TestServerBuilder()
                         .WithSuccessAuthentication()
                         .Build();

            var client = server.CreateClient();

            var response = await client.PostAsync("/token", GrantTypes.APasswordGrantType());

            response.EnsureSuccessStatusCode();
            var content = await response.Content.ReadAsStringAsync();

            var jwtTokenResponse = JsonConvert.DeserializeObject <JwtTokenResponse>(content);

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", jwtTokenResponse.AccessToken);
            response = await client.GetAsync("/api/test");

            response.EnsureSuccessStatusCode();
        }