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