xref: /plugin/backlinks/_test/syntax.test.php (revision c346520311eea5a6f4cfb1a17d990fe55f3ef0aa)
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     */
3152fa4f27SMark Prins    public static function setUpBeforeClass(){
3252fa4f27SMark Prins        parent::setUpBeforeClass();
3352fa4f27SMark Prins        global $conf;
34*c3465203SMark Prins        $conf['allowdebug'] = 1;
3552fa4f27SMark Prins
3652fa4f27SMark Prins        TestUtils::rcopy(TMP_DIR, dirname(__FILE__) . '/data/');
3752fa4f27SMark Prins
38*c3465203SMark Prins        dbglog("\nset up class syntax_plugin_backlinks_test");
3952fa4f27SMark Prins    }
4052fa4f27SMark Prins
4152fa4f27SMark Prins    function setUp() {
4252fa4f27SMark Prins        parent::setUp();
4352fa4f27SMark Prins
44*c3465203SMark 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
51*c3465203SMark Prins        //dbglog($data, "pages for indexing");
5252fa4f27SMark Prins
5352fa4f27SMark Prins        $verbose = false;
5452fa4f27SMark Prins        $force = false;
55*c3465203SMark Prins        foreach($data as $val) {
56*c3465203SMark Prins            idx_addPage($val['id'], $verbose, $force);
57*c3465203SMark Prins        }
58*c3465203SMark Prins        //idx_addPage('bob_ross_says', $verbose, $force);
59*c3465203SMark Prins        //idx_addPage('link', $verbose, $force);
60*c3465203SMark Prins        //idx_addPage('backlinks_syntax', $verbose, $force);
61*c3465203SMark Prins        if($conf['allowdebug']) {
62*c3465203SMark Prins            touch(DOKU_TMP_DATA.'cache/debug.log');
63*c3465203SMark Prins        }
6452fa4f27SMark Prins    }
6552fa4f27SMark Prins
6652fa4f27SMark Prins    public function tearDown() {
6752fa4f27SMark Prins        parent::tearDown();
6852fa4f27SMark Prins
69*c3465203SMark Prins        global $conf;
70*c3465203SMark Prins        // try to get the debug log after running the test, print and clear
71*c3465203SMark Prins        if($conf['allowdebug']) {
72*c3465203SMark Prins            print "\n";
73*c3465203SMark Prins            readfile(DOKU_TMP_DATA.'cache/debug.log');
74*c3465203SMark Prins            unlink(DOKU_TMP_DATA.'cache/debug.log');
7552fa4f27SMark Prins        }
7652fa4f27SMark Prins    }
7752fa4f27SMark Prins
7852fa4f27SMark Prins    public function testIndex() {
79*c3465203SMark Prins        $query = array('ross');
8052fa4f27SMark Prins        $this->assertEquals(
81*c3465203SMark Prins                 array('ross' => array(
82*c3465203SMark Prins                    'link' => '3',
83*c3465203SMark Prins                    'bob_ross_says' => '1',
84*c3465203SMark Prins                    'backlinks_syntax' => '2',
85*c3465203SMark Prins                    'backlinks_include_syntax' => '2',
86*c3465203SMark Prins                    'backlinks_exclude_syntax' => '2',
87*c3465203SMark Prins                    'backlink_test_pages' => '8',
88*c3465203SMark Prins                    'include:link' => '3',
89*c3465203SMark Prins                    'exclude:link' => '3'
90*c3465203SMark Prins                    )),
9152fa4f27SMark Prins                 idx_lookup($query)
9252fa4f27SMark Prins        );
9352fa4f27SMark Prins    }
9452fa4f27SMark Prins
9552fa4f27SMark Prins    public function testLinksPage() {
9652fa4f27SMark Prins        $request = new TestRequest();
9752fa4f27SMark Prins        $response = $request->get(array('id'=>'link'), '/doku.php');
9852fa4f27SMark Prins
9952fa4f27SMark Prins        $this->assertTrue(
10052fa4f27SMark Prins            strpos($response->getContent(), 'A link to Bob Ross') !== false,
101*c3465203SMark Prins            '"A link to Bob Ross" was not in the output'
10252fa4f27SMark Prins        );
10352fa4f27SMark Prins     }
10452fa4f27SMark Prins
10552fa4f27SMark Prins    public function testStoryPage() {
10652fa4f27SMark Prins        $request = new TestRequest();
10752fa4f27SMark Prins        $response = $request->get(array('id'=>'bob_ross_says'), '/doku.php');
10852fa4f27SMark Prins
10952fa4f27SMark Prins        $this->assertTrue(
11052fa4f27SMark Prins            strpos($response->getContent(), 'Bob Ross says') !== false,
111*c3465203SMark Prins            '"Bob Ross says" was not in the output'
11252fa4f27SMark Prins        );
11352fa4f27SMark Prins    }
11452fa4f27SMark Prins
11552fa4f27SMark Prins    public function testBacklinks() {
11652fa4f27SMark Prins        $request = new TestRequest();
11752fa4f27SMark Prins        $response = $request->get(array('id'=>'backlinks_syntax'), '/doku.php');
11852fa4f27SMark Prins
11952fa4f27SMark Prins        $this->assertTrue(
12052fa4f27SMark Prins            strpos($response->getContent(), 'Backlinks to what Bob Ross says') !== false,
12152fa4f27SMark Prins            '"Backlinks to what Bob Ross says" was not in the output'
12252fa4f27SMark Prins        );
12352fa4f27SMark Prins
12452fa4f27SMark Prins        $doc = phpQuery::newDocument($response->getContent());
12552fa4f27SMark Prins        // look for id="plugin__backlinks"
126*c3465203SMark Prins        $this->assertEquals(
127*c3465203SMark Prins                            1,
128*c3465203SMark Prins                            pq('#plugin__backlinks', $doc)->length,
129*c3465203SMark Prins                            'There should be one backlinks element'
130*c3465203SMark Prins                           );
13152fa4f27SMark Prins
132*c3465203SMark Prins        $wikilinks = pq('#plugin__backlinks ul li', $doc);
133*c3465203SMark Prins        dbglog($wikilinks->text(), 'found backlinks');
134*c3465203SMark Prins        $this->assertEquals(
135*c3465203SMark Prins                            4,
136*c3465203SMark Prins                            $wikilinks->contents()->length,
137*c3465203SMark Prins                            'There should be 4 backlinks'
138*c3465203SMark Prins                           );
13952fa4f27SMark Prins
140*c3465203SMark Prins        $lastlink = pq('a:last',$wikilinks);
141*c3465203SMark Prins        dbglog($lastlink->text(),"last backlink");
142*c3465203SMark Prins        $this->assertEquals(
143*c3465203SMark Prins                            $lastlink->text(),
144*c3465203SMark Prins                            'A link to Bob Ross',
145*c3465203SMark Prins                            'The last backlink should be a link to Bob Ross'
146*c3465203SMark Prins                           );
14752fa4f27SMark Prins    }
14852fa4f27SMark Prins}
149