1<?php
2
3namespace dokuwiki\test\Remote;
4
5
6use dokuwiki\test\Remote\Mock\XmlRpcServer;
7
8class XmlRpcServerTest extends \DokuWikiTest
9{
10    protected $server;
11
12    function setUp(): void
13    {
14        parent::setUp();
15        global $conf;
16
17        $conf['remote'] = 1;
18        $conf['remoteuser'] = '';
19        $conf['useacl'] = 0;
20
21        $this->server = new XmlRpcServer(true);
22    }
23
24
25    function testFullArgs()
26    {
27        $request = <<<EOD
28<?xml version="1.0"?>
29<methodCall>
30    <methodName>wiki.twoArgWithDefaultArg</methodName>
31    <param>
32        <value>
33            <string>arg1</string>
34        </value>
35    </param>
36    <param>
37        <value>
38            <string>arg2</string>
39        </value>
40    </param>
41</methodCall>
42EOD;
43
44        $expected = <<<EOD
45<methodResponse>
46    <params>
47        <param>
48            <value>
49                <array>
50                    <data>
51                        <value>
52                            <string>arg1</string>
53                        </value>
54                        <value>
55                            <string>arg2</string>
56                        </value>
57                    </data>
58                </array>
59            </value>
60        </param>
61    </params>
62</methodResponse>
63EOD;
64
65        $_SERVER['CONTENT_TYPE'] = 'text/xml';
66        $this->server->serve($request);
67        $this->assertXmlStringEqualsXmlString(trim($expected), trim($this->server->output));
68    }
69
70    function testDefaultArgs()
71    {
72        $request = <<<EOD
73<?xml version="1.0"?>
74<methodCall>
75    <methodName>wiki.twoArgWithDefaultArg</methodName>
76    <param>
77        <value>
78            <string>arg1</string>
79        </value>
80    </param>
81</methodCall>
82EOD;
83
84        $expected = <<<EOD
85<methodResponse>
86    <params>
87        <param>
88            <value>
89                <array>
90                    <data>
91                        <value>
92                            <string>arg1</string>
93                        </value>
94                        <value>
95                            <string>default</string>
96                        </value>
97                    </data>
98                </array>
99            </value>
100        </param>
101    </params>
102</methodResponse>
103EOD;
104
105        $_SERVER['CONTENT_TYPE'] = 'text/xml';
106        $this->server->serve($request);
107        $this->assertXmlStringEqualsXmlString(trim($expected), trim($this->server->output));
108    }
109
110    function testStructResponse()
111    {
112        $request = <<<EOD
113<?xml version="1.0"?>
114    <methodCall>
115        <methodName>wiki.getStructuredData</methodName>
116   </methodCall>
117EOD;
118        $expected = <<<EOD
119<methodResponse>
120    <params>
121        <param>
122            <value>
123                <struct>
124                    <member>
125                        <name>type</name>
126                        <value><string>internal</string></value>
127                    </member>
128                    <member>
129                        <name>page</name>
130                        <value><string>wiki:dokuwiki</string></value>
131                    </member>
132                    <member>
133                        <name>href</name>
134                        <value><string>https://www.dokuwiki.org/wiki:dokuwiki</string></value>
135                    </member>
136                </struct>
137            </value>
138        </param>
139    </params>
140</methodResponse>
141EOD;
142
143        $_SERVER['CONTENT_TYPE'] = 'text/xml';
144        $this->server->serve($request);
145        $this->assertXmlStringEqualsXmlString(trim($expected), trim($this->server->output));
146    }
147}
148