xref: /dokuwiki/_test/tests/Remote/JsonRpcServerTest.php (revision 5e47e6df3b30a73e6df46aa75fcc4008d9b60ebb)
1*5e47e6dfSAndreas Gohr<?php
2*5e47e6dfSAndreas Gohr
3*5e47e6dfSAndreas Gohrnamespace dokuwiki\test\Remote;
4*5e47e6dfSAndreas Gohr
5*5e47e6dfSAndreas Gohr
6*5e47e6dfSAndreas Gohruse dokuwiki\test\Remote\Mock\JsonRpcServer;
7*5e47e6dfSAndreas Gohr
8*5e47e6dfSAndreas Gohr/**
9*5e47e6dfSAndreas Gohr * @todo test different request formats
10*5e47e6dfSAndreas Gohr */
11*5e47e6dfSAndreas Gohrclass JsonRpcServerTest extends \DokuWikiTest
12*5e47e6dfSAndreas Gohr{
13*5e47e6dfSAndreas Gohr    protected $server;
14*5e47e6dfSAndreas Gohr
15*5e47e6dfSAndreas Gohr    function setUp(): void
16*5e47e6dfSAndreas Gohr    {
17*5e47e6dfSAndreas Gohr        parent::setUp();
18*5e47e6dfSAndreas Gohr        global $conf;
19*5e47e6dfSAndreas Gohr
20*5e47e6dfSAndreas Gohr        $conf['remote'] = 1;
21*5e47e6dfSAndreas Gohr        $conf['remoteuser'] = '';
22*5e47e6dfSAndreas Gohr        $conf['useacl'] = 0;
23*5e47e6dfSAndreas Gohr
24*5e47e6dfSAndreas Gohr        $this->server = new JsonRpcServer();
25*5e47e6dfSAndreas Gohr    }
26*5e47e6dfSAndreas Gohr
27*5e47e6dfSAndreas Gohr
28*5e47e6dfSAndreas Gohr    function testFullArgs()
29*5e47e6dfSAndreas Gohr    {
30*5e47e6dfSAndreas Gohr        $_SERVER['CONTENT_TYPE'] = 'application/json';
31*5e47e6dfSAndreas Gohr        $_SERVER['REQUEST_METHOD'] = 'POST';
32*5e47e6dfSAndreas Gohr        $_SERVER['PATH_INFO'] = '/wiki.twoArgWithDefaultArg';
33*5e47e6dfSAndreas Gohr
34*5e47e6dfSAndreas Gohr        $positional = json_encode(['arg1', 'arg2']);
35*5e47e6dfSAndreas Gohr        $named = json_encode(['string1' => 'arg1', 'string2' => 'arg2']);
36*5e47e6dfSAndreas Gohr        $expect = json_encode(['arg1', 'arg2']);
37*5e47e6dfSAndreas Gohr
38*5e47e6dfSAndreas Gohr        $response = json_encode($this->server->serve($positional)['result']);
39*5e47e6dfSAndreas Gohr        $this->assertJsonStringEqualsJsonString($expect, $response);
40*5e47e6dfSAndreas Gohr
41*5e47e6dfSAndreas Gohr        $response = json_encode($this->server->serve($named)['result']);
42*5e47e6dfSAndreas Gohr        $this->assertJsonStringEqualsJsonString($expect, $response);
43*5e47e6dfSAndreas Gohr    }
44*5e47e6dfSAndreas Gohr
45*5e47e6dfSAndreas Gohr    function testDefaultArgs()
46*5e47e6dfSAndreas Gohr    {
47*5e47e6dfSAndreas Gohr        $_SERVER['CONTENT_TYPE'] = 'application/json';
48*5e47e6dfSAndreas Gohr        $_SERVER['REQUEST_METHOD'] = 'POST';
49*5e47e6dfSAndreas Gohr        $_SERVER['PATH_INFO'] = '/wiki.twoArgWithDefaultArg';
50*5e47e6dfSAndreas Gohr
51*5e47e6dfSAndreas Gohr        $positional = json_encode(['arg1']);
52*5e47e6dfSAndreas Gohr        $named = json_encode(['string1' => 'arg1']);
53*5e47e6dfSAndreas Gohr        $expect = json_encode(['arg1', 'default']);
54*5e47e6dfSAndreas Gohr
55*5e47e6dfSAndreas Gohr        $response = json_encode($this->server->serve($positional)['result']);
56*5e47e6dfSAndreas Gohr        $this->assertJsonStringEqualsJsonString($expect, $response);
57*5e47e6dfSAndreas Gohr
58*5e47e6dfSAndreas Gohr        $response = json_encode($this->server->serve($named)['result']);
59*5e47e6dfSAndreas Gohr        $this->assertJsonStringEqualsJsonString($expect, $response);
60*5e47e6dfSAndreas Gohr    }
61*5e47e6dfSAndreas Gohr
62*5e47e6dfSAndreas Gohr    function testStructResponse()
63*5e47e6dfSAndreas Gohr    {
64*5e47e6dfSAndreas Gohr        $_SERVER['CONTENT_TYPE'] = 'application/json';
65*5e47e6dfSAndreas Gohr        $_SERVER['REQUEST_METHOD'] = 'POST';
66*5e47e6dfSAndreas Gohr        $_SERVER['PATH_INFO'] = '/wiki.getStructuredData';
67*5e47e6dfSAndreas Gohr
68*5e47e6dfSAndreas Gohr        $expect = json_encode([
69*5e47e6dfSAndreas Gohr            'type' => 'internal',
70*5e47e6dfSAndreas Gohr            'page' => 'wiki:dokuwiki',
71*5e47e6dfSAndreas Gohr            'href' => 'https://www.dokuwiki.org/wiki:dokuwiki'
72*5e47e6dfSAndreas Gohr        ]);
73*5e47e6dfSAndreas Gohr
74*5e47e6dfSAndreas Gohr        $response = json_encode($this->server->serve('[]')['result']);
75*5e47e6dfSAndreas Gohr        $this->assertJsonStringEqualsJsonString($expect, $response);
76*5e47e6dfSAndreas Gohr    }
77*5e47e6dfSAndreas Gohr}
78