let sandbox, page, gateway, pageParser,
references, Drawer, Page, PageHTMLParser;
const
sinon = require( 'sinon' ),
oo = require( '../../utils/oo' ),
dom = require( '../../utils/dom' ),
jQuery = require( '../../utils/jQuery' ),
mediaWiki = require( '../../utils/mw' ),
mustache = require( '../../utils/mustache' ),
util = require( '../../../../src/mobile.startup/util' ),
ReferencesGateway = require( '../../../../src/mobile.startup/references/ReferencesGateway' );
QUnit.module( 'MobileFrontend: references', {
beforeEach: function () {
sandbox = sinon.sandbox.create();
dom.setUp( sandbox, global );
jQuery.setUp( sandbox, global );
oo.setUp( sandbox, global );
mediaWiki.setUp( sandbox, global );
mustache.setUp( sandbox, global );
Page = require( '../../../../src/mobile.startup/Page' );
PageHTMLParser = require( '../../../../src/mobile.startup/PageHTMLParser' );
Drawer = require( '../../../../src/mobile.startup/Drawer' );
references = require( '../../../../src/mobile.startup/references/references.js' );
gateway = {
getReference: function () {}
};
pageParser = new PageHTMLParser( util.parseHTML( '
' ) );
page = new Page( { title: 'reference test' } );
},
afterEach: function () {
jQuery.tearDown();
sandbox.restore();
}
} );
QUnit.test( 'Bad reference not shown', function ( assert ) {
const promise = util.Deferred().reject( ReferencesGateway.ERROR_NOT_EXIST ).promise(),
showSpy = sandbox.spy( Drawer.prototype, 'show' );
sandbox.stub( gateway, 'getReference' ).returns( promise );
references.showReference( '#cite_note-bad', page, '1', pageParser, gateway );
return promise.catch( function () {
assert.strictEqual( showSpy.callCount, 0, 'Show is not called.' );
} );
} );
QUnit.test( 'Good reference causes render', function ( assert ) {
const promise = util.Deferred().resolve( {
text: 'I am a reference'
} ).promise(),
renderSpy = sandbox.spy( Drawer.prototype, 'render' ),
done = assert.async();
sandbox.stub( gateway, 'getReference' ).returns( promise );
references.showReference( '#cite_note-good', page, '1', pageParser, gateway );
return promise.then( function () {
assert.strictEqual( renderSpy.callCount, 1, 'Render is called.' );
done();
} );
} );
QUnit.test( 'Reference failure renders error in drawer', function ( assert ) {
const promise = util.Deferred().reject( ReferencesGateway.ERROR_OTHER ).promise(),
renderSpy = sandbox.spy( Drawer.prototype, 'render' ),
done = assert.async();
sandbox.stub( gateway, 'getReference' ).returns( promise );
references.showReference( '#cite_note-bad', page, '1', pageParser, gateway );
return promise.catch( function () {
assert.strictEqual( renderSpy.callCount, 1, 'Render is called.' );
done();
} );
} );
QUnit.test( 'makeOnNestedReferenceClickHandler runs when associated with link', function ( assert ) {
const spy = sandbox.spy(),
sup = document.createElement( 'sup' ),
anchor = document.createElement( 'a' ),
eventWithAnchor = {
currentTarget: sup
},
eventWithDiv = {
currentTarget: document.createElement( 'div' )
},
callback = references.test.makeOnNestedReferenceClickHandler( spy );
sup.appendChild( anchor );
anchor.setAttribute( 'href', 'https://wikipedia.org' );
anchor.textContent = 'hello';
callback( eventWithAnchor );
assert.strictEqual( spy.calledOnce, true, 'The spy is called with a sup' );
callback( eventWithDiv );
assert.strictEqual( spy.calledOnce, true, 'The spy was not called with a div' );
} );