[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/_test/tests/lib/exe/ -> ajax_requests.test.php (source)

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