xref: /plugin/backlinks/_test/syntax_include_deep.test.php (revision c271718a35f646c00ae56b1d41d7d66ea9a2cfb7)
185f2e777SMark Prins<?php
285f2e777SMark Prins/*
385f2e777SMark Prins * Copyright (c) 2016 Mark C. Prins <mprins@users.sf.net>
485f2e777SMark Prins *
585f2e777SMark Prins * Permission to use, copy, modify, and distribute this software for any
685f2e777SMark Prins * purpose with or without fee is hereby granted, provided that the above
785f2e777SMark Prins * copyright notice and this permission notice appear in all copies.
885f2e777SMark Prins *
985f2e777SMark Prins * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1085f2e777SMark Prins * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1185f2e777SMark Prins * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1285f2e777SMark Prins * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1385f2e777SMark Prins * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1485f2e777SMark Prins * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1585f2e777SMark Prins * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1685f2e777SMark Prins */
1785f2e777SMark Prins
18*c271718aSMark Prinsuse dokuwiki\Logger;
19*c271718aSMark Prins
2085f2e777SMark Prins/**
2185f2e777SMark Prins * Syntax tests for the backlinks plugin.
2285f2e777SMark Prins *
2385f2e777SMark Prins * @group plugin_backlinks
2485f2e777SMark Prins * @group plugins
2585f2e777SMark Prins */
26*c271718aSMark Prinsclass syntax_include_deep_plugin_backlinks_test extends DokuWikiTest
27*c271718aSMark Prins{
2885f2e777SMark Prins
2985f2e777SMark Prins    protected $pluginsEnabled = array('backlinks');
3085f2e777SMark Prins
3185f2e777SMark Prins    /**
3285f2e777SMark Prins     * copy data.
3385f2e777SMark Prins     */
34*c271718aSMark Prins    public static function setUpBeforeClass(): void
35*c271718aSMark Prins    {
3685f2e777SMark Prins        parent::setUpBeforeClass();
3785f2e777SMark Prins        global $conf;
3885f2e777SMark Prins        $conf['allowdebug'] = 1;
3985f2e777SMark Prins
4085f2e777SMark Prins        TestUtils::rcopy(TMP_DIR, dirname(__FILE__) . '/data/');
4185f2e777SMark Prins
4285f2e777SMark Prins        dbglog("\nset up class syntax_plugin_backlinks_test");
4385f2e777SMark Prins    }
4485f2e777SMark Prins
45*c271718aSMark Prins    public function setUp(): void
46*c271718aSMark Prins    {
4785f2e777SMark Prins        parent::setUp();
4885f2e777SMark Prins
4985f2e777SMark Prins        global $conf;
5085f2e777SMark Prins        $conf['allowdebug'] = 1;
5185f2e777SMark Prins        $conf['cachetime'] = -1;
52*c271718aSMark Prins        $verbose = false;
53*c271718aSMark Prins        $force = false;
5485f2e777SMark Prins
5585f2e777SMark Prins        $data = array();
5685f2e777SMark Prins        search($data, $conf['datadir'], 'search_allpages', array('skipacl' => true));
5785f2e777SMark Prins
5885f2e777SMark Prins        foreach ($data as $val) {
5985f2e777SMark Prins            idx_addPage($val['id'], $verbose, $force);
6085f2e777SMark Prins        }
6185f2e777SMark Prins
6285f2e777SMark Prins        if ($conf['allowdebug']) {
6385f2e777SMark Prins            touch(DOKU_TMP_DATA . 'cache/debug.log');
6485f2e777SMark Prins        }
6585f2e777SMark Prins    }
6685f2e777SMark Prins
67*c271718aSMark Prins    public function tearDown(): void
68*c271718aSMark Prins    {
6985f2e777SMark Prins        parent::tearDown();
7085f2e777SMark Prins
7185f2e777SMark Prins        global $conf;
7285f2e777SMark Prins        // try to get the debug log after running the test, print and clear
7385f2e777SMark Prins        if ($conf['allowdebug']) {
7485f2e777SMark Prins            print "\n";
7585f2e777SMark Prins            readfile(DOKU_TMP_DATA . 'cache/debug.log');
7685f2e777SMark Prins            unlink(DOKU_TMP_DATA . 'cache/debug.log');
7785f2e777SMark Prins        }
7885f2e777SMark Prins    }
7985f2e777SMark Prins
80*c271718aSMark Prins    public function testInclude(): void
81*c271718aSMark Prins    {
8285f2e777SMark Prins        $request = new TestRequest();
83*c271718aSMark Prins        $response = $request->get(array('id' => 'mmm:nnn:ooo:start'));
8485f2e777SMark Prins
8585f2e777SMark Prins        $this->assertTrue(
86*c271718aSMark Prins            str_contains($response->getContent(), 'Backlinks from pages in /aaa/bbb/cc/'),
8785f2e777SMark Prins            '"Backlinks from pages in /aaa/bbb/cc/" was not in the output'
8885f2e777SMark Prins        );
8985f2e777SMark Prins
9085f2e777SMark Prins        $this->assertFalse(
91*c271718aSMark Prins            str_contains($response->getContent(), 'linking to a page form aaa'),
9285f2e777SMark Prins            '"linking to a page form aaa" should not be in the output'
9385f2e777SMark Prins        );
9485f2e777SMark Prins
9585f2e777SMark Prins        $doc = phpQuery::newDocument($response->getContent());
9685f2e777SMark Prins        // look for id="plugin__backlinks"
9785f2e777SMark Prins        $this->assertEquals(
9885f2e777SMark Prins            1,
9985f2e777SMark Prins            pq('#plugin__backlinks', $doc)->length,
10085f2e777SMark Prins            'There should be one backlinks element'
10185f2e777SMark Prins        );
10285f2e777SMark Prins
10385f2e777SMark Prins        $wikilinks = pq('#plugin__backlinks ul li', $doc);
104*c271718aSMark Prins        Logger::debug('found backlinks', $wikilinks->text());
10585f2e777SMark Prins        $this->assertEquals(
10685f2e777SMark Prins            5,
10785f2e777SMark Prins            $wikilinks->contents()->length,
10885f2e777SMark Prins            'There should be 5 backlinks'
10985f2e777SMark Prins        );
11085f2e777SMark Prins
11185f2e777SMark Prins        $lastlink = pq('a:last', $wikilinks);
112*c271718aSMark Prins        Logger::debug("last backlink", $lastlink->text());
11385f2e777SMark Prins        $this->assertEquals(
11485f2e777SMark Prins            'linking to a namespace',
115*c271718aSMark Prins            $lastlink->text(),
11685f2e777SMark Prins            'The last backlink should be "linking to a namespace"'
11785f2e777SMark Prins        );
11885f2e777SMark Prins    }
11985f2e777SMark Prins}
120