xref: /dokuwiki/_test/tests/lib/exe/ajax_requests.test.php (revision 814e20b885024d75719ca160139e824af2bb9992)
1*814e20b8SYurii K<?php
2*814e20b8SYurii K
3*814e20b8SYurii K/**
4*814e20b8SYurii K * @group ajax
5*814e20b8SYurii K */
6*814e20b8SYurii Kclass ajax_requests_test extends DokuWikiTest {
7*814e20b8SYurii K
8*814e20b8SYurii K    public function defaultCalls() {
9*814e20b8SYurii K        return [
10*814e20b8SYurii K            // TODO: better logic and DOM walks
11*814e20b8SYurii K            // Call           | POST     |   regexp pattern to match
12*814e20b8SYurii K            [ 'linkwiz',      ['q' => ''], '/^<div class="odd type_d/' ],
13*814e20b8SYurii K            [ 'suggestions',  ['q' => ''], null ],
14*814e20b8SYurii K            [ 'lock',         ['id' => ''], null ],
15*814e20b8SYurii K            [ 'draftdel',     ['id' => ''], null ],
16*814e20b8SYurii K            [ 'medians',      ['ns' => 'some:ns'], null ],
17*814e20b8SYurii K            [ 'medialist',    ['ns' => '', 'recent' => '', 'do' => ''], null ],
18*814e20b8SYurii K            [ 'mediadetails', ['image' => ''], null ],
19*814e20b8SYurii K            [ 'mediadiff',    ['image' => ''], null ],
20*814e20b8SYurii K            [ 'mediaupload',  ['mediaid' => '', 'qqfile' => '' ], null ], // $_FILES
21*814e20b8SYurii K            [ 'index',        ['idx' => ''], null ],
22*814e20b8SYurii K            [ 'linkwiz',      ['q' => ''], null ],
23*814e20b8SYurii K        ];
24*814e20b8SYurii K    }
25*814e20b8SYurii K
26*814e20b8SYurii K
27*814e20b8SYurii K    /**
28*814e20b8SYurii K     * @dataProvider defaultCalls
29*814e20b8SYurii K     */
30*814e20b8SYurii K    public function test_defaultCallsExist($call, $post, $regexp) {
31*814e20b8SYurii K
32*814e20b8SYurii K        $request = new TestRequest();
33*814e20b8SYurii K        $response = $request->post(['call'=> $call]+$post, '/lib/exe/ajax.php');
34*814e20b8SYurii K        $this->assertNotEquals("AJAX call '$call' unknown!\n", $response->getContent());
35*814e20b8SYurii K
36*814e20b8SYurii K        if (!empty($regexp)) {
37*814e20b8SYurii K            $this->assertRegExp($regexp, $response->getContent());
38*814e20b8SYurii K        }
39*814e20b8SYurii K        if($call == 'index') {
40*814e20b8SYurii K            //echo $response->getContent(); die;
41*814e20b8SYurii K        }
42*814e20b8SYurii K        $this->assertTrue(function_exists('ajax_'.$call));
43*814e20b8SYurii K    }
44*814e20b8SYurii K
45*814e20b8SYurii K    public function test_CallNotProvided() {
46*814e20b8SYurii K        $request = new TestRequest();
47*814e20b8SYurii K        $response = $request->post([], '/lib/exe/ajax.php');
48*814e20b8SYurii K        $this->assertEquals('', $response->getContent());
49*814e20b8SYurii K    }
50*814e20b8SYurii K
51*814e20b8SYurii K    public function test_UnknownCall() {
52*814e20b8SYurii K        $call = 'unknownCALL';
53*814e20b8SYurii K        $request = new TestRequest();
54*814e20b8SYurii K        $response = $request->post(['call'=> $call], '/lib/exe/ajax.php');
55*814e20b8SYurii K        $this->assertEquals("AJAX call '$call' unknown!\n", $response->getContent());
56*814e20b8SYurii K        $this->assertFalse(function_exists('ajax_'.$call));
57*814e20b8SYurii K    }
58*814e20b8SYurii K
59*814e20b8SYurii K
60*814e20b8SYurii K    public function test_EventOnUnknownCall() {
61*814e20b8SYurii K        global $EVENT_HANDLER;
62*814e20b8SYurii K        $call = 'unknownCALL';
63*814e20b8SYurii K        $request = new TestRequest();
64*814e20b8SYurii K
65*814e20b8SYurii K        // referenced data from event hook
66*814e20b8SYurii K        $hookTriggered = false;
67*814e20b8SYurii K        $eventDataTriggered = '';
68*814e20b8SYurii K        $dataTriggered = '';
69*814e20b8SYurii K        $postTriggered = '';
70*814e20b8SYurii K
71*814e20b8SYurii K        $hookTriggered_AFTER = false;
72*814e20b8SYurii K        $eventDataTriggered_AFTER  = '';
73*814e20b8SYurii K        $dataTriggered_AFTER  = '';
74*814e20b8SYurii K        $postTriggered_AFTER  = '';
75*814e20b8SYurii K
76*814e20b8SYurii K        $EVENT_HANDLER->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', null,
77*814e20b8SYurii K            function($event, $data) use (&$hookTriggered, &$dataTriggered, &$eventDataTriggered, &$postTriggered) {
78*814e20b8SYurii K                /** @var Doku_Event $event */
79*814e20b8SYurii K                $hookTriggered = true;
80*814e20b8SYurii K                $dataTriggered = $data;
81*814e20b8SYurii K                $eventDataTriggered = $event->data;
82*814e20b8SYurii K                $postTriggered = $GLOBALS['INPUT']->post->str('q');
83*814e20b8SYurii K                $event->preventDefault();
84*814e20b8SYurii K                $event->stopPropagation();
85*814e20b8SYurii K                echo "captured event BEFORE\n";
86*814e20b8SYurii K            }, 'some passed data'
87*814e20b8SYurii K        );
88*814e20b8SYurii K
89*814e20b8SYurii K        $EVENT_HANDLER->register_hook('AJAX_CALL_UNKNOWN', 'AFTER', null,
90*814e20b8SYurii K            function($event, $data) use (&$hookTriggered_AFTER , &$dataTriggered_AFTER , &$eventDataTriggered_AFTER , &$postTriggered_AFTER ) {
91*814e20b8SYurii K                /** @var Doku_Event $event */
92*814e20b8SYurii K                $hookTriggered_AFTER  = true;
93*814e20b8SYurii K                $dataTriggered_AFTER  = $data;
94*814e20b8SYurii K                $eventDataTriggered_AFTER  = $event->data;
95*814e20b8SYurii K                $postTriggered_AFTER  = $GLOBALS['INPUT']->post->str('q');
96*814e20b8SYurii K                $event->preventDefault();
97*814e20b8SYurii K                $event->stopPropagation();
98*814e20b8SYurii K                echo "captured event AFTER";
99*814e20b8SYurii K            }, 'some passed data AFTER'
100*814e20b8SYurii K        );
101*814e20b8SYurii K
102*814e20b8SYurii K
103*814e20b8SYurii K        $response = $request->post(['call'=> $call, 'q' => 'some-post-param'], '/lib/exe/ajax.php');
104*814e20b8SYurii K
105*814e20b8SYurii K        // BEFORE
106*814e20b8SYurii K        $this->assertEquals(true, $hookTriggered, 'Testing plugin did not trigger!');
107*814e20b8SYurii K        $this->assertEquals('some passed data', $dataTriggered);
108*814e20b8SYurii K        $this->assertEquals($call, $eventDataTriggered, 'Must pass call name as event data');
109*814e20b8SYurii K        $this->assertEquals('some-post-param', $postTriggered);
110*814e20b8SYurii K
111*814e20b8SYurii K        // AFTER
112*814e20b8SYurii K        $this->assertEquals(true, $hookTriggered_AFTER, 'Testing plugin did not trigger!');
113*814e20b8SYurii K        $this->assertEquals('some passed data AFTER', $dataTriggered_AFTER);
114*814e20b8SYurii K        $this->assertEquals($call, $eventDataTriggered_AFTER, 'Must pass call name as event data');
115*814e20b8SYurii K        $this->assertEquals('some-post-param', $postTriggered_AFTER);
116*814e20b8SYurii K
117*814e20b8SYurii K        //output
118*814e20b8SYurii K        $this->assertEquals("captured event BEFORE\ncaptured event AFTER", $response->getContent());
119*814e20b8SYurii K
120*814e20b8SYurii K    }
121*814e20b8SYurii K}