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