xref: /plugin/backlinks/_test/syntax.test.php (revision 1ed0f63ebccd84f96e4589ffa16b45450a7138d5)
152fa4f27SMark Prins<?php
252fa4f27SMark Prins/*
352fa4f27SMark Prins * Copyright (c) 2016 Mark C. Prins <mprins@users.sf.net>
452fa4f27SMark Prins *
552fa4f27SMark Prins * Permission to use, copy, modify, and distribute this software for any
652fa4f27SMark Prins * purpose with or without fee is hereby granted, provided that the above
752fa4f27SMark Prins * copyright notice and this permission notice appear in all copies.
852fa4f27SMark Prins *
952fa4f27SMark Prins * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1052fa4f27SMark Prins * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1152fa4f27SMark Prins * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1252fa4f27SMark Prins * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1352fa4f27SMark Prins * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1452fa4f27SMark Prins * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1552fa4f27SMark Prins * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1652fa4f27SMark Prins */
1752fa4f27SMark Prins
1852fa4f27SMark Prins/**
1952fa4f27SMark Prins * Syntax tests for the backlinks plugin.
2052fa4f27SMark Prins *
2152fa4f27SMark Prins * @group plugin_backlinks
2252fa4f27SMark Prins * @group plugins
2352fa4f27SMark Prins */
2452fa4f27SMark Prinsclass syntax_plugin_backlinks_test extends DokuWikiTest {
2552fa4f27SMark Prins
2652fa4f27SMark Prins    protected $pluginsEnabled = array('backlinks');
2752fa4f27SMark Prins
2852fa4f27SMark Prins    /**
2952fa4f27SMark Prins     * copy data and add pages to the index.
3052fa4f27SMark Prins     */
31d2570a6cSMark Prins    public static function setUpBeforeClass(): void {
3252fa4f27SMark Prins        parent::setUpBeforeClass();
3352fa4f27SMark Prins        global $conf;
34c3465203SMark Prins        $conf['allowdebug'] = 1;
3552fa4f27SMark Prins
3652fa4f27SMark Prins        TestUtils::rcopy(TMP_DIR, dirname(__FILE__) . '/data/');
3752fa4f27SMark Prins
38c3465203SMark Prins        dbglog("\nset up class syntax_plugin_backlinks_test");
3952fa4f27SMark Prins    }
4052fa4f27SMark Prins
41d2570a6cSMark Prins    function setUp(): void {
4252fa4f27SMark Prins        parent::setUp();
4352fa4f27SMark Prins
44c3465203SMark Prins        global $conf;
4552fa4f27SMark Prins        $conf['allowdebug'] = 1;
4652fa4f27SMark Prins        $conf['cachetime']  = -1;
4752fa4f27SMark Prins
4852fa4f27SMark Prins        $data = array();
4952fa4f27SMark Prins        search($data, $conf['datadir'], 'search_allpages', array('skipacl' => true));
5052fa4f27SMark Prins
51c3465203SMark Prins        //dbglog($data, "pages for indexing");
5252fa4f27SMark Prins
5352fa4f27SMark Prins        $verbose = false;
5452fa4f27SMark Prins        $force   = false;
55c3465203SMark Prins        foreach($data as $val) {
56c3465203SMark Prins            idx_addPage($val['id'], $verbose, $force);
57c3465203SMark Prins        }
58c3465203SMark Prins        //idx_addPage('bob_ross_says', $verbose, $force);
59c3465203SMark Prins        //idx_addPage('link', $verbose, $force);
60c3465203SMark Prins        //idx_addPage('backlinks_syntax', $verbose, $force);
61c3465203SMark Prins        if($conf['allowdebug']) {
62c3465203SMark Prins            touch(DOKU_TMP_DATA . 'cache/debug.log');
63c3465203SMark Prins        }
6452fa4f27SMark Prins    }
6552fa4f27SMark Prins
66d2570a6cSMark Prins    public function tearDown(): void {
6752fa4f27SMark Prins        parent::tearDown();
6852fa4f27SMark Prins
69c3465203SMark Prins        global $conf;
70c3465203SMark Prins        // try to get the debug log after running the test, print and clear
71c3465203SMark Prins        if($conf['allowdebug']) {
72c3465203SMark Prins            print "\n";
73c3465203SMark Prins            readfile(DOKU_TMP_DATA . 'cache/debug.log');
74c3465203SMark Prins            unlink(DOKU_TMP_DATA . 'cache/debug.log');
7552fa4f27SMark Prins        }
7652fa4f27SMark Prins    }
7752fa4f27SMark Prins
78d2570a6cSMark Prins    public function testIndex(): void {
79c3465203SMark Prins        $query = array('ross');
8052fa4f27SMark Prins        $this->assertEquals(
81*1ed0f63eSMark Prins            array(
82*1ed0f63eSMark Prins                'ross' => array(
83c3465203SMark Prins                    'link'                     => '3',
84c3465203SMark Prins                    'bob_ross_says'            => '1',
85c3465203SMark Prins                    'backlinks_syntax'         => '2',
86c3465203SMark Prins                    'backlinks_include_syntax' => '2',
87c3465203SMark Prins                    'backlinks_exclude_syntax' => '2',
88c3465203SMark Prins                    'backlink_test_pages'      => '8',
89c3465203SMark Prins                    'include:link'             => '3',
90c3465203SMark Prins                    'exclude:link'             => '3'
91*1ed0f63eSMark Prins                )
92*1ed0f63eSMark Prins            ),
9352fa4f27SMark Prins            idx_lookup($query)
9452fa4f27SMark Prins        );
9552fa4f27SMark Prins    }
9652fa4f27SMark Prins
97d2570a6cSMark Prins    public function testLinksPage(): void {
9852fa4f27SMark Prins        $request  = new TestRequest();
9952fa4f27SMark Prins        $response = $request->get(array('id' => 'link'), '/doku.php');
10052fa4f27SMark Prins
10152fa4f27SMark Prins        $this->assertTrue(
10252fa4f27SMark Prins            strpos($response->getContent(), 'A link to Bob Ross') !== false,
103c3465203SMark Prins            '"A link to Bob Ross" was not in the output'
10452fa4f27SMark Prins        );
10552fa4f27SMark Prins    }
10652fa4f27SMark Prins
107d2570a6cSMark Prins    public function testStoryPage(): void {
10852fa4f27SMark Prins        $request  = new TestRequest();
10952fa4f27SMark Prins        $response = $request->get(array('id' => 'bob_ross_says'), '/doku.php');
11052fa4f27SMark Prins
11152fa4f27SMark Prins        $this->assertTrue(
11252fa4f27SMark Prins            strpos($response->getContent(), 'Bob Ross says') !== false,
113c3465203SMark Prins            '"Bob Ross says" was not in the output'
11452fa4f27SMark Prins        );
11552fa4f27SMark Prins    }
11652fa4f27SMark Prins
117d2570a6cSMark Prins    public function testBacklinks(): void {
11852fa4f27SMark Prins        $request  = new TestRequest();
11952fa4f27SMark Prins        $response = $request->get(array('id' => 'backlinks_syntax'), '/doku.php');
12052fa4f27SMark Prins
12152fa4f27SMark Prins        $this->assertTrue(
12252fa4f27SMark Prins            strpos($response->getContent(), 'Backlinks to what Bob Ross says') !== false,
12352fa4f27SMark Prins            '"Backlinks to what Bob Ross says" was not in the output'
12452fa4f27SMark Prins        );
12552fa4f27SMark Prins
12652fa4f27SMark Prins        $doc = phpQuery::newDocument($response->getContent());
12752fa4f27SMark Prins        // look for id="plugin__backlinks"
128c3465203SMark Prins        $this->assertEquals(
129c3465203SMark Prins            1,
130c3465203SMark Prins            pq('#plugin__backlinks', $doc)->length,
131c3465203SMark Prins            'There should be one backlinks element'
132c3465203SMark Prins        );
13352fa4f27SMark Prins
134c3465203SMark Prins        $wikilinks = pq('#plugin__backlinks ul li', $doc);
135c3465203SMark Prins        dbglog($wikilinks->text(), 'found backlinks');
136c3465203SMark Prins        $this->assertEquals(
137c3465203SMark Prins            4,
138c3465203SMark Prins            $wikilinks->contents()->length,
139c3465203SMark Prins            'There should be 4 backlinks'
140c3465203SMark Prins        );
14152fa4f27SMark Prins
142c3465203SMark Prins        $lastlink = pq('a:last', $wikilinks);
143c3465203SMark Prins        dbglog($lastlink->text(), "last backlink");
144c3465203SMark Prins        $this->assertEquals(
145c3465203SMark Prins            $lastlink->text(),
146c3465203SMark Prins            'A link to Bob Ross',
147c3465203SMark Prins            'The last backlink should be a link to Bob Ross'
148c3465203SMark Prins        );
14952fa4f27SMark Prins    }
15052fa4f27SMark Prins}
151