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

Unified Diff: pkg/oauth2/test/authorization_code_grant_test.dart

Issue 11420025: Add a package for authenticating via OAuth2. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Refresh token fixes and code review changes Created 8 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/oauth2/lib/src/utils.dart ('k') | pkg/oauth2/test/client_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/oauth2/test/authorization_code_grant_test.dart
diff --git a/pkg/oauth2/test/authorization_code_grant_test.dart b/pkg/oauth2/test/authorization_code_grant_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..ad2c0ba3d467d70070a7fea6f16874c66b29f5b3
--- /dev/null
+++ b/pkg/oauth2/test/authorization_code_grant_test.dart
@@ -0,0 +1,196 @@
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library authorization_code_grant_test;
+
+import 'dart:io';
+import 'dart:json';
+import 'dart:uri';
+
+import '../../unittest/lib/unittest.dart';
+import '../../http/lib/http.dart' as http;
+import '../../http/lib/testing.dart';
+import '../lib/oauth2.dart' as oauth2;
+import 'utils.dart';
+
+final redirectUrl = new Uri.fromString('http://example.com/redirect');
+
+ExpectClient client;
+
+AuthorizationCodeGrant grant;
+
+void createGrant() {
+ client = new ExpectClient();
+ grant = new oauth2.AuthorizationCodeGrant(
+ 'identifier',
+ 'secret',
+ new Uri.fromString('https://example.com/authorization'),
+ new Uri.fromString('https://example.com/token'),
+ httpClient: client);
+}
+
+void main() {
+ group('.getAuthorizationUrl', () {
+ setUp(createGrant);
+
+ test('builds the correct URL', () {
+ expect(grant.getAuthorizationUrl(redirectUrl).toString(),
+ equals('https://example.com/authorization'
+ '?response_type=code'
+ '&client_id=identifier'
+ '&redirect_uri=http%3A%2F%2Fexample.com%2Fredirect'));
+ });
+
+ test('builds the correct URL with scopes', () {
+ var authorizationUrl = grant.getAuthorizationUrl(
+ redirectUrl, scopes: ['scope', 'other/scope']);
+ expect(authorizationUrl.toString(),
+ equals('https://example.com/authorization'
+ '?response_type=code'
+ '&client_id=identifier'
+ '&redirect_uri=http%3A%2F%2Fexample.com%2Fredirect'
+ '&scope=scope%20other%2Fscope'));
+ });
+
+ test('builds the correct URL with state', () {
+ var authorizationUrl = grant.getAuthorizationUrl(
+ redirectUrl, state: 'state');
+ expect(authorizationUrl.toString(),
+ equals('https://example.com/authorization'
+ '?response_type=code'
+ '&client_id=identifier'
+ '&redirect_uri=http%3A%2F%2Fexample.com%2Fredirect'
+ '&state=state'));
+ });
+
+ test('merges with existing query parameters', () {
+ grant = new oauth2.AuthorizationCodeGrant(
+ 'identifier',
+ 'secret',
+ new Uri.fromString('https://example.com/authorization?query=value'),
+ new Uri.fromString('https://example.com/token'),
+ httpClient: client);
+
+ var authorizationUrl = grant.getAuthorizationUrl(redirectUrl);
+ expect(authorizationUrl.toString(),
+ equals('https://example.com/authorization'
+ '?query=value'
+ '&response_type=code'
+ '&client_id=identifier'
+ '&redirect_uri=http%3A%2F%2Fexample.com%2Fredirect'));
+ });
+
+ test("can't be called twice", () {
+ grant.getAuthorizationUrl(redirectUrl);
+ expect(() => grant.getAuthorizationUrl(redirectUrl), throwsStateError);
+ });
+ });
+
+ group('.handleAuthorizationResponse', () {
+ setUp(createGrant);
+
+ test("can't be called before .getAuthorizationUrl", () {
+ expect(grant.handleAuthorizationResponse({}), throwsStateError);
+ });
+
+ test("can't be called twice", () {
+ grant.getAuthorizationUrl(redirectUrl);
+ grant.handleAuthorizationResponse({'code': 'auth code'});
+ expect(grant.handleAuthorizationResponse({'code': 'auth code'}),
+ throwsStateError);
+ });
+
+ test('must have a state parameter if the authorization URL did', () {
+ grant.getAuthorizationUrl(redirectUrl, state: 'state');
+ expect(grant.handleAuthorizationResponse({'code': 'auth code'}),
+ throwsFormatException);
+ });
+
+ test('must have the same state parameter the authorization URL did', () {
+ grant.getAuthorizationUrl(redirectUrl, state: 'state');
+ expect(grant.handleAuthorizationResponse({
+ 'code': 'auth code',
+ 'state': 'other state'
+ }), throwsFormatException);
+ });
+
+ test('must have a code parameter', () {
+ grant.getAuthorizationUrl(redirectUrl);
+ expect(grant.handleAuthorizationResponse({}), throwsFormatException);
+ });
+
+ test('with an error parameter throws an AuthorizationException', () {
+ grant.getAuthorizationUrl(redirectUrl);
+ expect(grant.handleAuthorizationResponse({'error': 'invalid_request'}),
+ throwsAuthorizationException);
+ });
+
+ test('sends an authorization code request', () {
+ grant.getAuthorizationUrl(redirectUrl);
+ client.expectRequest((request) {
+ expect(request.method, equals('POST'));
+ expect(request.url.toString(), equals(grant.tokenEndpoint.toString()));
+ expect(request.bodyFields, equals({
+ 'grant_type': 'authorization_code',
+ 'code': 'auth code',
+ 'redirect_uri': redirectUrl.toString(),
+ 'client_id': 'identifier',
+ 'client_secret': 'secret'
+ }));
+
+ return new Future.immediate(new http.Response(JSON.stringify({
+ 'access_token': 'access token',
+ 'token_type': 'bearer',
+ }), 200, headers: {'content-type': 'application/json'}));
+ });
+
+ expect(grant.handleAuthorizationResponse({'code': 'auth code'}),
+ completion(predicate((client) {
+ expect(client.credentials.accessToken, equals('access token'));
+ return true;
+ })));
+ });
+ });
+
+ group('.handleAuthorizationCode', () {
+ setUp(createGrant);
+
+ test("can't be called before .getAuthorizationUrl", () {
+ expect(grant.handleAuthorizationCode('auth code'), throwsStateError);
+ });
+
+ test("can't be called twice", () {
+ grant.getAuthorizationUrl(redirectUrl);
+ grant.handleAuthorizationCode('auth code');
+ expect(grant.handleAuthorizationCode('auth code'),
+ throwsStateError);
+ });
+
+ test('sends an authorization code request', () {
+ grant.getAuthorizationUrl(redirectUrl);
+ client.expectRequest((request) {
+ expect(request.method, equals('POST'));
+ expect(request.url.toString(), equals(grant.tokenEndpoint.toString()));
+ expect(request.bodyFields, equals({
+ 'grant_type': 'authorization_code',
+ 'code': 'auth code',
+ 'redirect_uri': redirectUrl.toString(),
+ 'client_id': 'identifier',
+ 'client_secret': 'secret'
+ }));
+
+ return new Future.immediate(new http.Response(JSON.stringify({
+ 'access_token': 'access token',
+ 'token_type': 'bearer',
+ }), 200, headers: {'content-type': 'application/json'}));
+ });
+
+ expect(grant.handleAuthorizationCode('auth code'),
+ completion(predicate((client) {
+ expect(client.credentials.accessToken, equals('access token'));
+ return true;
+ })));
+ });
+ });
+}
« no previous file with comments | « pkg/oauth2/lib/src/utils.dart ('k') | pkg/oauth2/test/client_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698