1 const assert
= require( 'assert' ),
2 Api
= require( 'wdio-mediawiki/Api' ),
3 BlankPage
= require( 'wdio-mediawiki/BlankPage' ),
4 DeletePage
= require( '../pageobjects/delete.page' ),
5 RestorePage
= require( '../pageobjects/restore.page' ),
6 EditPage
= require( '../pageobjects/edit.page' ),
7 HistoryPage
= require( '../pageobjects/history.page' ),
8 UndoPage
= require( '../pageobjects/undo.page' ),
9 UserLoginPage
= require( 'wdio-mediawiki/LoginPage' ),
10 Util
= require( 'wdio-mediawiki/Util' );
12 describe( 'Page', function () {
17 // disable VisualEditor welcome dialog
19 browser
.localStorage( 'POST', { key
: 've-beta-welcome-dialog', value
: '1' } );
22 beforeEach( function () {
23 browser
.deleteCookie();
24 content
= Util
.getTestString( 'beforeEach-content-' );
25 name
= Util
.getTestString( 'BeforeEach-name-' );
28 it( 'should be previewable', function () {
29 EditPage
.preview( name
, content
);
31 assert
.strictEqual( EditPage
.heading
.getText(), 'Creating ' + name
);
32 assert
.strictEqual( EditPage
.displayedContent
.getText(), content
);
33 assert( EditPage
.content
.isVisible(), 'editor is still present' );
34 assert( !EditPage
.conflictingContent
.isVisible(), 'no edit conflict happened' );
35 // provoke and dismiss reload warning due to unsaved content
36 browser
.url( 'data:text/html,Done' );
38 browser
.alertAccept();
42 it( 'should be creatable', function () {
44 EditPage
.edit( name
, content
);
47 assert
.strictEqual( EditPage
.heading
.getText(), name
);
48 assert
.strictEqual( EditPage
.displayedContent
.getText(), content
);
51 it( 'should be re-creatable', function () {
52 const initialContent
= Util
.getTestString( 'initialContent-' );
55 browser
.call( function () {
56 return Api
.edit( name
, initialContent
);
60 browser
.call( function () {
61 return Api
.delete( name
, 'delete prior to recreate' );
65 EditPage
.edit( name
, content
);
68 assert
.strictEqual( EditPage
.heading
.getText(), name
);
69 assert
.strictEqual( EditPage
.displayedContent
.getText(), content
);
72 it( 'should be editable @daily', function () {
74 browser
.call( function () {
75 return Api
.edit( name
, content
);
79 const editContent
= Util
.getTestString( 'editContent-' );
80 EditPage
.edit( name
, editContent
);
83 assert
.strictEqual( EditPage
.heading
.getText(), name
);
84 // eslint-disable-next-line no-restricted-syntax
85 assert( EditPage
.displayedContent
.getText().includes( editContent
) );
88 it( 'should have history @daily', function () {
90 browser
.call( function () {
91 return Api
.edit( name
, content
);
95 HistoryPage
.open( name
);
96 assert
.strictEqual( HistoryPage
.comment
.getText(), `Created or updated page with "${content}"` );
99 it( 'should be deletable', function () {
101 UserLoginPage
.loginAdmin();
104 browser
.call( function () {
105 return Api
.edit( name
, content
);
109 DeletePage
.delete( name
, content
+ '-deletereason' );
113 DeletePage
.displayedContent
.getText(),
114 '"' + name
+ '" has been deleted. See deletion log for a record of recent deletions.\nReturn to Main Page.'
118 it( 'should be restorable', function () {
120 UserLoginPage
.loginAdmin();
123 browser
.call( function () {
124 return Api
.edit( name
, content
);
128 browser
.call( function () {
129 return Api
.delete( name
, content
+ '-deletereason' );
133 RestorePage
.restore( name
, content
+ '-restorereason' );
136 assert
.strictEqual( RestorePage
.displayedContent
.getText(), name
+ ' has been restored\nConsult the deletion log for a record of recent deletions and restorations.' );
139 it( 'should be undoable', function () {
141 browser
.call( function () {
142 return Api
.edit( name
, content
);
146 let previousRev
, undoRev
;
147 browser
.call( function () {
148 return Api
.edit( name
, Util
.getTestString( 'editContent-' ) )
149 .then( ( response
) => {
150 previousRev
= response
.edit
.oldrevid
;
151 undoRev
= response
.edit
.newrevid
;
155 UndoPage
.undo( name
, previousRev
, undoRev
);
157 assert
.strictEqual( EditPage
.displayedContent
.getText(), content
);