Merge "Add fields and docs to WikiExporter"
[lhc/web/wiklou.git] / tests / selenium / specs / page.js
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' );
11
12 describe( 'Page', function () {
13 var content,
14 name;
15
16 before( function () {
17 // disable VisualEditor welcome dialog
18 BlankPage.open();
19 browser.localStorage( 'POST', { key: 've-beta-welcome-dialog', value: '1' } );
20 } );
21
22 beforeEach( function () {
23 browser.deleteCookie();
24 content = Util.getTestString( 'beforeEach-content-' );
25 name = Util.getTestString( 'BeforeEach-name-' );
26 } );
27
28 it( 'should be previewable', function () {
29 EditPage.preview( name, content );
30
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' );
37 try {
38 browser.alertAccept();
39 } catch ( e ) {}
40 } );
41
42 it( 'should be creatable', function () {
43 // create
44 EditPage.edit( name, content );
45
46 // check
47 assert.strictEqual( EditPage.heading.getText(), name );
48 assert.strictEqual( EditPage.displayedContent.getText(), content );
49 } );
50
51 it( 'should be re-creatable', function () {
52 const initialContent = Util.getTestString( 'initialContent-' );
53
54 // create
55 browser.call( function () {
56 return Api.edit( name, initialContent );
57 } );
58
59 // delete
60 browser.call( function () {
61 return Api.delete( name, 'delete prior to recreate' );
62 } );
63
64 // create
65 EditPage.edit( name, content );
66
67 // check
68 assert.strictEqual( EditPage.heading.getText(), name );
69 assert.strictEqual( EditPage.displayedContent.getText(), content );
70 } );
71
72 it( 'should be editable @daily', function () {
73 // create
74 browser.call( function () {
75 return Api.edit( name, content );
76 } );
77
78 // edit
79 const editContent = Util.getTestString( 'editContent-' );
80 EditPage.edit( name, editContent );
81
82 // check
83 assert.strictEqual( EditPage.heading.getText(), name );
84 // eslint-disable-next-line no-restricted-syntax
85 assert( EditPage.displayedContent.getText().includes( editContent ) );
86 } );
87
88 it( 'should have history @daily', function () {
89 // create
90 browser.call( function () {
91 return Api.edit( name, content );
92 } );
93
94 // check
95 HistoryPage.open( name );
96 assert.strictEqual( HistoryPage.comment.getText(), `Created or updated page with "${content}"` );
97 } );
98
99 it( 'should be deletable', function () {
100 // login
101 UserLoginPage.loginAdmin();
102
103 // create
104 browser.call( function () {
105 return Api.edit( name, content );
106 } );
107
108 // delete
109 DeletePage.delete( name, content + '-deletereason' );
110
111 // check
112 assert.strictEqual(
113 DeletePage.displayedContent.getText(),
114 '"' + name + '" has been deleted. See deletion log for a record of recent deletions.\nReturn to Main Page.'
115 );
116 } );
117
118 it( 'should be restorable', function () {
119 // login
120 UserLoginPage.loginAdmin();
121
122 // create
123 browser.call( function () {
124 return Api.edit( name, content );
125 } );
126
127 // delete
128 browser.call( function () {
129 return Api.delete( name, content + '-deletereason' );
130 } );
131
132 // restore
133 RestorePage.restore( name, content + '-restorereason' );
134
135 // check
136 assert.strictEqual( RestorePage.displayedContent.getText(), name + ' has been restored\nConsult the deletion log for a record of recent deletions and restorations.' );
137 } );
138
139 it( 'should be undoable', function () {
140 // create
141 browser.call( function () {
142 return Api.edit( name, content );
143 } );
144
145 // edit
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;
152 } );
153 } );
154
155 UndoPage.undo( name, previousRev, undoRev );
156
157 assert.strictEqual( EditPage.displayedContent.getText(), content );
158 } );
159
160 } );