Merge "Parser: Add Title type hints"
[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, name, bot;
14
15 before( async function () {
16 // disable VisualEditor welcome dialog
17 BlankPage.open();
18 browser.setLocalStorage( 've-beta-welcome-dialog', '1' );
19 bot = await Api.bot();
20 } );
21
22 beforeEach( function () {
23 browser.deleteAllCookies();
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.isDisplayed(), 'editor is still present' );
34 assert( !EditPage.conflictingContent.isDisplayed(), 'no edit conflict happened' );
35 } );
36
37 it( 'should be creatable', function () {
38 // create
39 EditPage.edit( name, content );
40
41 // check
42 assert.strictEqual( EditPage.heading.getText(), name );
43 assert.strictEqual( EditPage.displayedContent.getText(), content );
44 } );
45
46 it( 'should be re-creatable', function () {
47 const initialContent = Util.getTestString( 'initialContent-' );
48
49 // create and delete
50 browser.call( async () => {
51 await bot.edit( name, initialContent, 'create for delete' );
52 await bot.delete( name, 'delete prior to recreate' );
53 } );
54
55 // re-create
56 EditPage.edit( name, content );
57
58 // check
59 assert.strictEqual( EditPage.heading.getText(), name );
60 assert.strictEqual( EditPage.displayedContent.getText(), content );
61 } );
62
63 it( 'should be editable @daily', function () {
64 // create
65 browser.call( async () => {
66 await bot.edit( name, content, 'create for edit' );
67 } );
68
69 // edit
70 const editContent = Util.getTestString( 'editContent-' );
71 EditPage.edit( name, editContent );
72
73 // check
74 assert.strictEqual( EditPage.heading.getText(), name );
75 assert( EditPage.displayedContent.getText().includes( editContent ) );
76 } );
77
78 it( 'should have history @daily', function () {
79 // create
80 browser.call( async () => {
81 await bot.edit( name, content, `created with "${content}"` );
82 } );
83
84 // check
85 HistoryPage.open( name );
86 assert.strictEqual( HistoryPage.comment.getText(), `created with "${content}"` );
87 } );
88
89 it( 'should be deletable', function () {
90 // create
91 browser.call( async () => {
92 await bot.edit( name, content, 'create for delete' );
93 } );
94
95 // login
96 UserLoginPage.loginAdmin();
97
98 // delete
99 DeletePage.delete( name, 'delete reason' );
100
101 // check
102 assert.strictEqual(
103 DeletePage.displayedContent.getText(),
104 '"' + name + '" has been deleted. See deletion log for a record of recent deletions.\nReturn to Main Page.'
105 );
106 } );
107
108 it( 'should be restorable', function () {
109 // create and delete
110 browser.call( async () => {
111 await bot.edit( name, content, 'create for delete' );
112 await bot.delete( name, 'delete for restore' );
113 } );
114
115 // login
116 UserLoginPage.loginAdmin();
117
118 // restore
119 RestorePage.restore( name, 'restore reason' );
120
121 // check
122 assert.strictEqual( RestorePage.displayedContent.getText(), name + ' has been restored\nConsult the deletion log for a record of recent deletions and restorations.' );
123 } );
124
125 it( 'should be undoable', function () {
126 let previousRev, undoRev;
127 browser.call( async () => {
128 // create
129 await bot.edit( name, content, 'create to edit and undo' );
130
131 // edit
132 const response = await bot.edit( name, Util.getTestString( 'editContent-' ) );
133 previousRev = response.edit.oldrevid;
134 undoRev = response.edit.newrevid;
135 } );
136
137 UndoPage.undo( name, previousRev, undoRev );
138
139 assert.strictEqual( EditPage.displayedContent.getText(), content );
140 } );
141
142 } );