1<?php
2
3use dokuwiki\Extension\Event;
4
5/**
6 * @group plugin_tagfilter
7 * @group plugins
8 */
9class plugin_tagfilter_ajax_test extends DokuWikiTest
10{
11
12    protected $pluginsEnabled = [
13        'tag', 'tagfilter', 'pagelist'
14    ];
15
16    public function setup(): void
17    {
18        parent::setup();
19        $this->_createPages();
20    }
21
22
23    public function test_ajax_request_notags()
24    {
25        global $INPUT;
26        global $lang;
27
28        $INPUT->set('id', 0);
29        $INPUT->set('form', json_encode(array()));
30        $INPUT->set('ns', json_encode('test:plugin_tagfilter:tags'));
31        $INPUT->set('flags', json_encode(array()));
32        $INPUT->set('pagesearch', json_encode(array()));
33
34        $er = error_reporting();
35        error_reporting($er ^ E_STRICT);
36        ob_start();
37        $data = 'plugin_tagfilter';
38        Event::createAndTrigger('AJAX_CALL_UNKNOWN', $data);
39        $response = ob_get_contents();
40        ob_end_clean();
41        error_reporting($er);
42
43        if (isset($lang['nothingfound'])) {
44            $this->assertEquals('{"id":0,"text":"<i>Nothing was found.<\/i>"}', $response);
45        } else {
46            $this->assertEquals('{"id":0,"text":"<i><\/i>"}', $response);
47        }
48    }
49
50    public function test_ajax_request_alltags()
51    {
52        global $INPUT;
53
54        $INPUT->set('id', 0);
55        $INPUT->set('form', '[["cat1:blorg","cat2:a","cat3:1","cat2:b","cat3:2"]]');
56        $INPUT->set('ns', json_encode('test:plugin_tagfilter:tags'));
57        $INPUT->set('flags', json_encode(array()));
58        $INPUT->set('pagesearch', json_encode(array()));
59
60        $er = error_reporting();
61        error_reporting($er ^ E_STRICT);
62        ob_start();
63        $data = 'plugin_tagfilter';
64        Event::createAndTrigger('AJAX_CALL_UNKNOWN', $data);
65
66        $response1 = ob_get_contents();
67        $response2 = json_decode($response1);
68        $response = (array)$response2;
69        ob_end_clean();
70        error_reporting($er);
71        if (!isset($response['text'])) {
72            var_dump(array($response1, $response2, $response));
73        } else {
74
75            $this->assertStringContainsString('id=test:plugin_tagfilter:tags:tagpage1', $response['text']);
76            $this->assertStringContainsString('id=test:plugin_tagfilter:tags:tagpage2', $response['text']);
77        }
78    }
79
80    public function test_ajax_request_onepage()
81    {
82        global $INPUT;
83
84        $INPUT->set('id', 0);
85        $INPUT->set('form', '[["cat1:blorg"],["cat3:2"]]');
86        $INPUT->set('ns', json_encode('test:plugin_tagfilter:tags'));
87        $INPUT->set('flags', json_encode(array()));
88        $INPUT->set('pagesearch', json_encode(array()));
89
90        $er = error_reporting();
91        error_reporting($er ^ E_STRICT);
92        ob_start();
93        $data = 'plugin_tagfilter';
94        Event::createAndTrigger('AJAX_CALL_UNKNOWN', $data);
95        $response = (array)json_decode(ob_get_contents());
96        ob_end_clean();
97        error_reporting($er);
98        $this->assertFalse(strpos($response['text'], 'id=test:plugin_tagfilter:tags:tagpage1') !== false);
99        $this->assertStringContainsString('id=test:plugin_tagfilter:tags:tagpage2', $response['text']);
100
101    }
102
103    public function test_ajax_request_pagesearch()
104    {
105        global $INPUT;
106
107        $INPUT->set('id', 0);
108        $INPUT->set('form', '[["cat1:blorg"]]');
109        $INPUT->set('ns', json_encode('test:plugin_tagfilter:tags'));
110        $INPUT->set('flags', json_encode(array()));
111        $INPUT->set('pagesearch', json_encode(array('test:plugin_tagfilter:tags:tagpage2')));
112
113        $er = error_reporting();
114        error_reporting($er ^ E_STRICT);
115        ob_start();
116        $data = 'plugin_tagfilter';
117        Event::createAndTrigger('AJAX_CALL_UNKNOWN', $data);
118        $response = (array)json_decode(ob_get_contents());
119        ob_end_clean();
120        error_reporting($er);
121        $this->assertFalse(strpos($response['text'], 'id=test:plugin_tagfilter:tags:tagpage1') !== false);
122        $this->assertStringContainsString('id=test:plugin_tagfilter:tags:tagpage2', $response['text']);
123
124    }
125
126    protected function _createPages()
127    {
128        saveWikiText('test:plugin_tagfilter:tags:tagpage1', '==== Tagpage1 ====' . DOKU_LF . '{{tag>cat1:blorg cat2:a cat3:1}}', 'test');
129        saveWikiText('test:plugin_tagfilter:tags:tagpage2', '==== Tagpage2 ====' . DOKU_LF . '{{tag>cat1:blorg cat2:b cat3:2}}', 'test');
130        saveWikiText('test:plugin_tagfilter:start', '{{tagfilter>test:plugin_tagfilter:tags?T1=cat1:.*|T2=cat2:.*|T3=cat3:.*}}', 'test');
131        saveWikiText('test:plugin_tagfilter:start2', '{{tagfilter>test:plugin_tagfilter:tags?T1=cat1:.*|T2=cat2:.*|T3=cat3:.*&pagesearch}}', 'test');
132        saveWikiText('test:plugin_tagfilter:start3', '{{tagfilter>test:plugin_tagfilter:tags?T1=cat1:.*|T2=cat2:.*|T3=cat3:.*&multi}}', 'test');
133
134        idx_addPage('test:plugin_tagfilter:tags:tagpage1', false);
135        idx_addPage('test:plugin_tagfilter:tags:tagpage2', false);
136    }
137
138
139}
140