@@ -4,14 +4,11 @@ var MockUrlFetchApp = require('./mocks/urlfetchapp');
44var MockProperties = require ( './mocks/properties' ) ;
55var MockCache = require ( './mocks/cache' ) ;
66var MockLock = require ( './mocks/lock' ) ;
7+ var MockScriptApp = require ( './mocks/script' ) ;
78var Future = require ( 'fibers/future' ) ;
89
910var mocks = {
10- ScriptApp : {
11- getScriptId : function ( ) {
12- return '12345' ;
13- }
14- } ,
11+ ScriptApp : new MockScriptApp ( ) ,
1512 UrlFetchApp : new MockUrlFetchApp ( ) ,
1613 Utilities : {
1714 base64Encode : function ( data ) {
@@ -405,6 +402,32 @@ describe('Service', function() {
405402 service . exchangeGrant_ ( ) ;
406403 } ) ;
407404 } ) ;
405+
406+ describe ( '#getAuthorizationUrl()' , function ( ) {
407+ it ( 'should add additional parameters to the state token' , function ( ) {
408+ var service = OAuth2 . createService ( 'test' )
409+ . setAuthorizationBaseUrl ( 'http://www.example.com' )
410+ . setClientId ( 'abc' )
411+ . setClientSecret ( 'def' )
412+ . setCallbackFunction ( 'authCallback' ) ;
413+ var authorizationUrl = service . getAuthorizationUrl ( {
414+ foo : 'bar'
415+ } ) ;
416+
417+ // Extract the state token from the URL and parse it. For example, the
418+ // URL http://www.example.com?state=%7B%22a%22%3A1%7D would produce
419+ // {a: 1}.
420+ var querystring = authorizationUrl . split ( '?' ) [ 1 ] ;
421+ var params = querystring . split ( '&' ) . reduce ( function ( result , pair ) {
422+ var parts = pair . split ( '=' ) . map ( decodeURIComponent ) ;
423+ result [ parts [ 0 ] ] = parts [ 1 ] ;
424+ return result ;
425+ } , { } ) ;
426+ var state = JSON . parse ( params . state ) ;
427+
428+ assert . equal ( state . arguments . foo , 'bar' ) ;
429+ } ) ;
430+ } ) ;
408431} ) ;
409432
410433describe ( 'Utilities' , function ( ) {
0 commit comments