-( function ( mw ) {
+( function ( mw, $ ) {
QUnit.module( 'mediawiki.api', QUnit.newMwEnvironment( {
setup: function () {
this.server = this.sandbox.useFakeServer();
var api = new mw.Api();
this.server.respondWith( /type=testuncached/, [ 200, { 'Content-Type': 'application/json' },
- '{ "tokens": { "testuncachedtoken": "good" } }'
+ '{ "query": { "tokens": { "testuncachedtoken": "good" } } }'
] );
// Get a token of a type that isn't prepopulated by user.tokens.
this.server.respondWith( /type=testerror/, sequenceBodies( 200, { 'Content-Type': 'application/json' },
[
'{ "error": { "code": "bite-me", "info": "Smite me, O Mighty Smiter" } }',
- '{ "tokens": { "testerrortoken": "good" } }'
+ '{ "query": { "tokens": { "testerrortoken": "good" } } }'
]
) );
} );
} );
+ QUnit.test( 'getToken() - deprecated', function ( assert ) {
+ QUnit.expect( 2 );
+ // Cache API endpoint from default to avoid cachehit in mw.user.tokens
+ var api = new mw.Api( { ajax: { url: '/postWithToken/api.php' } } );
+
+ this.server.respondWith( /type=csrf/, [ 200, { 'Content-Type': 'application/json' },
+ '{ "query": { "tokens": { "csrftoken": "csrfgood" } } }'
+ ] );
+
+ // Get a token of a type that is in the legacy map.
+ api.getToken( 'email' )
+ .done( function ( token ) {
+ assert.equal( token, 'csrfgood', 'Token' );
+ } )
+ .fail( function ( err ) {
+ assert.equal( err, '', 'API error' );
+ } );
+
+ assert.equal( this.server.requests.length, 1, 'Requests made' );
+ } );
+
QUnit.test( 'badToken()', function ( assert ) {
QUnit.expect( 2 );
var api = new mw.Api(),
this.server.respondWith( /type=testbad/, sequenceBodies( 200, { 'Content-Type': 'application/json' },
[
- '{ "tokens": { "testbadtoken": "bad" } }',
- '{ "tokens": { "testbadtoken": "good" } }'
+ '{ "query": { "tokens": { "testbadtoken": "bad" } } }',
+ '{ "query": { "tokens": { "testbadtoken": "good" } } }'
]
) );
var api = new mw.Api( { ajax: { url: '/postWithToken/api.php' } } );
this.server.respondWith( 'GET', /type=testpost/, [ 200, { 'Content-Type': 'application/json' },
- '{ "tokens": { "testposttoken": "good" } }'
+ '{ "query": { "tokens": { "testposttoken": "good" } } }'
] );
this.server.respondWith( 'POST', /api/, function ( request ) {
if ( request.requestBody.match( /token=good/ ) ) {
this.server.respondWith( /type=testbadtoken/, sequenceBodies( 200, { 'Content-Type': 'application/json' },
[
- '{ "tokens": { "testbadtokentoken": "bad" } }',
- '{ "tokens": { "testbadtokentoken": "good" } }'
+ '{ "query": { "tokens": { "testbadtokentoken": "bad" } } }',
+ '{ "query": { "tokens": { "testbadtokentoken": "good" } } }'
]
) );
this.server.respondWith( 'POST', /api/, function ( request ) {
this.server.respondWith( /type=testonce/, sequenceBodies( 200, { 'Content-Type': 'application/json' },
[
- '{ "tokens": { "testoncetoken": "good-A" } }',
- '{ "tokens": { "testoncetoken": "good-B" } }'
+ '{ "query": { "tokens": { "testoncetoken": "good-A" } } }',
+ '{ "query": { "tokens": { "testoncetoken": "good-B" } } }'
]
) );
sequenceA = sequenceBodies( 200, { 'Content-Type': 'application/json' },
assert.deepEqual( data, { example: { value: 'B' } } );
} );
} );
-}( mediaWiki ) );
+
+ QUnit.module( 'mediawiki.api (2)', {
+ setup: function () {
+ var self = this,
+ requests = this.requests = [];
+ this.api = new mw.Api();
+ this.sandbox.stub( jQuery, 'ajax', function () {
+ var request = $.extend( {
+ abort: self.sandbox.spy()
+ }, $.Deferred() );
+ requests.push( request );
+ return request;
+ } );
+ }
+ } );
+
+ QUnit.test( '#abort', 3, function ( assert ) {
+ this.api.get( {
+ a: 1
+ } );
+ this.api.post( {
+ b: 2
+ } );
+ this.api.abort();
+ assert.ok( this.requests.length === 2, 'Check both requests triggered' );
+ $.each( this.requests, function ( i, request ) {
+ assert.ok( request.abort.calledOnce, 'abort request number ' + i );
+ } );
+ } );
+}( mediaWiki, jQuery ) );