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