pluginsEnabled[] = 'move'; parent::setUp(); } /** * @coversNothing */ public function tearDown(): void { /** @var helper_plugin_move_plan $plan */ $plan = plugin_load('helper', 'move_plan'); $plan->abort(); io_rmdir(DOKU_TMP_DATA."pages/newns",true); io_rmdir(DOKU_TMP_DATA."media/newns",true); io_rmdir(DOKU_TMP_DATA."meta/newns",true); parent::tearDown(); } /** * This is an integration test, which checks the correct working of an entire namespace move. * Hence it is not an unittest, hence it @coversNothing * * @group slow */ public function test_move_wiki_namespace() { global $AUTH_ACL; $AUTH_ACL[] = "wiki:*\t@ALL\t16"; idx_addPage('wiki:dokuwiki'); idx_addPage('wiki:syntax'); /** @var helper_plugin_move_plan $plan */ $plan = plugin_load('helper', 'move_plan'); $this->assertFalse($plan->inProgress()); $plan->addPageNamespaceMove('wiki', 'foo'); $plan->addMediaNamespaceMove('wiki', 'foo'); $plan->commit(); $this->assertSame(1, $plan->nextStep(),'pages'); $this->assertSame(1, $plan->nextStep(),'media'); $this->assertSame(1, $plan->nextStep(),'missing'); $this->assertSame(1, $plan->nextStep(),'namespace'); $this->assertSame(1, $plan->nextStep(),'autorewrite'); $this->assertSame(0, $plan->nextStep(),'done'); $this->assertFileExists(wikiFN('foo:dokuwiki')); $this->assertFileNotExists(wikiFN('wiki:syntax')); $this->assertFileExists(mediaFN('foo:dokuwiki-128.png')); } /** * This is an integration test, which checks the correct working of an entire namespace move. * Hence it is not an unittest, hence it @coversNothing * * @group slow */ public function test_move_missing() { saveWikiText('oldspace:page', '[[missing]]', 'setup'); idx_addPage('oldspace:page'); /** @var helper_plugin_move_plan $plan */ $plan = plugin_load('helper', 'move_plan'); $this->assertFalse($plan->inProgress()); $plan->addPageNamespaceMove('oldspace', 'newspace'); $plan->commit(); $this->assertSame(1, $plan->nextStep(),'page'); $this->assertSame(1, $plan->nextStep(),'missing'); $this->assertSame(1, $plan->nextStep(),'namespace'); $this->assertSame(1, $plan->nextStep(),'autorewrite'); $this->assertSame(0, $plan->nextStep(),'done'); $this->assertFileExists(wikiFN('newspace:page')); $this->assertFileNotExists(wikiFN('oldspace:page')); $this->assertEquals('[[missing]]', rawWiki('newspace:page')); } /** * @covers helper_plugin_move_plan::findAffectedPages * @uses Doku_Indexer */ public function test_move_affected() { saveWikiText('oldaffectedspace:page', '[[missing]]', 'setup'); idx_addPage('oldaffectedspace:page'); /** @var helper_plugin_move_plan $plan */ $plan = plugin_load('helper', 'move_plan'); $this->assertFalse($plan->inProgress()); $plan->addPageNamespaceMove('oldaffectedspace', 'newaffectedspace'); $plan->commit(); $affected_file = file(TMP_DIR . '/data/meta/__move_affected'); $this->assertSame('newaffectedspace:page',trim($affected_file[0])); } /** * This is an integration test, which checks the correct working of an entire namespace move. * Hence it is not an unittest, hence it @coversNothing * * @group slow */ function test_move_large_ns(){ $this->markTestSkipped( 'This test randomly fails with the page "testns:start" being moved, but "start" not being rewritten in the request.' ); global $conf; $test = '[[testns:start]] [[testns:test_page17]]'; $summary = 'testsetup'; saveWikiText(':start', $test, $summary); idx_addPage(':start'); saveWikiText('testns:start', $test, $summary); idx_addPage('testns:start'); saveWikiText('testns:test_page1', $test, $summary); idx_addPage('testns:test_page1'); saveWikiText('testns:test_page2', $test, $summary); idx_addPage('testns:test_page2'); saveWikiText('testns:test_page3', $test, $summary); idx_addPage('testns:test_page3'); saveWikiText('testns:test_page4', $test, $summary); idx_addPage('testns:test_page4'); saveWikiText('testns:test_page5', $test, $summary); idx_addPage('testns:test_page5'); saveWikiText('testns:test_page6', $test, $summary); idx_addPage('testns:test_page6'); saveWikiText('testns:test_page7', $test, $summary); idx_addPage('testns:test_page7'); saveWikiText('testns:test_page8', $test, $summary); idx_addPage('testns:test_page8'); saveWikiText('testns:test_page9', $test, $summary); idx_addPage('testns:test_page9'); saveWikiText('testns:test_page10', $test, $summary); idx_addPage('testns:test_page10'); saveWikiText('testns:test_page11', $test, $summary); idx_addPage('testns:test_page11'); saveWikiText('testns:test_page12', $test, $summary); idx_addPage('testns:test_page12'); saveWikiText('testns:test_page13', $test, $summary); idx_addPage('testns:test_page13'); saveWikiText('testns:test_page14', $test, $summary); idx_addPage('testns:test_page14'); saveWikiText('testns:test_page15', $test, $summary); idx_addPage('testns:test_page15'); saveWikiText('testns:test_page16', $test, $summary); idx_addPage('testns:test_page16'); saveWikiText('testns:test_page17', $test, $summary); idx_addPage('testns:test_page17'); saveWikiText('testns:test_page18', $test, $summary); idx_addPage('testns:test_page18'); saveWikiText('testns:test_page19', $test, $summary); idx_addPage('testns:test_page19'); $conf['plugin']['move']['autorewrite'] = 0; /** @var helper_plugin_move_plan $plan */ $plan = plugin_load('helper', 'move_plan'); $this->assertFalse($plan->inProgress()); $plan->addPageNamespaceMove('testns', 'foo:testns'); $plan->commit(); global $conf; $lockfile = $conf['lockdir'] . 'move.lock'; $this->assertSame(10, $plan->nextStep(),"After processing first chunk of pages, 10 steps should be left"); $request = new TestRequest(); $response = $request->get(); $actual_response = $response->getContent(); //clean away clutter $actual_response = substr($actual_response,strpos($actual_response,"") + 23); $actual_response = substr($actual_response,strpos($actual_response, 'doku.php')); $actual_response = substr($actual_response,0,strpos($actual_response,"")); $actual_response = trim($actual_response); $actual_response = rtrim($actual_response,"

"); $actual_response = trim($actual_response); $expected_response = 'doku.php?id=foo:testns:start" class="wikilink1" title="foo:testns:start">testns test_page17'; $this->assertSame($expected_response,$actual_response); // todo: this assert fails occaisionally, but not reproduciably. It then has the following oputput: testns test_page17 $expected_file_contents = '[[testns:start]] [[testns:test_page17]]'; $start_file = file(TMP_DIR . '/data/pages/start.txt'); $actual_file_contents = $start_file[0]; $this->assertSame($expected_file_contents,$actual_file_contents); /** @var helper_plugin_move_rewrite $rewrite */ $rewrite = plugin_load('helper', 'move_rewrite'); $expected_move_meta = array('origin'=> 'testns:start', 'pages' => array(array('testns:start','foo:testns:start')),'media' => array()); $actual_move_media = $rewrite->getMoveMeta('foo:testns:start'); $this->assertSame($expected_move_meta,$actual_move_media); $this->assertFileExists($lockfile); } /** * This is an integration test, which checks the correct working of an entire namespace move. * Hence it is not an unittest, hence it @coversNothing * * @group slow */ public function test_move_small_namespace_pages() { global $AUTH_ACL; $AUTH_ACL[] = "oldns:*\t@ALL\t16"; $AUTH_ACL[] = "newns:*\t@ALL\t16"; saveWikiText('start', '[[oldns:start]] [[oldns:page]] [[oldns:missing]]', 'setup'); idx_addPage('start'); saveWikiText('oldns:start', '[[oldns:start]] [[oldns:page]] [[oldns:missing]] [[missing]] [[page]]', 'setup'); idx_addPage('oldns:start'); saveWikiText('oldns:page', '[[oldns:start]] [[oldns:page]] [[oldns:missing]] [[missing]] [[start]]', 'setup'); idx_addPage('oldns:page'); /** @var helper_plugin_move_plan $plan */ $plan = plugin_load('helper', 'move_plan'); $this->assertFalse($plan->inProgress()); $plan->addPageNamespaceMove('oldns', 'newns'); $plan->commit(); $this->assertSame(1, $plan->nextStep(), 'pages'); $this->assertSame(1, $plan->nextStep(), 'missing'); $this->assertSame(1, $plan->nextStep(), 'namespace'); $this->assertSame(1, $plan->nextStep(), 'autorewrite'); $this->assertSame(0, $plan->nextStep(), 'done'); $this->assertFileExists(wikiFN('newns:start')); $this->assertFileExists(wikiFN('newns:page')); $this->assertFileNotExists(wikiFN('oldns:start')); $this->assertFileNotExists(wikiFN('oldns:page')); $this->assertSame('[[newns:start]] [[newns:page]] [[newns:missing]] [[missing]] [[page]]',rawWiki('newns:start')); $this->assertSame('[[newns:start]] [[newns:page]] [[newns:missing]] [[missing]] [[start]]',rawWiki('newns:page')); $this->assertSame('[[newns:start]] [[newns:page]] [[newns:missing]]',rawWiki('start')); } /** * This is an integration test, which checks the correct working of an entire namespace move. * Hence it is not an unittest, hence it @coversNothing * * @group slow */ public function test_move_small_namespace_media() { global $AUTH_ACL; $AUTH_ACL[] = "oldns:*\t@ALL\t16"; $AUTH_ACL[] = "newns:*\t@ALL\t16"; $filepath = DOKU_TMP_DATA.'media/oldns/oldnsimage.png'; io_makeFileDir($filepath); io_saveFile($filepath,''); saveWikiText('start', '{{oldns:oldnsimage.png}} {{oldns:oldnsimage_missing.png}} {{image_missing.png}}', 'setup'); idx_addPage('start'); /** @var helper_plugin_move_plan $plan */ $plan = plugin_load('helper', 'move_plan'); $this->assertFalse($plan->inProgress()); $plan->addMediaNamespaceMove('oldns', 'newns'); $plan->commit(); $this->assertSame(1, $plan->nextStep(), 'media'); $this->assertSame(1, $plan->nextStep(), 'missing_media'); $this->assertSame(1, $plan->nextStep(), 'autorewrite'); $this->assertSame(0, $plan->nextStep(), 'done'); $this->assertFileExists(mediaFN('newns:oldnsimage.png')); $this->assertFileNotExists(mediaFN('oldns:oldnsimage.png')); $this->assertSame('{{newns:oldnsimage.png}} {{newns:oldnsimage_missing.png}} {{image_missing.png}}',rawWiki('start')); } /** * This is an integration test, which checks the correct working of an entire namespace move. * Hence it is not an unittest, hence it @coversNothing * * @group slow */ public function test_move_small_namespace_media_affected() { global $AUTH_ACL; $AUTH_ACL[] = "oldns:*\t@ALL\t16"; $AUTH_ACL[] = "newns:*\t@ALL\t16"; $filepath = DOKU_TMP_DATA.'media/oldns/oldnsimage.png'; io_makeFileDir($filepath); io_saveFile($filepath,''); saveWikiText('oldns:start', '{{:oldns:oldnsimage.png}} {{oldns:oldnsimage_missing.png}} {{oldnsimage_missing.png}} {{oldnsimage.png}}', 'setup'); idx_addPage('oldns:start'); /** @var helper_plugin_move_plan $plan */ $plan = plugin_load('helper', 'move_plan'); $this->assertFalse($plan->inProgress()); $plan->addMediaNamespaceMove('oldns', 'newns'); $plan->commit(); $this->assertSame(1, $plan->nextStep(), 'media'); $this->assertSame(1, $plan->nextStep(), 'missing_media'); $this->assertSame(1, $plan->nextStep(), 'autorewrite'); $this->assertSame(0, $plan->nextStep(), 'done'); $this->assertFileExists(mediaFN('newns:oldnsimage.png')); $this->assertFileNotExists(mediaFN('oldns:oldnsimage.png')); $this->assertSame('{{newns:oldnsimage.png}} {{newns:oldnsimage_missing.png}} {{newns:oldnsimage_missing.png}} {{newns:oldnsimage.png}}',rawWiki('oldns:start')); } /** * This is an integration test, which checks the correct working of an entire namespace move. * Hence it is not an unittest, hence it @coversNothing * * @group slow */ public function test_move_small_namespace_combi() { global $AUTH_ACL; $AUTH_ACL[] = "oldns:*\t@ALL\t16"; $AUTH_ACL[] = "newns:*\t@ALL\t16"; $filepath = DOKU_TMP_DATA.'media/oldns/oldnsimage.png'; io_makeFileDir($filepath); io_saveFile($filepath,''); saveWikiText('start', "[[oldns:start]] [[oldns:page]] [[oldns:missing]]\n{{oldns:oldnsimage.png}} {{oldns:oldnsimage_missing.png}} {{oldnsimage_missing.png}}", 'setup'); idx_addPage('start'); saveWikiText('oldns:start', '[[oldns:start]] [[oldns:page]] [[oldns:missing]] [[missing]] [[page]]', 'setup'); idx_addPage('oldns:start'); saveWikiText('oldns:page', '[[oldns:start]] [[oldns:page]] [[oldns:missing]] [[missing]] [[start]]', 'setup'); idx_addPage('oldns:page'); /** @var helper_plugin_move_plan $plan */ $plan = plugin_load('helper', 'move_plan'); $this->assertFalse($plan->inProgress()); $plan->addMediaNamespaceMove('oldns', 'newns'); $plan->addPageNamespaceMove('oldns', 'newns'); $plan->commit(); $this->assertSame(1, $plan->nextStep(), 'pages'); $this->assertSame(1, $plan->nextStep(), 'media'); $this->assertSame(1, $plan->nextStep(), 'missing'); $this->assertSame(1, $plan->nextStep(), 'missing_media'); $this->assertSame(1, $plan->nextStep(), 'namespaces'); $this->assertSame(1, $plan->nextStep(), 'autorewrite'); $this->assertSame(0, $plan->nextStep(), 'done'); $this->assertFileExists(mediaFN('newns:oldnsimage.png')); $this->assertFileNotExists(mediaFN('oldns:oldnsimage.png')); $this->assertSame("[[newns:start]] [[newns:page]] [[newns:missing]]\n{{newns:oldnsimage.png}} {{newns:oldnsimage_missing.png}} {{oldnsimage_missing.png}}",rawWiki('start')); } /** * This is an integration test, which checks the correct working of an entire namespace move. * Hence it is not an unittest, hence it @coversNothing * * @group slow */ public function test_move_small_namespace_subscription_ns() { global $AUTH_ACL; $AUTH_ACL[] = "subns:*\t@ALL\t16"; $AUTH_ACL[] = "newns:*\t@ALL\t16"; saveWikiText('subns:start', 'Lorem Ipsum', 'setup'); idx_addPage('subns:start'); $oldfilepath = DOKU_TMP_DATA.'meta/subns/.mlist'; $subscription = 'doe every 1427984341'; io_makeFileDir($oldfilepath); io_saveFile($oldfilepath,$subscription); $newfilepath = DOKU_TMP_DATA.'meta/newns/.mlist'; /** @var helper_plugin_move_plan $plan */ $plan = plugin_load('helper', 'move_plan'); $this->assertFalse($plan->inProgress()); $plan->addPageNamespaceMove('subns', 'newns'); $plan->commit(); $this->assertSame(1, $plan->nextStep(), 'pages'); $this->assertSame(1, $plan->nextStep(), 'namespace'); $this->assertSame(0, $plan->nextStep(), 'done'); $this->assertFileExists(wikiFN('newns:start')); $this->assertFileExists($newfilepath); $this->assertFileNotExists(wikiFN('subns:start')); $this->assertFileNotExists($oldfilepath); $this->assertSame($subscription,file_get_contents($newfilepath)); } /** * This is an integration test, which checks the correct working of an entire namespace move. * Hence it is not an unittest, hence it @coversNothing * * @group slow */ public function test_move_small_namespace_subscription_page() { global $AUTH_ACL; $AUTH_ACL[] = "subns:*\t@ALL\t16"; $AUTH_ACL[] = "newns:*\t@ALL\t16"; saveWikiText('subns:start', 'Lorem Ipsum', 'setup'); idx_addPage('subns:start'); $oldfilepath = DOKU_TMP_DATA.'meta/subns/start.mlist'; $subscription = 'doe every 1427984341'; io_makeFileDir($oldfilepath); io_saveFile($oldfilepath,$subscription); $newfilepath = DOKU_TMP_DATA.'meta/newns/start.mlist'; /** @var helper_plugin_move_plan $plan */ $plan = plugin_load('helper', 'move_plan'); $this->assertFalse($plan->inProgress()); $plan->addPageNamespaceMove('subns', 'newns'); $plan->commit(); $this->assertSame(1, $plan->nextStep(), 'pages'); $this->assertSame(1, $plan->nextStep(), 'namespace'); $this->assertSame(0, $plan->nextStep(), 'done'); $this->assertFileExists(wikiFN('newns:start')); $this->assertFileExists($newfilepath); $this->assertFileNotExists(wikiFN('subns:start')); $this->assertFileNotExists($oldfilepath); $this->assertSame($subscription,file_get_contents($newfilepath)); } }