xref: /plugin/backlinks/_test/syntax.test.php (revision c271718a35f646c00ae56b1d41d7d66ea9a2cfb7)
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
18*c271718aSMark Prinsuse dokuwiki\Logger;
19*c271718aSMark Prins
2052fa4f27SMark Prins/**
2152fa4f27SMark Prins * Syntax tests for the backlinks plugin.
2252fa4f27SMark Prins *
2352fa4f27SMark Prins * @group plugin_backlinks
2452fa4f27SMark Prins * @group plugins
2552fa4f27SMark Prins */
26*c271718aSMark Prinsclass syntax_plugin_backlinks_test extends DokuWikiTest
27*c271718aSMark Prins{
2852fa4f27SMark Prins
2952fa4f27SMark Prins    protected $pluginsEnabled = array('backlinks');
3052fa4f27SMark Prins
3152fa4f27SMark Prins    /**
3252fa4f27SMark Prins     * copy data and add pages to the index.
3352fa4f27SMark Prins     */
34*c271718aSMark Prins    public static function setUpBeforeClass(): void
35*c271718aSMark Prins    {
3652fa4f27SMark Prins        parent::setUpBeforeClass();
3752fa4f27SMark Prins        global $conf;
38c3465203SMark Prins        $conf['allowdebug'] = 1;
3952fa4f27SMark Prins
4052fa4f27SMark Prins        TestUtils::rcopy(TMP_DIR, dirname(__FILE__) . '/data/');
4152fa4f27SMark Prins
42*c271718aSMark Prins        Logger::debug("set up class syntax_plugin_backlinks_test");
4352fa4f27SMark Prins    }
4452fa4f27SMark Prins
45*c271718aSMark Prins    public function setUp(): void
46*c271718aSMark Prins    {
4752fa4f27SMark Prins        parent::setUp();
4852fa4f27SMark Prins
49c3465203SMark Prins        global $conf;
5052fa4f27SMark Prins        $conf['allowdebug'] = 1;
5152fa4f27SMark Prins        $conf['cachetime'] = -1;
52*c271718aSMark Prins        $verbose = false;
53*c271718aSMark Prins        $force = false;
5452fa4f27SMark Prins
5552fa4f27SMark Prins        $data = array();
5652fa4f27SMark Prins        search($data, $conf['datadir'], 'search_allpages', array('skipacl' => true));
5752fa4f27SMark Prins
58c3465203SMark Prins        foreach ($data as $val) {
59c3465203SMark Prins            idx_addPage($val['id'], $verbose, $force);
60c3465203SMark Prins        }
61c3465203SMark Prins        //idx_addPage('bob_ross_says', $verbose, $force);
62c3465203SMark Prins        //idx_addPage('link', $verbose, $force);
63c3465203SMark Prins        //idx_addPage('backlinks_syntax', $verbose, $force);
64c3465203SMark Prins        if ($conf['allowdebug']) {
65c3465203SMark Prins            touch(DOKU_TMP_DATA . 'cache/debug.log');
66c3465203SMark Prins        }
6752fa4f27SMark Prins    }
6852fa4f27SMark Prins
69*c271718aSMark Prins    public function tearDown(): void
70*c271718aSMark Prins    {
7152fa4f27SMark Prins        parent::tearDown();
7252fa4f27SMark Prins
73c3465203SMark Prins        global $conf;
74c3465203SMark Prins        // try to get the debug log after running the test, print and clear
75c3465203SMark Prins        if ($conf['allowdebug']) {
76c3465203SMark Prins            print "\n";
77c3465203SMark Prins            readfile(DOKU_TMP_DATA . 'cache/debug.log');
78c3465203SMark Prins            unlink(DOKU_TMP_DATA . 'cache/debug.log');
7952fa4f27SMark Prins        }
8052fa4f27SMark Prins    }
8152fa4f27SMark Prins
82*c271718aSMark Prins    public function testIndex(): void
83*c271718aSMark Prins    {
84c3465203SMark Prins        $query = array('ross');
8552fa4f27SMark Prins        $this->assertEquals(
861ed0f63eSMark Prins            array(
871ed0f63eSMark Prins                'ross' => array(
88c3465203SMark Prins                    'link' => '3',
89c3465203SMark Prins                    'bob_ross_says' => '1',
90c3465203SMark Prins                    'backlinks_syntax' => '2',
91c3465203SMark Prins                    'backlinks_include_syntax' => '2',
92c3465203SMark Prins                    'backlinks_exclude_syntax' => '2',
93c3465203SMark Prins                    'backlink_test_pages' => '8',
94c3465203SMark Prins                    'include:link' => '3',
95c3465203SMark Prins                    'exclude:link' => '3'
961ed0f63eSMark Prins                )
971ed0f63eSMark Prins            ),
9852fa4f27SMark Prins            idx_lookup($query)
9952fa4f27SMark Prins        );
10052fa4f27SMark Prins    }
10152fa4f27SMark Prins
102*c271718aSMark Prins    public function testLinksPage(): void
103*c271718aSMark Prins    {
10452fa4f27SMark Prins        $request = new TestRequest();
10552fa4f27SMark Prins        $response = $request->get(array('id' => 'link'), '/doku.php');
10652fa4f27SMark Prins
10752fa4f27SMark Prins        $this->assertTrue(
108*c271718aSMark Prins            str_contains($response->getContent(), 'A link to Bob Ross'),
109c3465203SMark Prins            '"A link to Bob Ross" was not in the output'
11052fa4f27SMark Prins        );
11152fa4f27SMark Prins    }
11252fa4f27SMark Prins
113*c271718aSMark Prins    public function testStoryPage(): void
114*c271718aSMark Prins    {
11552fa4f27SMark Prins        $request = new TestRequest();
11652fa4f27SMark Prins        $response = $request->get(array('id' => 'bob_ross_says'), '/doku.php');
11752fa4f27SMark Prins
11852fa4f27SMark Prins        $this->assertTrue(
119*c271718aSMark Prins            str_contains($response->getContent(), 'Bob Ross says'),
120c3465203SMark Prins            '"Bob Ross says" was not in the output'
12152fa4f27SMark Prins        );
12252fa4f27SMark Prins    }
12352fa4f27SMark Prins
124*c271718aSMark Prins    public function testBacklinks(): void
125*c271718aSMark Prins    {
12652fa4f27SMark Prins        $request = new TestRequest();
12752fa4f27SMark Prins        $response = $request->get(array('id' => 'backlinks_syntax'), '/doku.php');
12852fa4f27SMark Prins
12952fa4f27SMark Prins        $this->assertTrue(
130*c271718aSMark Prins            str_contains($response->getContent(), 'Backlinks to what Bob Ross says'),
13152fa4f27SMark Prins            '"Backlinks to what Bob Ross says" was not in the output'
13252fa4f27SMark Prins        );
13352fa4f27SMark Prins
13452fa4f27SMark Prins        $doc = phpQuery::newDocument($response->getContent());
13552fa4f27SMark Prins        // look for id="plugin__backlinks"
136c3465203SMark Prins        $this->assertEquals(
137c3465203SMark Prins            1,
138c3465203SMark Prins            pq('#plugin__backlinks', $doc)->length,
139c3465203SMark Prins            'There should be one backlinks element'
140c3465203SMark Prins        );
14152fa4f27SMark Prins
142c3465203SMark Prins        $wikilinks = pq('#plugin__backlinks ul li', $doc);
143*c271718aSMark Prins        Logger::debug('found backlinks', $wikilinks->text());
144c3465203SMark Prins        $this->assertEquals(
145c3465203SMark Prins            4,
146c3465203SMark Prins            $wikilinks->contents()->length,
147c3465203SMark Prins            'There should be 4 backlinks'
148c3465203SMark Prins        );
14952fa4f27SMark Prins
150c3465203SMark Prins        $lastlink = pq('a:last', $wikilinks);
151*c271718aSMark Prins        Logger::debug("last backlink", $lastlink->text());
152c3465203SMark Prins        $this->assertEquals(
153c3465203SMark Prins            'A link to Bob Ross',
154*c271718aSMark Prins            $lastlink->text(),
155c3465203SMark Prins            'The last backlink should be a link to Bob Ross'
156c3465203SMark Prins        );
15752fa4f27SMark Prins    }
15852fa4f27SMark Prins}
159