1<?php 2/** 3 * Acceptance tests for Conflict Merger Plugin for Dokuwiki 4 * 5 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 6 * @author Daniel Calviño Sánchez <danxuliu@gmail.com> 7 */ 8 9//TODO apply PageObjects pattern (http://code.google.com/p/webdriver/wiki/PageObjects)? 10class Acceptance_test extends WebTestCase { 11 12 //Button labels 13 var $editButton = 'Edit this page'; 14 var $saveButton = 'Save'; 15 var $cancelButton = 'Cancel'; 16 17 //Text area and hidden input name 18 var $textField = 'wikitext'; 19 20 //URL to the page used in the tests, including trailing & to add further parameters 21 var $basePageName; 22 23 //Browser that acts as a second user editing the pages 24 var $secondUser; 25 26 function setUp() { 27 $this->basePageName = WEB_TEST_URL . '/doku.php?id=testConflictMerger&'; 28 29 $this->secondUser = &$this->createBrowser(); 30 31 $this->get($this->basePageName . 'do=edit'); 32 $this->setField($this->textField, "First line\n\nSecond line\n\nThird line"); 33 $this->click($this->saveButton); 34 } 35 36 function tearDown() { 37 unset($this->secondUser); 38 39 $this->get($this->basePageName . 'do=edit'); 40 $this->setField($this->textField, ''); 41 $this->click($this->saveButton); 42 } 43 44 function assertViewPage($text) { 45 //assertText ignores new lines 46 $text = preg_replace("/\n+/", ' ', $text); 47 48 $this->assertNoText('merged'); 49 $this->assertText($text); 50 } 51 52 function assertRightMergePage($textField) { 53 //assertFieldByName seems to use \r\n line ending 54 $textField = str_replace("\n", "\r\n", $textField); 55 56 $this->assertText('could be merged'); 57 $this->assertFieldByName($this->textField, $textField); 58 59 //Diff table isn't checked as it is too complex 60 } 61 62 function assertWrongMergePage($textField) { 63 //assertFieldByName seems to use \r\n line ending 64 $textField = str_replace("\n", "\r\n", $textField); 65 66 $this->assertText('couldn\'t be merged'); 67 $this->assertFieldByName($this->textField, $textField); 68 69 //Diff table isn't checked as it is too complex 70 } 71 72 function assertDiffEditPage($textField) { 73 //assertFieldByName seems to use \r\n line ending 74 $textField = str_replace("\n", "\r\n", $textField); 75 76 $this->assertText('Edit the page and hit Save'); 77 $this->assertFieldByName($this->textField, $textField); 78 } 79 80 function testEditCancel() { 81 $this->get($this->basePageName); 82 $this->click($this->editButton); 83 84 $this->setField($this->textField, 'Some text'); 85 86 $this->assertTrue($this->click($this->cancelButton)); 87 88 $this->assertViewPage("First line\n\nSecond line\n\nThird line"); 89 } 90 91 function testEditSave() { 92 $this->get($this->basePageName); 93 $this->click($this->editButton); 94 95 $this->setField($this->textField, 'Some text'); 96 97 sleep(1); 98 $this->assertTrue($this->click($this->saveButton)); 99 100 $this->assertViewPage('Some text'); 101 } 102 103 function testEditSaveMergeable() { 104 $this->get($this->basePageName); 105 $this->click($this->editButton); 106 107 $this->setField($this->textField, "First line modified by user 1\n\nSecond line\n\nThird line"); 108 109 $this->secondUser->get($this->basePageName . 'do=edit'); 110 $this->secondUser->setField($this->textField, "First line\n\nSecond line\n\nThird line modified by user 2"); 111 sleep(1); 112 $this->secondUser->click($this->saveButton); 113 114 $this->assertTrue($this->click($this->saveButton)); 115 116 $this->assertRightMergePage("First line modified by user 1\n\nSecond line\n\nThird line modified by user 2"); 117 } 118 119 function testEditSaveNotMergeable() { 120 $this->get($this->basePageName); 121 $this->click($this->editButton); 122 123 $this->setField($this->textField, "First line modified by user 1\n\nSecond line\n\nThird line"); 124 125 $this->secondUser->get($this->basePageName . 'do=edit'); 126 $this->secondUser->setField($this->textField, "First line modified by user 2\n\nSecond line\n\nThird line modified by user 2"); 127 sleep(1); 128 $this->secondUser->click($this->saveButton); 129 130 $this->assertTrue($this->click($this->saveButton)); 131 132 $this->assertWrongMergePage("First line modified by user 1\n\nSecond line\n\nThird line"); 133 } 134 135 function prepareRightMergePage() { 136 $this->get($this->basePageName); 137 $this->click($this->editButton); 138 139 $this->setField($this->textField, "First line modified by user 1\n\nSecond line\n\nThird line"); 140 141 $this->secondUser->get($this->basePageName . 'do=edit'); 142 $this->secondUser->setField($this->textField, "First line\n\nSecond line\n\nThird line modified by user 2"); 143 sleep(1); 144 $this->secondUser->click($this->saveButton); 145 146 $this->click($this->saveButton); 147 } 148 149 function testRightMergeCancel() { 150 $this->prepareRightMergePage(); 151 152 $this->assertTrue($this->click($this->cancelButton)); 153 154 $this->assertViewPage("First line\n\nSecond line\n\nThird line modified by user 2"); 155 } 156 157 function testRightMergeEdit() { 158 $this->prepareRightMergePage(); 159 160 $this->assertTrue($this->click($this->editButton)); 161 162 $this->assertDiffEditPage("First line modified by user 1\n\nSecond line\n\nThird line modified by user 2"); 163 } 164 165 function testRightMergeEditNewSaveMergeable() { 166 $this->prepareRightMergePage(); 167 168 $this->click($this->editButton); 169 170 $this->setField($this->textField, "First line modified by user 1 again\n\nSecond line\n\nThird line modified by user 2"); 171 sleep(1); 172 $this->assertTrue($this->click($this->saveButton)); 173 174 $this->assertViewPage("First line modified by user 1 again\n\nSecond line\n\nThird line modified by user 2"); 175 } 176 177 function testRightMergeEditNewSaveNotMergeable() { 178 $this->prepareRightMergePage(); 179 180 $this->click($this->editButton); 181 182 $this->setField($this->textField, "First line modified by user 1\n\nSecond line\n\nThird line modified by user 1"); 183 sleep(1); 184 $this->assertTrue($this->click($this->saveButton)); 185 186 $this->assertViewPage("First line modified by user 1\n\nSecond line\n\nThird line modified by user 1"); 187 } 188 189 function testRightMergeEditMergeable() { 190 $this->prepareRightMergePage(); 191 192 $this->secondUser->get($this->basePageName . 'do=edit'); 193 $this->secondUser->setField($this->textField, "First line\n\nSecond line modified by user 3\n\nThird line"); 194 sleep(1); 195 $this->secondUser->click($this->saveButton); 196 197 $this->assertTrue($this->click($this->editButton)); 198 199 $this->assertRightMergePage("First line modified by user 1\n\nSecond line modified by user 3\n\nThird line"); 200 } 201 202 function testRightMergeEditNotMergeable() { 203 $this->prepareRightMergePage(); 204 205 $this->secondUser->get($this->basePageName . 'do=edit'); 206 $this->secondUser->setField($this->textField, "First line modified by user 3\n\nSecond line\n\nThird line"); 207 sleep(1); 208 $this->secondUser->click($this->saveButton); 209 210 $this->assertTrue($this->click($this->editButton)); 211 212 $this->assertWrongMergePage("First line modified by user 1\n\nSecond line\n\nThird line modified by user 2"); 213 } 214 215 function testRightMergeSave() { 216 $this->prepareRightMergePage(); 217 218 sleep(1); 219 $this->assertTrue($this->click($this->saveButton)); 220 221 $this->assertViewPage("First line modified by user 1\n\nSecond line\n\nThird line modified by user 2"); 222 } 223 224 function testRightMergeSaveMergeable() { 225 $this->prepareRightMergePage(); 226 227 $this->secondUser->get($this->basePageName . 'do=edit'); 228 $this->secondUser->setField($this->textField, "First line\n\nSecond line\n\nThird line modified by user 3"); 229 sleep(1); 230 $this->secondUser->click($this->saveButton); 231 232 $this->assertTrue($this->click($this->saveButton)); 233 234 $this->assertRightMergePage("First line modified by user 1\n\nSecond line\n\nThird line modified by user 3"); 235 } 236 237 function testRightMergeSaveNotMergeable() { 238 $this->prepareRightMergePage(); 239 240 $this->secondUser->get($this->basePageName . 'do=edit'); 241 $this->secondUser->setField($this->textField, "First line modified by user 3\n\nSecond line\n\nThird line modified by user 2"); 242 sleep(1); 243 $this->secondUser->click($this->saveButton); 244 245 $this->assertTrue($this->click($this->saveButton)); 246 247 $this->assertWrongMergePage("First line modified by user 1\n\nSecond line\n\nThird line modified by user 2"); 248 } 249 250 function prepareWrongMergePage() { 251 $this->get($this->basePageName); 252 $this->click($this->editButton); 253 254 $this->setField($this->textField, "First line modified by user 1\n\nSecond line\n\nThird line"); 255 256 $this->secondUser->get($this->basePageName . 'do=edit'); 257 $this->secondUser->setField($this->textField, "First line modified by user 2\n\nSecond line\n\nThird line"); 258 sleep(1); 259 $this->secondUser->click($this->saveButton); 260 261 $this->click($this->saveButton); 262 } 263 264 function testWrongMergeCancel() { 265 $this->prepareWrongMergePage(); 266 267 $this->assertTrue($this->click($this->cancelButton)); 268 269 $this->assertViewPage("First line modified by user 2\n\nSecond line\n\nThird line"); 270 } 271 272 function testWrongMergeEdit() { 273 $this->prepareWrongMergePage(); 274 275 $this->assertTrue($this->click($this->editButton)); 276 277 $this->assertDiffEditPage("First line modified by user 1\n\nSecond line\n\nThird line"); 278 } 279 280 function testWrongMergeEditNewSaveMergeable() { 281 $this->prepareWrongMergePage(); 282 283 $this->click($this->editButton); 284 285 $this->setField($this->textField, "First line modified by user 2\n\nSecond line\n\nThird line modified by user 1"); 286 sleep(1); 287 $this->assertTrue($this->click($this->saveButton)); 288 289 $this->assertRightMergePage("First line modified by user 2\n\nSecond line\n\nThird line modified by user 1"); 290 } 291 292 function testWrongMergeEditNewSaveNotMergeable() { 293 $this->prepareWrongMergePage(); 294 295 $this->click($this->editButton); 296 297 $this->setField($this->textField, "First line modified by user 1\n\nSecond line\n\nThird line modified by user 1"); 298 sleep(1); 299 $this->assertTrue($this->click($this->saveButton)); 300 301 $this->assertWrongMergePage("First line modified by user 1\n\nSecond line\n\nThird line modified by user 1"); 302 } 303 304 function testWrongMergeEditMergeable() { 305 $this->prepareWrongMergePage(); 306 307 $this->secondUser->get($this->basePageName . 'do=edit'); 308 $this->secondUser->setField($this->textField, "First line\n\nSecond line modified by user 3\n\nThird line"); 309 sleep(1); 310 $this->secondUser->click($this->saveButton); 311 312 $this->assertTrue($this->click($this->editButton)); 313 314 $this->assertRightMergePage("First line modified by user 1\n\nSecond line modified by user 3\n\nThird line"); 315 } 316 317 function testWrongMergeEditNotMergeable() { 318 $this->prepareWrongMergePage(); 319 320 $this->secondUser->get($this->basePageName . 'do=edit'); 321 $this->secondUser->setField($this->textField, "First line modified by user 3\n\nSecond line\n\nThird line"); 322 sleep(1); 323 $this->secondUser->click($this->saveButton); 324 325 $this->assertTrue($this->click($this->editButton)); 326 327 $this->assertWrongMergePage("First line modified by user 1\n\nSecond line\n\nThird line"); 328 } 329 330 function testWrongMergeSave() { 331 $this->prepareWrongMergePage(); 332 333 sleep(1); 334 $this->assertTrue($this->click($this->saveButton)); 335 336 $this->assertViewPage("First line modified by user 1\n\nSecond line\n\nThird line"); 337 } 338 339 function testWrongMergeSaveMergeable() { 340 $this->prepareWrongMergePage(); 341 342 $this->secondUser->get($this->basePageName . 'do=edit'); 343 $this->secondUser->setField($this->textField, "First line\n\nSecond line\n\nThird line modified by user 3"); 344 sleep(1); 345 $this->secondUser->click($this->saveButton); 346 347 $this->assertTrue($this->click($this->saveButton)); 348 349 $this->assertRightMergePage("First line modified by user 1\n\nSecond line\n\nThird line modified by user 3"); 350 } 351 352 function testWrongMergeSaveNotMergeable() { 353 $this->prepareWrongMergePage(); 354 355 $this->secondUser->get($this->basePageName . 'do=edit'); 356 $this->secondUser->setField($this->textField, "First line modified by user 3\n\nSecond line\n\nThird line modified by user 3"); 357 sleep(1); 358 $this->secondUser->click($this->saveButton); 359 360 $this->assertTrue($this->click($this->saveButton)); 361 362 $this->assertWrongMergePage("First line modified by user 1\n\nSecond line\n\nThird line"); 363 } 364 365 //FIXME Tests for failed merges when diff3 isn't found, how to do it? 366} 367 368?> 369