Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1283)

Side by Side Diff: test/credentials_test.dart

Issue 1320523003: Make a bunch of API changes. (Closed) Base URL: git@github.com:dart-lang/oauth2.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« lib/src/client.dart ('K') | « test/client_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'dart:async'; 5 import 'dart:async';
6 import 'dart:convert'; 6 import 'dart:convert';
7 7
8 import 'package:http/http.dart' as http; 8 import 'package:http/http.dart' as http;
9 import 'package:oauth2/oauth2.dart' as oauth2; 9 import 'package:oauth2/oauth2.dart' as oauth2;
10 import 'package:test/test.dart'; 10 import 'package:test/test.dart';
11 11
12 import 'utils.dart'; 12 import 'utils.dart';
13 13
14 final Uri tokenEndpoint = Uri.parse('http://example.com/token'); 14 final Uri tokenEndpoint = Uri.parse('http://example.com/token');
15 15
16 void main() { 16 void main() {
17 var httpClient; 17 var httpClient;
18 setUp(() => httpClient = new ExpectClient()); 18 setUp(() => httpClient = new ExpectClient());
19 19
20 test('is not expired if no expiration exists', () { 20 test('is not expired if no expiration exists', () {
21 var credentials = new oauth2.Credentials('access token'); 21 var credentials = new oauth2.Credentials('access token');
22 expect(credentials.isExpired, isFalse); 22 expect(credentials.isExpired, isFalse);
23 }); 23 });
24 24
25 test('is not expired if the expiration is in the future', () { 25 test('is not expired if the expiration is in the future', () {
26 var expiration = new DateTime.now().add(new Duration(hours: 1)); 26 var expiration = new DateTime.now().add(new Duration(hours: 1));
27 var credentials = new oauth2.Credentials( 27 var credentials = new oauth2.Credentials(
28 'access token', null, null, null, expiration); 28 'access token', expiration: expiration);
29 expect(credentials.isExpired, isFalse); 29 expect(credentials.isExpired, isFalse);
30 }); 30 });
31 31
32 test('is expired if the expiration is in the past', () { 32 test('is expired if the expiration is in the past', () {
33 var expiration = new DateTime.now().subtract(new Duration(hours: 1)); 33 var expiration = new DateTime.now().subtract(new Duration(hours: 1));
34 var credentials = new oauth2.Credentials( 34 var credentials = new oauth2.Credentials(
35 'access token', null, null, null, expiration); 35 'access token', expiration: expiration);
36 expect(credentials.isExpired, isTrue); 36 expect(credentials.isExpired, isTrue);
37 }); 37 });
38 38
39 test("can't refresh without a refresh token", () { 39 test("can't refresh without a refresh token", () {
40 var credentials = new oauth2.Credentials( 40 var credentials = new oauth2.Credentials(
41 'access token', null, tokenEndpoint); 41 'access token', tokenEndpoint: tokenEndpoint);
42 expect(credentials.canRefresh, false); 42 expect(credentials.canRefresh, false);
43 43
44 expect(credentials.refresh('identifier', 'secret', httpClient: httpClient), 44 expect(credentials.refresh(
45 identifier: 'identifier',
46 secret: 'secret',
47 httpClient: httpClient),
45 throwsStateError); 48 throwsStateError);
46 }); 49 });
47 50
48 test("can't refresh without a token endpoint", () { 51 test("can't refresh without a token endpoint", () {
49 var credentials = new oauth2.Credentials('access token', 'refresh token'); 52 var credentials = new oauth2.Credentials(
53 'access token', refreshToken: 'refresh token');
50 expect(credentials.canRefresh, false); 54 expect(credentials.canRefresh, false);
51 55
52 expect(credentials.refresh('identifier', 'secret', httpClient: httpClient), 56 expect(credentials.refresh(
57 identifier: 'identifier',
58 secret: 'secret',
59 httpClient: httpClient),
53 throwsStateError); 60 throwsStateError);
54 }); 61 });
55 62
56 test("can refresh with a refresh token and a token endpoint", () async { 63 test("can refresh with a refresh token and a token endpoint", () async {
57 var credentials = new oauth2.Credentials( 64 var credentials = new oauth2.Credentials(
58 'access token', 'refresh token', tokenEndpoint, ['scope1', 'scope2']); 65 'access token',
66 refreshToken: 'refresh token',
67 tokenEndpoint: tokenEndpoint,
68 scopes: ['scope1', 'scope2']);
59 expect(credentials.canRefresh, true); 69 expect(credentials.canRefresh, true);
60 70
61 httpClient.expectRequest((request) { 71 httpClient.expectRequest((request) {
72 expect(request.method, equals('POST'));
73 expect(request.url.toString(), equals(tokenEndpoint.toString()));
74 expect(request.bodyFields, equals({
75 "grant_type": "refresh_token",
76 "refresh_token": "refresh token",
77 "scope": "scope1 scope2"
78 }));
79 expect(request.headers, containsPair(
80 "Authorization",
81 "Basic aWQlQzMlQUJudCVDNCVBQmZpZXI6cyVDMyVBQmNyZXQ="));
82
83 return new Future.value(new http.Response(JSON.encode({
84 'access_token': 'new access token',
85 'token_type': 'bearer',
86 'refresh_token': 'new refresh token'
87 }), 200, headers: {'content-type': 'application/json'}));
88 });
89
90 credentials = await credentials.refresh(
91 identifier: 'idëntīfier',
92 secret: 'sëcret',
93 httpClient: httpClient);
94 expect(credentials.accessToken, equals('new access token'));
95 expect(credentials.refreshToken, equals('new refresh token'));
96 });
97
98 test("can refresh without a client secret", () async {
99 var credentials = new oauth2.Credentials(
100 'access token',
101 refreshToken: 'refresh token',
102 tokenEndpoint: tokenEndpoint,
103 scopes: ['scope1', 'scope2']);
104 expect(credentials.canRefresh, true);
105
106 httpClient.expectRequest((request) {
62 expect(request.method, equals('POST')); 107 expect(request.method, equals('POST'));
63 expect(request.url.toString(), equals(tokenEndpoint.toString())); 108 expect(request.url.toString(), equals(tokenEndpoint.toString()));
64 expect(request.bodyFields, equals({ 109 expect(request.bodyFields, equals({
65 "grant_type": "refresh_token", 110 "grant_type": "refresh_token",
66 "refresh_token": "refresh token", 111 "refresh_token": "refresh token",
67 "scope": "scope1 scope2", 112 "scope": "scope1 scope2",
68 "client_id": "identifier", 113 "client_id": "identifier"
69 "client_secret": "secret"
70 })); 114 }));
71 115
72 return new Future.value(new http.Response(JSON.encode({ 116 return new Future.value(new http.Response(JSON.encode({
73 'access_token': 'new access token', 117 'access_token': 'new access token',
74 'token_type': 'bearer', 118 'token_type': 'bearer',
75 'refresh_token': 'new refresh token' 119 'refresh_token': 'new refresh token'
76 }), 200, headers: {'content-type': 'application/json'})); 120 }), 200, headers: {'content-type': 'application/json'}));
77 }); 121 });
78 122
79 123
80 credentials = await credentials.refresh('identifier', 'secret', 124 credentials = await credentials.refresh(
125 identifier: 'identifier',
81 httpClient: httpClient); 126 httpClient: httpClient);
82 expect(credentials.accessToken, equals('new access token')); 127 expect(credentials.accessToken, equals('new access token'));
83 expect(credentials.refreshToken, equals('new refresh token')); 128 expect(credentials.refreshToken, equals('new refresh token'));
84 }); 129 });
85 130
86 test("uses the old refresh token if a new one isn't provided", () async { 131 test("can refresh without client authentication", () async {
87 var credentials = new oauth2.Credentials( 132 var credentials = new oauth2.Credentials(
88 'access token', 'refresh token', tokenEndpoint); 133 'access token',
134 refreshToken: 'refresh token',
135 tokenEndpoint: tokenEndpoint,
136 scopes: ['scope1', 'scope2']);
89 expect(credentials.canRefresh, true); 137 expect(credentials.canRefresh, true);
90 138
91 httpClient.expectRequest((request) { 139 httpClient.expectRequest((request) {
92 expect(request.method, equals('POST')); 140 expect(request.method, equals('POST'));
93 expect(request.url.toString(), equals(tokenEndpoint.toString())); 141 expect(request.url.toString(), equals(tokenEndpoint.toString()));
94 expect(request.bodyFields, equals({ 142 expect(request.bodyFields, equals({
95 "grant_type": "refresh_token", 143 "grant_type": "refresh_token",
96 "refresh_token": "refresh token", 144 "refresh_token": "refresh token",
97 "client_id": "identifier", 145 "scope": "scope1 scope2"
98 "client_secret": "secret"
99 })); 146 }));
100 147
101 return new Future.value(new http.Response(JSON.encode({ 148 return new Future.value(new http.Response(JSON.encode({
102 'access_token': 'new access token', 149 'access_token': 'new access token',
150 'token_type': 'bearer',
151 'refresh_token': 'new refresh token'
152 }), 200, headers: {'content-type': 'application/json'}));
153 });
154
155
156 credentials = await credentials.refresh(httpClient: httpClient);
157 expect(credentials.accessToken, equals('new access token'));
158 expect(credentials.refreshToken, equals('new refresh token'));
159 });
160
161 test("uses the old refresh token if a new one isn't provided", () async {
162 var credentials = new oauth2.Credentials(
163 'access token',
164 refreshToken: 'refresh token',
165 tokenEndpoint: tokenEndpoint);
166 expect(credentials.canRefresh, true);
167
168 httpClient.expectRequest((request) {
169 expect(request.method, equals('POST'));
170 expect(request.url.toString(), equals(tokenEndpoint.toString()));
171 expect(request.bodyFields, equals({
172 "grant_type": "refresh_token",
173 "refresh_token": "refresh token"
174 }));
175 expect(request.headers, containsPair(
176 "Authorization",
177 "Basic aWQlQzMlQUJudCVDNCVBQmZpZXI6cyVDMyVBQmNyZXQ="));
178
179 return new Future.value(new http.Response(JSON.encode({
180 'access_token': 'new access token',
103 'token_type': 'bearer' 181 'token_type': 'bearer'
104 }), 200, headers: {'content-type': 'application/json'})); 182 }), 200, headers: {'content-type': 'application/json'}));
105 }); 183 });
106 184
107 185
108 credentials = await credentials.refresh('identifier', 'secret', 186 credentials = await credentials.refresh(
187 identifier: 'idëntīfier',
188 secret: 'sëcret',
109 httpClient: httpClient); 189 httpClient: httpClient);
110 expect(credentials.accessToken, equals('new access token')); 190 expect(credentials.accessToken, equals('new access token'));
111 expect(credentials.refreshToken, equals('refresh token')); 191 expect(credentials.refreshToken, equals('refresh token'));
112 }); 192 });
113 193
194 test("uses form-field authentication if basicAuth is false", () async {
195 var credentials = new oauth2.Credentials(
196 'access token',
197 refreshToken: 'refresh token',
198 tokenEndpoint: tokenEndpoint,
199 scopes: ['scope1', 'scope2']);
200 expect(credentials.canRefresh, true);
201
202 httpClient.expectRequest((request) {
203 expect(request.method, equals('POST'));
204 expect(request.url.toString(), equals(tokenEndpoint.toString()));
205 expect(request.bodyFields, equals({
206 "grant_type": "refresh_token",
207 "refresh_token": "refresh token",
208 "scope": "scope1 scope2",
209 "client_id": "idëntīfier",
210 "client_secret": "sëcret"
211 }));
212
213 return new Future.value(new http.Response(JSON.encode({
214 'access_token': 'new access token',
215 'token_type': 'bearer',
216 'refresh_token': 'new refresh token'
217 }), 200, headers: {'content-type': 'application/json'}));
218 });
219
220 credentials = await credentials.refresh(
221 identifier: 'idëntīfier',
222 secret: 'sëcret',
223 basicAuth: false,
224 httpClient: httpClient);
225 expect(credentials.accessToken, equals('new access token'));
226 expect(credentials.refreshToken, equals('new refresh token'));
227 });
228
114 group("fromJson", () { 229 group("fromJson", () {
115 oauth2.Credentials fromMap(Map map) => 230 oauth2.Credentials fromMap(Map map) =>
116 new oauth2.Credentials.fromJson(JSON.encode(map)); 231 new oauth2.Credentials.fromJson(JSON.encode(map));
117 232
118 test("should load the same credentials from toJson", () { 233 test("should load the same credentials from toJson", () {
119 var expiration = new DateTime.now().subtract(new Duration(hours: 1)); 234 var expiration = new DateTime.now().subtract(new Duration(hours: 1));
120 var credentials = new oauth2.Credentials( 235 var credentials = new oauth2.Credentials(
121 'access token', 'refresh token', tokenEndpoint, ['scope1', 'scope2'], 236 'access token',
122 expiration); 237 refreshToken: 'refresh token',
238 tokenEndpoint: tokenEndpoint,
239 scopes: ['scope1', 'scope2'],
240 expiration: expiration);
123 var reloaded = new oauth2.Credentials.fromJson(credentials.toJson()); 241 var reloaded = new oauth2.Credentials.fromJson(credentials.toJson());
124 242
125 expect(reloaded.accessToken, equals(credentials.accessToken)); 243 expect(reloaded.accessToken, equals(credentials.accessToken));
126 expect(reloaded.refreshToken, equals(credentials.refreshToken)); 244 expect(reloaded.refreshToken, equals(credentials.refreshToken));
127 expect(reloaded.tokenEndpoint.toString(), 245 expect(reloaded.tokenEndpoint.toString(),
128 equals(credentials.tokenEndpoint.toString())); 246 equals(credentials.tokenEndpoint.toString()));
129 expect(reloaded.scopes, equals(credentials.scopes)); 247 expect(reloaded.scopes, equals(credentials.scopes));
130 expect(reloaded.expiration, equals(credentials.expiration)); 248 expect(reloaded.expiration, equals(credentials.expiration));
131 }); 249 });
132 250
(...skipping 29 matching lines...) Expand all
162 expect(() => fromMap({"accessToken": "foo", "scopes": 12}), 280 expect(() => fromMap({"accessToken": "foo", "scopes": 12}),
163 throwsFormatException); 281 throwsFormatException);
164 }); 282 });
165 283
166 test("should throw a FormatException if expiration is not an int", () { 284 test("should throw a FormatException if expiration is not an int", () {
167 expect(() => fromMap({"accessToken": "foo", "expiration": "12"}), 285 expect(() => fromMap({"accessToken": "foo", "expiration": "12"}),
168 throwsFormatException); 286 throwsFormatException);
169 }); 287 });
170 }); 288 });
171 } 289 }
OLDNEW
« lib/src/client.dart ('K') | « test/client_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698