2 QUnit
.module( 'mediawiki.api', QUnit
.newMwEnvironment( {
4 this.clock
= this.sandbox
.useFakeTimers();
5 this.server
= this.sandbox
.useFakeServer();
7 teardown: function () {
12 QUnit
.test( 'Basic functionality', function ( assert
) {
15 var api
= new mw
.Api();
18 .done( function ( data
) {
19 assert
.deepEqual( data
, [], 'If request succeeds without errors, resolve deferred' );
23 .done( function ( data
) {
24 assert
.deepEqual( data
, [], 'Simple POST request' );
27 this.server
.respond( function ( request
) {
28 request
.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
32 QUnit
.test( 'API error', function ( assert
) {
35 var api
= new mw
.Api();
37 api
.get( { action
: 'doesntexist' } )
38 .fail( function ( errorCode
) {
39 assert
.equal( errorCode
, 'unknown_action', 'API error should reject the deferred' );
42 this.server
.respond( function ( request
) {
43 request
.respond( 200, { 'Content-Type': 'application/json' },
44 '{ "error": { "code": "unknown_action" } }'
49 QUnit
.test( 'Deprecated callback methods', function ( assert
) {
52 var api
= new mw
.Api();
54 api
.get( {}, function () {
55 assert
.ok( true, 'Function argument treated as success callback.' );
60 assert
.ok( true, '"ok" property treated as success callback.' );
64 api
.get( { action
: 'doesntexist' }, {
66 assert
.ok( true, '"err" property treated as error callback.' );
70 this.server
.respondWith( /action=query/, function ( request
) {
71 request
.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
74 this.server
.respondWith( /action=doesntexist/, function ( request
) {
75 request
.respond( 200, { 'Content-Type': 'application/json' },
76 '{ "error": { "code": "unknown_action" } }'
80 this.server
.respond();
83 QUnit
.test( 'getToken( cached )', function ( assert
) {
86 var api
= new mw
.Api();
88 // Get editToken for local wiki, this should not make
89 // a request as it should be retrieved from user.tokens.
90 api
.getToken( 'edit' )
91 .done( function ( token
) {
92 assert
.ok( token
.length
, 'Got a token' );
94 .fail( function ( err
) {
95 assert
.equal( '', err
, 'API error' );
98 assert
.equal( this.server
.requests
.length
, 0, 'Requests made' );
101 QUnit
.test( 'getToken( uncached )', function ( assert
) {
104 var api
= new mw
.Api();
106 // Get a token of a type that isn't prepopulated by user.tokens.
107 // Could use "block" or "delete" here, but those could in theory
108 // be added to user.tokens, use a fake one instead.
109 api
.getToken( 'testaction' )
110 .done( function ( token
) {
111 assert
.ok( token
.length
, 'Got a token' );
113 .fail( function ( err
) {
114 assert
.equal( '', err
, 'API error' );
117 assert
.equal( this.server
.requests
.length
, 1, 'Requests made' );
119 this.server
.respond( function ( request
) {
120 request
.respond( 200, { 'Content-Type': 'application/json' },
121 '{ "tokens": { "testactiontoken": "0123abc" } }'