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