diff --git a/tests/node-qunit/isEnabled.test.js b/tests/node-qunit/isEnabled.test.js new file mode 100644 index 000000000..c43140f81 --- /dev/null +++ b/tests/node-qunit/isEnabled.test.js @@ -0,0 +1,68 @@ +/* global Map: false */ + +var stubs = require( './stubs' ), + isEnabled = require( '../../src/isEnabled' ); + +function createStubUserSettings( isEnabled ) { + return { + hasIsEnabled: function () { + return isEnabled !== undefined; + }, + getIsEnabled: function () { + return Boolean( isEnabled ); + } + }; +} + +QUnit.module( 'ext.popups#isEnabled (logged out)', { + setup: function () { + this.user = stubs.createStubUser( /* isAnon = */ true ); + } +} ); + +QUnit.test( 'is should handle logged out users', function ( assert ) { + var user = stubs.createStubUser( /* isAnon = */ true ), + cases, + i, testCase, + userSettings, + config = new Map(); + + cases = [ + [ undefined, true, 'When the user hasn\'t enabled or disabled the feature' ], + [ false, false, 'When the user has disabled the feature' ], + [ true, true, 'When the user has enabled the feature' ] + ]; + + for ( i = 0; i < cases.length; i++ ) { + testCase = cases[ i ]; + userSettings = createStubUserSettings( testCase[ 0 ] ); + + assert.equal( + isEnabled( user, userSettings, config ), + testCase[ 1 ], + testCase[ 2 ] + ); + } + + // --- + + config.set( 'wgPopupsBetaFeature', true ); + + assert.notOk( + isEnabled( user, userSettings, config ), + 'When Page Previews is enabled as a beta feature, then it\'s not enabled for logged out users.' + ); +} ); + +QUnit.test( 'it should handle logged in users', function ( assert ) { + var user = stubs.createStubUser( /* isAnon = */ false ), + userSettings = createStubUserSettings( false ), + config = new Map(); + + config.set( 'wgPopupsShouldSendModuleToUser', true ); + + assert.ok( + isEnabled( user, userSettings, config ), + 'If the user is logged in and Page Previews has booted, then it\'s enabled.' + ); +} ); diff --git a/tests/node-qunit/stubs.js b/tests/node-qunit/stubs.js new file mode 100644 index 000000000..8c10b79c1 --- /dev/null +++ b/tests/node-qunit/stubs.js @@ -0,0 +1,17 @@ +/** + * Creates a **minimal** stub that can be used in place of an `mw.User` + * instance. + * + * @param {boolean} isAnon The return value of the `#isAnon`. + * @return {Object} + */ +exports.createStubUser = function createStubUser( isAnon ) { + return { + isAnon: function () { + return isAnon; + }, + sessionId: function () { + return '0123456789'; + } + }; +}; diff --git a/tests/qunit/ext.popups/isEnabled.test.js b/tests/qunit/ext.popups/isEnabled.test.js deleted file mode 100644 index c4ba9b816..000000000 --- a/tests/qunit/ext.popups/isEnabled.test.js +++ /dev/null @@ -1,65 +0,0 @@ -( function ( mw ) { - - function createStubUserSettings( isEnabled ) { - return { - hasIsEnabled: function () { - return isEnabled !== undefined; - }, - getIsEnabled: function () { - return Boolean(isEnabled); - } - }; - } - - QUnit.module( 'ext.popups#isEnabled (logged out)', { - setup: function () { - this.user = mw.popups.tests.stubs.createStubUser( /* isAnon = */ true ); - } - } ); - - QUnit.test( 'is should handle logged out users', function ( assert ) { - var user = mw.popups.tests.stubs.createStubUser( /* isAnon = */ true ), - cases, - userSettings, - config = new mw.Map(); - - cases = [ - [ undefined, true, 'When the user hasn\'t enabled or disabled the feature' ], - [ false, false, 'When the user has disabled the feature' ], - [ true, true, 'When the user has enabled the feature' ] - ]; - - $.each( cases, function ( _, testCase ) { - userSettings = createStubUserSettings( testCase[ 0 ] ); - - assert.equal( - mw.popups.isEnabled( user, userSettings, config ), - testCase[ 1 ], - testCase[ 2 ] - ); - } ); - - // --- - - config.set( 'wgPopupsBetaFeature', true ); - - assert.notOk( - mw.popups.isEnabled( user, userSettings, config ), - 'When Page Previews is enabled as a beta feature, then it\'s not enabled for logged out users.' - ); - } ); - - QUnit.test( 'it should handle logged in users', function ( assert ) { - var user = mw.popups.tests.stubs.createStubUser( /* isAnon = */ false ), - userSettings = createStubUserSettings( false ), - config = new mw.Map(); - - config.set( 'wgPopupsShouldSendModuleToUser', true ); - - assert.ok( - mw.popups.isEnabled( user, userSettings, config ), - 'If the user is logged in and Page Previews has booted, then it\'s enabled.' - ); - } ); - -}( mediaWiki ) );