wiki.techinc.nl/tests/selenium/wdio-mediawiki/RunJobs.js
Ed Sanders 2af1c3c901 build: Update eslint-config-wikimedia to 0.28.1 and autofix
Also remove temporary explicit dependency on eslint-plugin-vue
introduced in Ibd616750f046a.

Change-Id: Ic6330fcb116e99d5827b4877e094e3073e2b7b72
2024-06-11 19:03:53 +01:00

68 lines
2 KiB
JavaScript

'use strict';
const MWBot = require( 'mwbot' );
const Page = require( './Page' );
const MAINPAGE_REQUESTS_MAX_RUNS = 10; // (arbitrary) safe-guard against endless execution
function getJobCount() {
const bot = new MWBot( {
apiUrl: `${ browser.config.baseUrl }/api.php`
} );
return bot.request( {
action: 'query',
meta: 'siteinfo',
siprop: 'statistics'
} ).then( ( response ) => response.query.statistics.jobs );
}
function log( message ) {
process.stdout.write( `RunJobs ${ message }\n` );
}
function runThroughMainPageRequests( runCount = 1 ) {
const page = new Page();
log( `through requests to the main page (run ${ runCount }).` );
page.openTitle( '' );
return getJobCount().then( ( jobCount ) => {
if ( jobCount === 0 ) {
log( 'found no more queued jobs.' );
return;
}
log( `detected ${ jobCount } more queued job(s).` );
if ( runCount >= MAINPAGE_REQUESTS_MAX_RUNS ) {
log( 'stopping requests to the main page due to reached limit.' );
return;
}
return runThroughMainPageRequests( ++runCount );
} );
}
/**
* Trigger the execution of jobs
*
* Use RunJobs.run() to ensure that jobs are executed before making assertions that depend on it.
*
* Systems that are selenium-tested are usually provisioned for that purpose, see no organic
* traffic, consequently typical post-send job queue processing rarely happens. Additionally,
* test set-up is often done through the API, requests to which do not trigger job queue
* processing at all.
*
* This can lead to an accumulation of unprocessed jobs, which in turn would render certain
* assertions impossible - e.g. checking a page is listed on Special:RecentChanges right
* after creating it.
*
* This class will try to trigger job execution through repeated blunt requests against the
* wiki's home page to trigger them at a rate of `$wgJobRunRate` per request.
*
* See also <https://www.mediawiki.org/wiki/Manual:Job_queue/For_developers#Execution_of_jobs>.
*/
class RunJobs {
static run() {
browser.call( () => runThroughMainPageRequests() );
}
}
module.exports = RunJobs;