diff options
Diffstat (limited to 'platform/www/lib/plugins/tag/_test/topic_and_tagrefine.test.php')
-rw-r--r-- | platform/www/lib/plugins/tag/_test/topic_and_tagrefine.test.php | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/platform/www/lib/plugins/tag/_test/topic_and_tagrefine.test.php b/platform/www/lib/plugins/tag/_test/topic_and_tagrefine.test.php new file mode 100644 index 0000000..b466eb3 --- /dev/null +++ b/platform/www/lib/plugins/tag/_test/topic_and_tagrefine.test.php @@ -0,0 +1,107 @@ +<?php + +if (!defined('DOKU_INC')) die(); + +/** + * Tests the tagRefine function of the tag plugin + */ +class plugin_tag_topic_and_tagrefine_test extends DokuWikiTest { + private $all_pages = array( + 'tagged_page' => array('id' => 'tagged_page'), + 'negative_page' => array('id' => 'negative_page'), + 'third_page' => array('id' => 'third_page') + ); + public function setUp() { + $this->pluginsEnabled[] = 'tag'; + parent::setUp(); + + saveWikiText( + 'tagged_page', + '{{tag>mytag test2tag}}', 'Test' + ); + saveWikiText( + 'negative_page', + '{{tag>negative_tag mytag}}', + 'Test setup' + ); + saveWikiText( + 'third_page', + '{{tag>third_tag}}', + 'Test setup' + ); + idx_addPage('tagged_page'); + idx_addPage('negative_page'); + idx_addPage('third_page'); + } + + public function testEmptyTag() { + $this->assertTopicRefine(array('tagged_page', 'negative_page', 'third_page'), ''); + } + + public function testOnlyNegative() { + $this->assertTopicRefine(array('tagged_page', 'third_page'), '-negative_tag'); + } + + public function testMixed() { + $this->assertTopicRefine(array('tagged_page'), 'mytag -negative_tag'); + + } + + public function testAnd() { + $this->assertTopicRefine(array('tagged_page'), '+mytag +test2tag'); + } + + public function testAndOr() { + $this->assertTopicRefine(array('tagged_page', 'third_page'), '+test2tag third_tag'); + } + + public function testOrAnd() { + $this->assertTopicRefine(array('tagged_page'), 'mytag +test2tag'); + } + + public function testRefineDoesntAdd() { + /** @var helper_plugin_tag $helper */ + $helper = plugin_load('helper', 'tag'); + $pages = $helper->tagRefine(array(), 'mytag'); + $this->hasPages(array(), $pages, 'Refine with empty input array and "mytag" query: '); + } + + /** + * Test if the getTopic and the tagRefine function with all pages as input both return the expected pages + * + * @param array $expected expected page ids + * @param string $query the query for the tagRefine/getTopic-functions + */ + private function assertTopicRefine($expected, $query) { + /** @var helper_plugin_tag $helper */ + $helper = plugin_load('helper', 'tag'); + $pages = $helper->tagRefine($this->all_pages, $query); + $this->hasPages($expected, $pages, 'Refine: '.$query.': '); + $pages = $helper->getTopic('', '', $query); + $this->hasPages($expected, $pages, 'Topic: '.$query.': '); + } + + /** + * Makes sure that all pages were found and not more + * + * @param array $expected List of page ids + * @param array $actual Result list from getTopic/tagRefine + * @param string $msg_prefix A prefix that is prepended to all messages + */ + private function hasPages($expected, $actual, $msg_prefix = '') { + foreach ($expected as $id) { + $found = false; + foreach ($actual as $page) { + if ($page['id'] === $id) { + $found = true; + break; + } + } + $this->assertTrue($found, $msg_prefix.'Page '.$id.' expected but not found in the result'); + } + + foreach ($actual as $page) { + $this->assertTrue(in_array($page['id'], $expected), $msg_prefix.'Page '.$page['id'].' is in the result but wasn\'t expected'); + } + } +} |