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