| Index: test/credentials_test.dart
|
| diff --git a/test/credentials_test.dart b/test/credentials_test.dart
|
| index d72614f01ab00a1b6cf9fd35f0e879091da1ab33..f4d8886e863bdcbf3a751e4ee97b2eeff33cd537 100644
|
| --- a/test/credentials_test.dart
|
| +++ b/test/credentials_test.dart
|
| @@ -25,37 +25,82 @@ void main() {
|
| test('is not expired if the expiration is in the future', () {
|
| var expiration = new DateTime.now().add(new Duration(hours: 1));
|
| var credentials = new oauth2.Credentials(
|
| - 'access token', null, null, null, expiration);
|
| + 'access token', expiration: expiration);
|
| expect(credentials.isExpired, isFalse);
|
| });
|
|
|
| test('is expired if the expiration is in the past', () {
|
| var expiration = new DateTime.now().subtract(new Duration(hours: 1));
|
| var credentials = new oauth2.Credentials(
|
| - 'access token', null, null, null, expiration);
|
| + 'access token', expiration: expiration);
|
| expect(credentials.isExpired, isTrue);
|
| });
|
|
|
| test("can't refresh without a refresh token", () {
|
| var credentials = new oauth2.Credentials(
|
| - 'access token', null, tokenEndpoint);
|
| + 'access token', tokenEndpoint: tokenEndpoint);
|
| expect(credentials.canRefresh, false);
|
|
|
| - expect(credentials.refresh('identifier', 'secret', httpClient: httpClient),
|
| + expect(credentials.refresh(
|
| + identifier: 'identifier',
|
| + secret: 'secret',
|
| + httpClient: httpClient),
|
| throwsStateError);
|
| });
|
|
|
| test("can't refresh without a token endpoint", () {
|
| - var credentials = new oauth2.Credentials('access token', 'refresh token');
|
| + var credentials = new oauth2.Credentials(
|
| + 'access token', refreshToken: 'refresh token');
|
| expect(credentials.canRefresh, false);
|
|
|
| - expect(credentials.refresh('identifier', 'secret', httpClient: httpClient),
|
| + expect(credentials.refresh(
|
| + identifier: 'identifier',
|
| + secret: 'secret',
|
| + httpClient: httpClient),
|
| throwsStateError);
|
| });
|
|
|
| test("can refresh with a refresh token and a token endpoint", () async {
|
| var credentials = new oauth2.Credentials(
|
| - 'access token', 'refresh token', tokenEndpoint, ['scope1', 'scope2']);
|
| + 'access token',
|
| + refreshToken: 'refresh token',
|
| + tokenEndpoint: tokenEndpoint,
|
| + scopes: ['scope1', 'scope2']);
|
| + expect(credentials.canRefresh, true);
|
| +
|
| + httpClient.expectRequest((request) {
|
| + expect(request.method, equals('POST'));
|
| + expect(request.url.toString(), equals(tokenEndpoint.toString()));
|
| + expect(request.bodyFields, equals({
|
| + "grant_type": "refresh_token",
|
| + "refresh_token": "refresh token",
|
| + "scope": "scope1 scope2"
|
| + }));
|
| + expect(request.headers, containsPair(
|
| + "Authorization",
|
| + "Basic aWQlQzMlQUJudCVDNCVBQmZpZXI6cyVDMyVBQmNyZXQ="));
|
| +
|
| + return new Future.value(new http.Response(JSON.encode({
|
| + 'access_token': 'new access token',
|
| + 'token_type': 'bearer',
|
| + 'refresh_token': 'new refresh token'
|
| + }), 200, headers: {'content-type': 'application/json'}));
|
| + });
|
| +
|
| + credentials = await credentials.refresh(
|
| + identifier: 'idëntīfier',
|
| + secret: 'sëcret',
|
| + httpClient: httpClient);
|
| + expect(credentials.accessToken, equals('new access token'));
|
| + expect(credentials.refreshToken, equals('new refresh token'));
|
| + });
|
| +
|
| + test("can refresh without a client secret", () async {
|
| + var credentials = new oauth2.Credentials(
|
| + 'access token',
|
| + refreshToken: 'refresh token',
|
| + tokenEndpoint: tokenEndpoint,
|
| + scopes: ['scope1', 'scope2']);
|
| expect(credentials.canRefresh, true);
|
|
|
| httpClient.expectRequest((request) {
|
| @@ -65,8 +110,7 @@ void main() {
|
| "grant_type": "refresh_token",
|
| "refresh_token": "refresh token",
|
| "scope": "scope1 scope2",
|
| - "client_id": "identifier",
|
| - "client_secret": "secret"
|
| + "client_id": "identifier"
|
| }));
|
|
|
| return new Future.value(new http.Response(JSON.encode({
|
| @@ -77,15 +121,19 @@ void main() {
|
| });
|
|
|
|
|
| - credentials = await credentials.refresh('identifier', 'secret',
|
| + credentials = await credentials.refresh(
|
| + identifier: 'identifier',
|
| httpClient: httpClient);
|
| expect(credentials.accessToken, equals('new access token'));
|
| expect(credentials.refreshToken, equals('new refresh token'));
|
| });
|
|
|
| - test("uses the old refresh token if a new one isn't provided", () async {
|
| + test("can refresh without client authentication", () async {
|
| var credentials = new oauth2.Credentials(
|
| - 'access token', 'refresh token', tokenEndpoint);
|
| + 'access token',
|
| + refreshToken: 'refresh token',
|
| + tokenEndpoint: tokenEndpoint,
|
| + scopes: ['scope1', 'scope2']);
|
| expect(credentials.canRefresh, true);
|
|
|
| httpClient.expectRequest((request) {
|
| @@ -94,9 +142,39 @@ void main() {
|
| expect(request.bodyFields, equals({
|
| "grant_type": "refresh_token",
|
| "refresh_token": "refresh token",
|
| - "client_id": "identifier",
|
| - "client_secret": "secret"
|
| + "scope": "scope1 scope2"
|
| + }));
|
| +
|
| + return new Future.value(new http.Response(JSON.encode({
|
| + 'access_token': 'new access token',
|
| + 'token_type': 'bearer',
|
| + 'refresh_token': 'new refresh token'
|
| + }), 200, headers: {'content-type': 'application/json'}));
|
| + });
|
| +
|
| +
|
| + credentials = await credentials.refresh(httpClient: httpClient);
|
| + expect(credentials.accessToken, equals('new access token'));
|
| + expect(credentials.refreshToken, equals('new refresh token'));
|
| + });
|
| +
|
| + test("uses the old refresh token if a new one isn't provided", () async {
|
| + var credentials = new oauth2.Credentials(
|
| + 'access token',
|
| + refreshToken: 'refresh token',
|
| + tokenEndpoint: tokenEndpoint);
|
| + expect(credentials.canRefresh, true);
|
| +
|
| + httpClient.expectRequest((request) {
|
| + expect(request.method, equals('POST'));
|
| + expect(request.url.toString(), equals(tokenEndpoint.toString()));
|
| + expect(request.bodyFields, equals({
|
| + "grant_type": "refresh_token",
|
| + "refresh_token": "refresh token"
|
| }));
|
| + expect(request.headers, containsPair(
|
| + "Authorization",
|
| + "Basic aWQlQzMlQUJudCVDNCVBQmZpZXI6cyVDMyVBQmNyZXQ="));
|
|
|
| return new Future.value(new http.Response(JSON.encode({
|
| 'access_token': 'new access token',
|
| @@ -105,12 +183,49 @@ void main() {
|
| });
|
|
|
|
|
| - credentials = await credentials.refresh('identifier', 'secret',
|
| + credentials = await credentials.refresh(
|
| + identifier: 'idëntīfier',
|
| + secret: 'sëcret',
|
| httpClient: httpClient);
|
| expect(credentials.accessToken, equals('new access token'));
|
| expect(credentials.refreshToken, equals('refresh token'));
|
| });
|
|
|
| + test("uses form-field authentication if basicAuth is false", () async {
|
| + var credentials = new oauth2.Credentials(
|
| + 'access token',
|
| + refreshToken: 'refresh token',
|
| + tokenEndpoint: tokenEndpoint,
|
| + scopes: ['scope1', 'scope2']);
|
| + expect(credentials.canRefresh, true);
|
| +
|
| + httpClient.expectRequest((request) {
|
| + expect(request.method, equals('POST'));
|
| + expect(request.url.toString(), equals(tokenEndpoint.toString()));
|
| + expect(request.bodyFields, equals({
|
| + "grant_type": "refresh_token",
|
| + "refresh_token": "refresh token",
|
| + "scope": "scope1 scope2",
|
| + "client_id": "idëntīfier",
|
| + "client_secret": "sëcret"
|
| + }));
|
| +
|
| + return new Future.value(new http.Response(JSON.encode({
|
| + 'access_token': 'new access token',
|
| + 'token_type': 'bearer',
|
| + 'refresh_token': 'new refresh token'
|
| + }), 200, headers: {'content-type': 'application/json'}));
|
| + });
|
| +
|
| + credentials = await credentials.refresh(
|
| + identifier: 'idëntīfier',
|
| + secret: 'sëcret',
|
| + basicAuth: false,
|
| + httpClient: httpClient);
|
| + expect(credentials.accessToken, equals('new access token'));
|
| + expect(credentials.refreshToken, equals('new refresh token'));
|
| + });
|
| +
|
| group("fromJson", () {
|
| oauth2.Credentials fromMap(Map map) =>
|
| new oauth2.Credentials.fromJson(JSON.encode(map));
|
| @@ -118,8 +233,11 @@ void main() {
|
| test("should load the same credentials from toJson", () {
|
| var expiration = new DateTime.now().subtract(new Duration(hours: 1));
|
| var credentials = new oauth2.Credentials(
|
| - 'access token', 'refresh token', tokenEndpoint, ['scope1', 'scope2'],
|
| - expiration);
|
| + 'access token',
|
| + refreshToken: 'refresh token',
|
| + tokenEndpoint: tokenEndpoint,
|
| + scopes: ['scope1', 'scope2'],
|
| + expiration: expiration);
|
| var reloaded = new oauth2.Credentials.fromJson(credentials.toJson());
|
|
|
| expect(reloaded.accessToken, equals(credentials.accessToken));
|
|
|