wiki.techinc.nl/tests/selenium/specs/rollback.js
Reedy 8631daae64 Disable flaky Selenium test
Bug: T226144
Change-Id: Ib49898617ba419f709b249ae9a05d9cb7b8e4e9d
2019-10-08 20:50:37 +00:00

139 lines
4.7 KiB
JavaScript

const assert = require( 'assert' );
const HistoryPage = require( '../pageobjects/history.page' );
const Api = require( 'wdio-mediawiki/Api' );
const UserLoginPage = require( 'wdio-mediawiki/LoginPage' );
const Util = require( 'wdio-mediawiki/Util' );
function vandalizePage( name, content ) {
const vandalUsername = 'Evil_' + browser.config.mwUser;
browser.call( async () => {
// Note: Repeated logins are inefficient/slow, but we cannot re-use
// the object across calls because MWBot can only be logged into one
// account at a time. See <https://github.com/Fannon/mwbot/issues/9>.
const adminBot = await Api.bot();
await adminBot.edit( name, content );
await Api.createAccount( adminBot, vandalUsername, browser.config.mwPwd );
const vandalBot = await Api.bot( vandalUsername, browser.config.mwPwd );
await vandalBot.edit( name, 'Vandalized: ' + content );
} );
}
describe( 'Rollback with confirmation', function () {
let content, name;
before( function () {
browser.deleteAllCookies();
// Enable rollback confirmation for admin user
// Requires user to log in again, handled by deleteCookie() call in beforeEach function
UserLoginPage.loginAdmin();
HistoryPage.toggleRollbackConfirmationSetting( true );
} );
beforeEach( function () {
browser.deleteAllCookies();
content = Util.getTestString( 'beforeEach-content-' );
name = Util.getTestString( 'BeforeEach-name-' );
vandalizePage( name, content );
UserLoginPage.loginAdmin();
HistoryPage.open( name );
} );
it.skip( 'should offer rollback options for admin users', function () {
assert.strictEqual( HistoryPage.rollback.getText(), 'rollback 1 edit' );
HistoryPage.rollbackLink.click();
assert.strictEqual( HistoryPage.rollbackConfirmable.getText(), 'Please confirm:' );
assert.strictEqual( HistoryPage.rollbackConfirmableYes.getText(), 'Rollback' );
assert.strictEqual( HistoryPage.rollbackConfirmableNo.getText(), 'Cancel' );
} );
it.skip( 'should offer a way to cancel rollbacks', function () {
HistoryPage.rollback.click();
HistoryPage.rollbackConfirmableNo.waitForDisplayed( 5000 );
HistoryPage.rollbackConfirmableNo.click();
browser.pause( 1000 ); // Waiting to ensure we are NOT redirected and stay on the same page
assert.strictEqual( HistoryPage.heading.getText(), 'Revision history of "' + name + '"' );
} );
it.skip( 'should perform rollbacks after confirming intention', function () {
HistoryPage.rollback.click();
HistoryPage.rollbackConfirmableYes.waitForDisplayed( 5000 );
HistoryPage.rollbackConfirmableYes.click();
// waitUntil indirectly asserts that the content we are looking for is present
browser.waitUntil( function () {
return browser.getText( '#firstHeading' ) === 'Action complete';
}, 5000, 'Expected rollback page to appear.' );
} );
it.skip( 'should verify rollbacks via GET requests are confirmed on a follow-up page', function () {
const rollbackActionUrl = HistoryPage.rollbackLink.getAttribute( 'href' );
browser.url( rollbackActionUrl );
browser.waitUntil( function () {
return HistoryPage.rollbackNonJsConfirmable.getText() === 'Revert edits to this page?';
}, 5000, 'Expected rollback confirmation page to appear for GET-based rollbacks.' );
HistoryPage.rollbackNonJsConfirmableYes.click();
browser.waitUntil( function () {
return browser.getText( '#firstHeading' ) === 'Action complete';
}, 5000, 'Expected rollback page to appear.' );
} );
} );
describe( 'Rollback without confirmation', function () {
let content, name;
before( function () {
browser.deleteAllCookies();
// Disable rollback confirmation for admin user
// Requires user to log in again, handled by deleteCookie() call in beforeEach function
UserLoginPage.loginAdmin();
HistoryPage.toggleRollbackConfirmationSetting( false );
} );
beforeEach( function () {
browser.deleteAllCookies();
content = Util.getTestString( 'beforeEach-content-' );
name = Util.getTestString( 'BeforeEach-name-' );
vandalizePage( name, content );
UserLoginPage.loginAdmin();
HistoryPage.open( name );
} );
it.skip( 'should perform rollback via POST request without asking the user to confirm', function () {
HistoryPage.rollback.click();
// waitUntil indirectly asserts that the content we are looking for is present
browser.waitUntil( function () {
return HistoryPage.heading.getText() === 'Action complete';
}, 5000, 'Expected rollback page to appear.' );
} );
it.skip( 'should perform rollback via GET request without asking the user to confirm', function () {
const rollbackActionUrl = HistoryPage.rollbackLink.getAttribute( 'href' );
browser.url( rollbackActionUrl );
browser.waitUntil( function () {
return browser.getText( '#firstHeading' ) === 'Action complete';
}, 5000, 'Expected rollback page to appear.' );
} );
} );