xref: /dokuwiki/_test/tests/Search/BacklinksTest.php (revision 1148921de6af6909f19cb5b30b698d0f27d7751e)
1<?php
2
3namespace dokuwiki\test\Search;
4
5use dokuwiki\Search\Indexer;
6use dokuwiki\Search\MetadataSearch;
7
8/**
9 * Test cases for the backlinks search
10 *
11 * @author Michael Hamann <michael@content-space.de>
12 */
13class BacklinksTest extends \DokuWikiTest
14{
15    public function testInternallink()
16    {
17        saveWikiText('test:internallinks', '[[internälLink]] [[..:internal link]]', 'Test initialization');
18        (new Indexer())->addPage('test:internallinks');
19        $search = new MetadataSearch();
20
21        $this->assertEquals(array('test:internallinks'), $search->backlinks('internal_link'));
22        $this->assertEquals(array('test:internallinks'), $search->backlinks('test:internaellink'));
23    }
24
25    public function testLinksInFootnotes()
26    {
27        saveWikiText('test:link_footnotes', '(([[footnote]] [[:foÖtnotel]]))', 'Test initialization');
28        (new Indexer())->addPage('test:link_footnotes');
29        $search = new MetadataSearch();
30
31        $this->assertEquals(array('test:link_footnotes'), $search->backlinks('test:footnote'));
32        $this->assertEquals(array('test:link_footnotes'), $search->backlinks('fooetnotel'));
33    }
34
35    public function testLinksInHiddenPages()
36    {
37        global $conf;
38        $conf['hidepages'] = 'hidden:.*';
39        saveWikiText('hidden:links', '[[wiki:hiddenlink|linktitle]]', 'Test initialization');
40        (new Indexer())->addPage('hidden:links');
41        saveWikiText('visible:links', '[[wiki:hiddenlink]]', 'Test initialization');
42        (new Indexer())->addPage('visible:links');
43        $search = new MetadataSearch();
44
45        $this->assertEquals(array('visible:links'), $search->backlinks('wiki:hiddenlink'));
46        $this->assertEquals(array('visible:links'), $search->backlinks('wiki:hiddenlink', false));
47        $this->assertEquals(array('hidden:links', 'visible:links'), $search->backlinks('wiki:hiddenlink', true));
48    }
49
50    public function testLinksInProtectedPages()
51    {
52        global $conf;
53        global $AUTH_ACL;
54        $conf['superuser'] = 'alice';
55        $conf['useacl']    = 1;
56
57        $AUTH_ACL = array(
58            '*           @ALL           8',
59            'secret:*      @ALL           0',
60        );
61
62        $_SERVER['REMOTE_USER'] = 'eve';
63
64        saveWikiText('secret:links', '[[wiki:secretlink]]', 'Test initialization');
65        (new Indexer())->addPage('secret:links');
66        saveWikiText('public:links', '[[wiki:secretlink]]', 'Test initialization');
67        (new Indexer())->addPage('public:links');
68        $search = new MetadataSearch();
69
70        $this->assertEquals(array('public:links'), $search->backlinks('wiki:secretlink'));
71        $this->assertEquals(array('public:links'), $search->backlinks('wiki:secretlink', false));
72        $this->assertEquals(array('public:links', 'secret:links'), $search->backlinks('wiki:secretlink', true));
73    }
74
75    public function testLinksInDeletedPages()
76    {
77        saveWikiText('test:internallinks', '[[internallink]] [[..:internal link]]', 'Test initialization');
78        (new Indexer())->addPage('test:internallinks');
79        $search = new MetadataSearch();
80
81        $this->assertEquals(array('test:internallinks'), $search->backlinks('test:internallink'));
82        $this->assertEquals(array('test:internallinks'), $search->backlinks('internal_link'));
83
84        saveWikiText('test:internallinks', '', 'Deleted');
85
86        $this->assertEquals(array(), $search->backlinks('test:internallink'));
87        $this->assertEquals(array(), $search->backlinks('internal_link'));
88    }
89
90    public function testParameters()
91    {
92        saveWikiText('test:links', '[[wiki:syntax?do=export_raw]] [[:web:scripts:add_vhost.sh?do=export_raw]]', 'Init tests');
93        (new Indexer())->addPage('test:links');
94        $search = new MetadataSearch();
95
96        $this->assertEquals(array('test:links'), $search->backlinks('wiki:syntax'));
97        $this->assertEquals(array('test:links'), $search->backlinks('web:scripts:add_vhost.sh'));
98    }
99}
100