OLD | NEW |
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 library client_test; | 5 library client_test; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:io'; | 8 import 'dart:io'; |
9 import 'dart:json' as JSON; | 9 import 'dart:json' as JSON; |
10 import 'dart:uri'; | 10 import 'dart:uri'; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 "request", () { | 50 "request", () { |
51 var expiration = new DateTime.now().subtract(new Duration(hours: 1)); | 51 var expiration = new DateTime.now().subtract(new Duration(hours: 1)); |
52 var credentials = new oauth2.Credentials( | 52 var credentials = new oauth2.Credentials( |
53 'access token', 'refresh token', tokenEndpoint, [], expiration); | 53 'access token', 'refresh token', tokenEndpoint, [], expiration); |
54 var client = new oauth2.Client('identifier', 'secret', credentials, | 54 var client = new oauth2.Client('identifier', 'secret', credentials, |
55 httpClient: httpClient); | 55 httpClient: httpClient); |
56 | 56 |
57 httpClient.expectRequest((request) { | 57 httpClient.expectRequest((request) { |
58 expect(request.method, equals('POST')); | 58 expect(request.method, equals('POST')); |
59 expect(request.url.toString(), equals(tokenEndpoint.toString())); | 59 expect(request.url.toString(), equals(tokenEndpoint.toString())); |
60 return new Future.immediate(new http.Response(JSON.stringify({ | 60 return new Future.value(new http.Response(JSON.stringify({ |
61 'access_token': 'new access token', | 61 'access_token': 'new access token', |
62 'token_type': 'bearer' | 62 'token_type': 'bearer' |
63 }), 200, headers: {'content-type': 'application/json'})); | 63 }), 200, headers: {'content-type': 'application/json'})); |
64 }); | 64 }); |
65 | 65 |
66 httpClient.expectRequest((request) { | 66 httpClient.expectRequest((request) { |
67 expect(request.method, equals('GET')); | 67 expect(request.method, equals('GET')); |
68 expect(request.url.toString(), equals(requestUri.toString())); | 68 expect(request.url.toString(), equals(requestUri.toString())); |
69 expect(request.headers['authorization'], | 69 expect(request.headers['authorization'], |
70 equals('Bearer new access token')); | 70 equals('Bearer new access token')); |
71 | 71 |
72 return new Future.immediate(new http.Response('good job', 200)); | 72 return new Future.value(new http.Response('good job', 200)); |
73 }); | 73 }); |
74 | 74 |
75 expect(client.read(requestUri).then((_) { | 75 expect(client.read(requestUri).then((_) { |
76 expect(client.credentials.accessToken, equals('new access token')); | 76 expect(client.credentials.accessToken, equals('new access token')); |
77 }), completes); | 77 }), completes); |
78 }); | 78 }); |
79 }); | 79 }); |
80 | 80 |
81 group('with valid credentials', () { | 81 group('with valid credentials', () { |
82 setUp(createHttpClient); | 82 setUp(createHttpClient); |
83 | 83 |
84 test("sends a request with bearer authorization", () { | 84 test("sends a request with bearer authorization", () { |
85 var credentials = new oauth2.Credentials('access token'); | 85 var credentials = new oauth2.Credentials('access token'); |
86 var client = new oauth2.Client('identifier', 'secret', credentials, | 86 var client = new oauth2.Client('identifier', 'secret', credentials, |
87 httpClient: httpClient); | 87 httpClient: httpClient); |
88 | 88 |
89 httpClient.expectRequest((request) { | 89 httpClient.expectRequest((request) { |
90 expect(request.method, equals('GET')); | 90 expect(request.method, equals('GET')); |
91 expect(request.url.toString(), equals(requestUri.toString())); | 91 expect(request.url.toString(), equals(requestUri.toString())); |
92 expect(request.headers['authorization'], | 92 expect(request.headers['authorization'], |
93 equals('Bearer access token')); | 93 equals('Bearer access token')); |
94 | 94 |
95 return new Future.immediate(new http.Response('good job', 200)); | 95 return new Future.value(new http.Response('good job', 200)); |
96 }); | 96 }); |
97 | 97 |
98 expect(client.read(requestUri), completion(equals('good job'))); | 98 expect(client.read(requestUri), completion(equals('good job'))); |
99 }); | 99 }); |
100 | 100 |
101 test("can manually refresh the credentials", () { | 101 test("can manually refresh the credentials", () { |
102 var credentials = new oauth2.Credentials( | 102 var credentials = new oauth2.Credentials( |
103 'access token', 'refresh token', tokenEndpoint); | 103 'access token', 'refresh token', tokenEndpoint); |
104 var client = new oauth2.Client('identifier', 'secret', credentials, | 104 var client = new oauth2.Client('identifier', 'secret', credentials, |
105 httpClient: httpClient); | 105 httpClient: httpClient); |
106 | 106 |
107 httpClient.expectRequest((request) { | 107 httpClient.expectRequest((request) { |
108 expect(request.method, equals('POST')); | 108 expect(request.method, equals('POST')); |
109 expect(request.url.toString(), equals(tokenEndpoint.toString())); | 109 expect(request.url.toString(), equals(tokenEndpoint.toString())); |
110 return new Future.immediate(new http.Response(JSON.stringify({ | 110 return new Future.value(new http.Response(JSON.stringify({ |
111 'access_token': 'new access token', | 111 'access_token': 'new access token', |
112 'token_type': 'bearer' | 112 'token_type': 'bearer' |
113 }), 200, headers: {'content-type': 'application/json'})); | 113 }), 200, headers: {'content-type': 'application/json'})); |
114 }); | 114 }); |
115 | 115 |
116 expect(client.refreshCredentials().then((_) { | 116 expect(client.refreshCredentials().then((_) { |
117 expect(client.credentials.accessToken, equals('new access token')); | 117 expect(client.credentials.accessToken, equals('new access token')); |
118 }), completes); | 118 }), completes); |
119 }); | 119 }); |
120 | 120 |
(...skipping 16 matching lines...) Expand all Loading... |
137 httpClient: httpClient); | 137 httpClient: httpClient); |
138 | 138 |
139 httpClient.expectRequest((request) { | 139 httpClient.expectRequest((request) { |
140 expect(request.method, equals('GET')); | 140 expect(request.method, equals('GET')); |
141 expect(request.url.toString(), equals(requestUri.toString())); | 141 expect(request.url.toString(), equals(requestUri.toString())); |
142 expect(request.headers['authorization'], | 142 expect(request.headers['authorization'], |
143 equals('Bearer access token')); | 143 equals('Bearer access token')); |
144 | 144 |
145 var authenticate = 'Bearer error="invalid_token", error_description=' | 145 var authenticate = 'Bearer error="invalid_token", error_description=' |
146 '"Something is terribly wrong."'; | 146 '"Something is terribly wrong."'; |
147 return new Future.immediate(new http.Response('bad job', 401, | 147 return new Future.value(new http.Response('bad job', 401, |
148 headers: {'www-authenticate': authenticate})); | 148 headers: {'www-authenticate': authenticate})); |
149 }); | 149 }); |
150 | 150 |
151 expectFutureThrows(client.read(requestUri), | 151 expectFutureThrows(client.read(requestUri), |
152 (e) => e is oauth2.AuthorizationException); | 152 (e) => e is oauth2.AuthorizationException); |
153 }); | 153 }); |
154 | 154 |
155 test('passes through a 401 response without www-authenticate', () { | 155 test('passes through a 401 response without www-authenticate', () { |
156 var credentials = new oauth2.Credentials('access token'); | 156 var credentials = new oauth2.Credentials('access token'); |
157 var client = new oauth2.Client('identifier', 'secret', credentials, | 157 var client = new oauth2.Client('identifier', 'secret', credentials, |
158 httpClient: httpClient); | 158 httpClient: httpClient); |
159 | 159 |
160 httpClient.expectRequest((request) { | 160 httpClient.expectRequest((request) { |
161 expect(request.method, equals('GET')); | 161 expect(request.method, equals('GET')); |
162 expect(request.url.toString(), equals(requestUri.toString())); | 162 expect(request.url.toString(), equals(requestUri.toString())); |
163 expect(request.headers['authorization'], | 163 expect(request.headers['authorization'], |
164 equals('Bearer access token')); | 164 equals('Bearer access token')); |
165 | 165 |
166 return new Future.immediate(new http.Response('bad job', 401)); | 166 return new Future.value(new http.Response('bad job', 401)); |
167 }); | 167 }); |
168 | 168 |
169 expect( | 169 expect( |
170 client.get(requestUri).then((response) => response.statusCode), | 170 client.get(requestUri).then((response) => response.statusCode), |
171 completion(equals(401))); | 171 completion(equals(401))); |
172 }); | 172 }); |
173 | 173 |
174 test('passes through a 401 response with invalid www-authenticate', () { | 174 test('passes through a 401 response with invalid www-authenticate', () { |
175 var credentials = new oauth2.Credentials('access token'); | 175 var credentials = new oauth2.Credentials('access token'); |
176 var client = new oauth2.Client('identifier', 'secret', credentials, | 176 var client = new oauth2.Client('identifier', 'secret', credentials, |
177 httpClient: httpClient); | 177 httpClient: httpClient); |
178 | 178 |
179 httpClient.expectRequest((request) { | 179 httpClient.expectRequest((request) { |
180 expect(request.method, equals('GET')); | 180 expect(request.method, equals('GET')); |
181 expect(request.url.toString(), equals(requestUri.toString())); | 181 expect(request.url.toString(), equals(requestUri.toString())); |
182 expect(request.headers['authorization'], | 182 expect(request.headers['authorization'], |
183 equals('Bearer access token')); | 183 equals('Bearer access token')); |
184 | 184 |
185 var authenticate = 'Bearer error="invalid_token", error_description=' | 185 var authenticate = 'Bearer error="invalid_token", error_description=' |
186 '"Something is terribly wrong.", '; | 186 '"Something is terribly wrong.", '; |
187 return new Future.immediate(new http.Response('bad job', 401, | 187 return new Future.value(new http.Response('bad job', 401, |
188 headers: {'www-authenticate': authenticate})); | 188 headers: {'www-authenticate': authenticate})); |
189 }); | 189 }); |
190 | 190 |
191 expect( | 191 expect( |
192 client.get(requestUri).then((response) => response.statusCode), | 192 client.get(requestUri).then((response) => response.statusCode), |
193 completion(equals(401))); | 193 completion(equals(401))); |
194 }); | 194 }); |
195 | 195 |
196 test('passes through a 401 response with non-bearer www-authenticate', () { | 196 test('passes through a 401 response with non-bearer www-authenticate', () { |
197 var credentials = new oauth2.Credentials('access token'); | 197 var credentials = new oauth2.Credentials('access token'); |
198 var client = new oauth2.Client('identifier', 'secret', credentials, | 198 var client = new oauth2.Client('identifier', 'secret', credentials, |
199 httpClient: httpClient); | 199 httpClient: httpClient); |
200 | 200 |
201 httpClient.expectRequest((request) { | 201 httpClient.expectRequest((request) { |
202 expect(request.method, equals('GET')); | 202 expect(request.method, equals('GET')); |
203 expect(request.url.toString(), equals(requestUri.toString())); | 203 expect(request.url.toString(), equals(requestUri.toString())); |
204 expect(request.headers['authorization'], | 204 expect(request.headers['authorization'], |
205 equals('Bearer access token')); | 205 equals('Bearer access token')); |
206 | 206 |
207 return new Future.immediate(new http.Response('bad job', 401, | 207 return new Future.value(new http.Response('bad job', 401, |
208 headers: {'www-authenticate': 'Digest'})); | 208 headers: {'www-authenticate': 'Digest'})); |
209 }); | 209 }); |
210 | 210 |
211 expect( | 211 expect( |
212 client.get(requestUri).then((response) => response.statusCode), | 212 client.get(requestUri).then((response) => response.statusCode), |
213 completion(equals(401))); | 213 completion(equals(401))); |
214 }); | 214 }); |
215 | 215 |
216 test('passes through a 401 response with non-OAuth2 www-authenticate', () { | 216 test('passes through a 401 response with non-OAuth2 www-authenticate', () { |
217 var credentials = new oauth2.Credentials('access token'); | 217 var credentials = new oauth2.Credentials('access token'); |
218 var client = new oauth2.Client('identifier', 'secret', credentials, | 218 var client = new oauth2.Client('identifier', 'secret', credentials, |
219 httpClient: httpClient); | 219 httpClient: httpClient); |
220 | 220 |
221 httpClient.expectRequest((request) { | 221 httpClient.expectRequest((request) { |
222 expect(request.method, equals('GET')); | 222 expect(request.method, equals('GET')); |
223 expect(request.url.toString(), equals(requestUri.toString())); | 223 expect(request.url.toString(), equals(requestUri.toString())); |
224 expect(request.headers['authorization'], | 224 expect(request.headers['authorization'], |
225 equals('Bearer access token')); | 225 equals('Bearer access token')); |
226 | 226 |
227 return new Future.immediate(new http.Response('bad job', 401, | 227 return new Future.value(new http.Response('bad job', 401, |
228 headers: {'www-authenticate': 'Bearer'})); | 228 headers: {'www-authenticate': 'Bearer'})); |
229 }); | 229 }); |
230 | 230 |
231 expect( | 231 expect( |
232 client.get(requestUri).then((response) => response.statusCode), | 232 client.get(requestUri).then((response) => response.statusCode), |
233 completion(equals(401))); | 233 completion(equals(401))); |
234 }); | 234 }); |
235 }); | 235 }); |
236 } | 236 } |
OLD | NEW |