mediawiki-extensions-Popups/tests/selenium/pageobjects/popups.page.js
WMDE-Fisch 0cd94df686 Fix and re-enable ReferencePreview browser tests
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
2020-11-18 14:33:45 +01:00

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();