xref: /dokuwiki/_test/tests/inc/indexer_rename.test.php (revision 1c33cec37215d0c964cf961bdbc49ae7db3657e6)
1b21a57bfSMichael Hamann<?php
2b21a57bfSMichael Hamann/**
3b21a57bfSMichael Hamann * Test cases for the Doku_Indexer::renamePage and Doku_Indexer::renameMetaValue methods
4b21a57bfSMichael Hamann */
5b21a57bfSMichael Hamannclass indexer_rename_test extends DokuWikiTest {
66225b270SMichael Große    /** @var \dokuwiki\Search\Indexer $indexer */
7b21a57bfSMichael Hamann    private $indexer;
8b21a57bfSMichael Hamann
9b21a57bfSMichael Hamann    private $old_id = 'old_testid';
10b21a57bfSMichael Hamann
11*1c33cec3SAndreas Gohr    function setUp() : void {
12b21a57bfSMichael Hamann        parent::setUp();
13b21a57bfSMichael Hamann        $this->indexer = idx_get_indexer();
14b21a57bfSMichael Hamann        $this->indexer->clear();
15b21a57bfSMichael Hamann
16b21a57bfSMichael Hamann        saveWikiText($this->old_id, 'Old test content', 'Created old test page for indexer rename test');
17b21a57bfSMichael Hamann        idx_addPage($this->old_id);
18b21a57bfSMichael Hamann    }
19b21a57bfSMichael Hamann
20b21a57bfSMichael Hamann    function test_rename_to_new_page() {
21b21a57bfSMichael Hamann        $newid = 'new_id_1';
22b21a57bfSMichael Hamann
23b21a57bfSMichael Hamann        $oldpid = $this->indexer->getPID($this->old_id);
24b21a57bfSMichael Hamann
25b1cfdc5fSMichael Hamann        $this->assertTrue($this->indexer->renamePage($this->old_id, $newid), 'Renaming the page to a new id failed');
26b21a57bfSMichael Hamann        io_rename(wikiFN($this->old_id), wikiFN($newid));
27b21a57bfSMichael Hamann
28b21a57bfSMichael Hamann        $this->assertNotEquals($this->indexer->getPID($this->old_id), $oldpid, 'PID for the old page unchanged after rename.');
29b21a57bfSMichael Hamann        $this->assertEquals($this->indexer->getPID($newid), $oldpid, 'New page has not the old pid.');
30b21a57bfSMichael Hamann        $query = array('old');
31b21a57bfSMichael Hamann        $this->assertEquals(array('old' => array($newid => 1)), $this->indexer->lookup($query), '"Old" doesn\'t find the new page');
32b21a57bfSMichael Hamann    }
33b21a57bfSMichael Hamann
34b21a57bfSMichael Hamann    function test_rename_to_existing_page() {
35b21a57bfSMichael Hamann        $newid = 'existing_page';
36b21a57bfSMichael Hamann        saveWikiText($newid, 'Existing content', 'Created page for move_to_existing_page');
37b21a57bfSMichael Hamann        idx_addPage($newid);
38b21a57bfSMichael Hamann
39b21a57bfSMichael Hamann        $oldpid = $this->indexer->getPID($this->old_id);
40b21a57bfSMichael Hamann        $existingpid = $this->indexer->getPID($newid);
41b21a57bfSMichael Hamann
42b1cfdc5fSMichael Hamann        $this->assertTrue($this->indexer->renamePage($this->old_id, $newid), 'Renaming the page to an existing id failed');
43b21a57bfSMichael Hamann
44b21a57bfSMichael Hamann        $this->assertNotEquals($this->indexer->getPID($this->old_id), $oldpid, 'PID for old page unchanged after rename.');
45b21a57bfSMichael Hamann        $this->assertNotEquals($this->indexer->getPID($this->old_id), $existingpid, 'PID for old page is now PID of the existing page.');
46b21a57bfSMichael Hamann        $this->assertEquals($this->indexer->getPID($newid), $oldpid, 'New page has not the old pid.');
47b21a57bfSMichael Hamann        $query = array('existing');
48b21a57bfSMichael Hamann        $this->assertEquals(array('existing' => array()), $this->indexer->lookup($query), 'Existing page hasn\'t been deleted from the index.');
49b21a57bfSMichael Hamann        $query = array('old');
50b21a57bfSMichael Hamann        $this->assertEquals(array('old' => array($newid => 1)), $this->indexer->lookup($query), '"Old" doesn\'t find the new page');
51b21a57bfSMichael Hamann    }
52b21a57bfSMichael Hamann
53b21a57bfSMichael Hamann    function test_meta_rename_to_new_value() {
54b21a57bfSMichael Hamann        $this->indexer->addMetaKeys($this->old_id, array('mkey' => 'old_value'));
55b21a57bfSMichael Hamann
56b1cfdc5fSMichael Hamann        $this->assertTrue($this->indexer->renameMetaValue('mkey', 'old_value', 'new_value'), 'Meta value rename to new value failed.');
57b21a57bfSMichael Hamann        $query = 'old_value';
58b21a57bfSMichael Hamann        $this->assertEquals(array(), $this->indexer->lookupKey('mkey', $query), 'Page can still be found under old value.');
59b21a57bfSMichael Hamann        $query = 'new_value';
60b21a57bfSMichael Hamann        $this->assertEquals(array($this->old_id), $this->indexer->lookupKey('mkey', $query), 'Page can\'t be found under new value.');
61b21a57bfSMichael Hamann    }
62b21a57bfSMichael Hamann
63b21a57bfSMichael Hamann    function test_meta_rename_to_existing_value() {
64b21a57bfSMichael Hamann        $this->indexer->addMetaKeys($this->old_id, array('mkey' => array('old_value', 'new_value')));
65b21a57bfSMichael Hamann
66b21a57bfSMichael Hamann        saveWikiText('newvalue', 'Test page', '');
67b21a57bfSMichael Hamann        idx_addPage('newvalue');
68b21a57bfSMichael Hamann        $this->indexer->addMetaKeys('newvalue', array('mkey' => array('new_value')));
69b21a57bfSMichael Hamann
70b21a57bfSMichael Hamann        saveWikiText('oldvalue', 'Test page', '');
71b21a57bfSMichael Hamann        idx_addPage('oldvalue');
72b21a57bfSMichael Hamann        $this->indexer->addMetaKeys('oldvalue', array('mkey' => array('old_value')));
73b21a57bfSMichael Hamann
74b1cfdc5fSMichael Hamann        $this->assertTrue($this->indexer->renameMetaValue('mkey', 'old_value', 'new_value'), 'Meta value rename to existing value failed');
75b21a57bfSMichael Hamann        $query = 'old_value';
76b21a57bfSMichael Hamann        $this->assertEquals(array(), $this->indexer->lookupKey('mkey', $query), 'Page can still be found under old value.');
77b21a57bfSMichael Hamann        $query = 'new_value';
78b21a57bfSMichael Hamann        $result = $this->indexer->lookupKey('mkey', $query);
79b21a57bfSMichael Hamann        $this->assertContains($this->old_id, $result, 'Page with both values can\'t be found anymore');
80b21a57bfSMichael Hamann        $this->assertContains('newvalue', $result, 'Page with new value can\'t be found anymore');
81b21a57bfSMichael Hamann        $this->assertContains('oldvalue', $result, 'Page with only the old value can\'t be found anymore');
82b21a57bfSMichael Hamann    }
83b21a57bfSMichael Hamann}
84