479 lines
18 KiB
PHP
479 lines
18 KiB
PHP
<?php
|
|
|
|
// must be run within Dokuwiki
|
|
if (!defined('DOKU_INC')) die();
|
|
|
|
/**
|
|
* Test cases for namespace move functionality of the move plugin
|
|
*
|
|
* @group plugin_move
|
|
* @group plugins
|
|
*/
|
|
class plugin_move_namespace_move_test extends DokuWikiTest {
|
|
|
|
public function setUp(): void {
|
|
$this->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,"<!-- wikipage start -->") + 23);
|
|
$actual_response = substr($actual_response,strpos($actual_response, 'doku.php'));
|
|
$actual_response = substr($actual_response,0,strpos($actual_response,"<!-- wikipage stop -->"));
|
|
$actual_response = trim($actual_response);
|
|
$actual_response = rtrim($actual_response,"</p>");
|
|
$actual_response = trim($actual_response);
|
|
|
|
$expected_response = 'doku.php?id=foo:testns:start" class="wikilink1" title="foo:testns:start">testns</a> <a href="/./doku.php?id=testns:test_page17" class="wikilink1" title="testns:test_page17">test_page17</a>';
|
|
$this->assertSame($expected_response,$actual_response); // todo: this assert fails occaisionally, but not reproduciably. It then has the following oputput: <a href="/./doku.php?id=testns:start" class="wikilink2" title="testns:start" rel="nofollow">testns</a> <a href="/./doku.php?id=testns:test_page17" class="wikilink1" title="testns:test_page17">test_page17</a>
|
|
|
|
$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));
|
|
|
|
}
|
|
|
|
}
|