mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Popups
synced 2024-12-01 02:36:35 +00:00
0cd94df686
The tests were skipped for some time already because the beta feature mode is taken into account on the test systems. The tests need to login and enable the beta feature mode to be executed. This is fixed with that patch. The patch also fixes broken tests due to changes that made one test obsolete and another that needed adjustments. There are also comments added to places where code can be removed or altered if the feature gets out of beta status. Bug: T268134 Change-Id: Ib96d23f3cb6c6130fd5880a78fafd252bf706475
150 lines
3.9 KiB
JavaScript
150 lines
3.9 KiB
JavaScript
'use strict';
|
|
|
|
/* global document */
|
|
|
|
const
|
|
fs = require( 'fs' ),
|
|
Api = require( 'wdio-mediawiki/Api' ),
|
|
Page = require( 'wdio-mediawiki/Page' ),
|
|
Util = require( 'wdio-mediawiki/Util' ),
|
|
TEST_PAGE_TITLE = 'Popups test page',
|
|
POPUPS_SELECTOR = '.mwe-popups',
|
|
PAGE_POPUPS_SELECTOR = '.mwe-popups-type-page',
|
|
PAGE_POPUPS_LINK_SELECTOR = '#content ul a',
|
|
REFERENCE_POPUPS_SELECTOR = '.mwe-popups-type-reference',
|
|
REFERENCE_INCEPTION_LINK_SELECTOR = '.mwe-popups-type-reference .reference a',
|
|
POPUPS_MODULE_NAME = 'ext.popups.main';
|
|
|
|
function makePage( title, path ) {
|
|
return new Promise( ( resolve ) => {
|
|
fs.readFile( path, 'utf-8', ( err, content ) => {
|
|
if ( err ) {
|
|
throw err;
|
|
}
|
|
resolve( content );
|
|
} );
|
|
} ).then( async ( content ) => {
|
|
const bot = await Api.bot();
|
|
await bot.edit( title, content );
|
|
} );
|
|
}
|
|
class PopupsPage extends Page {
|
|
setup() {
|
|
browser.call( () => {
|
|
const path = `${__dirname}/../fixtures/`;
|
|
// FIXME: Cannot use Promise.all as wdio-mediawiki/Api will trigger a bad
|
|
// token error.
|
|
return makePage( `${TEST_PAGE_TITLE} 2`, `${path}/test_page_2.wikitext` ).then( () => {
|
|
return makePage( TEST_PAGE_TITLE, `${path}test_page.wikitext` );
|
|
} );
|
|
} );
|
|
}
|
|
|
|
resourceLoaderModuleStatus( moduleName, moduleStatus, errMsg ) {
|
|
// Word of caution: browser.waitUntil returns a Timer class NOT a Promise.
|
|
// Webdriver IO will run waitUntil synchronously so not returning it will
|
|
// block JavaScript execution while returning it will not.
|
|
// http://webdriver.io/api/utility/waitUntil.html
|
|
// https://github.com/webdriverio/webdriverio/blob/master/lib/utils/Timer.js
|
|
browser.waitUntil( () => {
|
|
const result = browser.execute( ( module ) => {
|
|
return typeof mw !== 'undefined' &&
|
|
mw.loader.getState( module.name ) === module.status;
|
|
}, { status: moduleStatus, name: moduleName } );
|
|
return result;
|
|
}, 10000, errMsg );
|
|
}
|
|
|
|
ready() {
|
|
this.resourceLoaderModuleStatus( POPUPS_MODULE_NAME, 'ready', 'Popups did not load' );
|
|
}
|
|
|
|
shouldUseReferencePopupsBetaFeature( shouldUse ) {
|
|
Util.waitForModuleState( 'mediawiki.base' );
|
|
return browser.execute( function ( use ) {
|
|
return mw.loader.using( 'mediawiki.api' ).then( function () {
|
|
return new mw.Api().saveOption(
|
|
'popupsreferencepreviews',
|
|
use ? '1' : '0'
|
|
);
|
|
} );
|
|
}, shouldUse );
|
|
}
|
|
|
|
hasReferencePopupsEnabled() {
|
|
// TODO Remove or adjust when not in Beta any more
|
|
return browser.execute( () => mw.config.get( 'wgPopupsReferencePreviews' ) );
|
|
}
|
|
|
|
abandonLink() {
|
|
$( '#content h1' ).moveTo();
|
|
}
|
|
|
|
dwellLink( selector ) {
|
|
$( selector ).moveTo();
|
|
$( POPUPS_SELECTOR ).waitForExist();
|
|
}
|
|
|
|
dwellPageLink() {
|
|
this.dwellLink( PAGE_POPUPS_LINK_SELECTOR );
|
|
}
|
|
|
|
hoverPageLink() {
|
|
$( PAGE_POPUPS_LINK_SELECTOR ).moveTo();
|
|
}
|
|
|
|
dwellReferenceLink( num ) {
|
|
this.dwellLink( `.reference:nth-of-type(${num}) a` );
|
|
}
|
|
|
|
dwellReferenceInceptionLink() {
|
|
$( REFERENCE_INCEPTION_LINK_SELECTOR ).moveTo();
|
|
browser.pause( 1000 );
|
|
}
|
|
|
|
doNotSeePreview( selector ) {
|
|
return browser.waitUntil( () => !$( selector ).isDisplayed() );
|
|
}
|
|
|
|
doNotSeePagePreview() {
|
|
return this.doNotSeePreview( PAGE_POPUPS_SELECTOR );
|
|
}
|
|
|
|
doNotSeeReferencePreview() {
|
|
return this.doNotSeePreview( REFERENCE_POPUPS_SELECTOR );
|
|
}
|
|
|
|
seePreview( selector ) {
|
|
return $( selector ).isDisplayed();
|
|
}
|
|
|
|
seePagePreview() {
|
|
return this.seePreview( PAGE_POPUPS_SELECTOR );
|
|
}
|
|
|
|
seeReferencePreview() {
|
|
return this.seePreview( REFERENCE_POPUPS_SELECTOR );
|
|
}
|
|
|
|
seeReferenceInceptionPreview() {
|
|
return this.seePreview( REFERENCE_INCEPTION_LINK_SELECTOR );
|
|
}
|
|
|
|
seeScrollableReferencePreview() {
|
|
return browser.execute( () => {
|
|
const el = document.querySelector( '.mwe-popups-extract .mwe-popups-scroll' );
|
|
return el.scrollHeight > el.offsetHeight;
|
|
} );
|
|
}
|
|
|
|
seeFadeoutOnReferenceText() {
|
|
return $( '.mwe-popups-fade-out' ).isExisting();
|
|
}
|
|
|
|
open() {
|
|
super.openTitle( TEST_PAGE_TITLE );
|
|
}
|
|
|
|
}
|
|
module.exports = new PopupsPage();
|