mirror of
https://github.com/moodle/moodle.git
synced 2025-07-22 23:01:21 +02:00
115 lines
4.5 KiB
PHP
115 lines
4.5 KiB
PHP
<?php
|
||
// This file is part of Moodle - http://moodle.org/
|
||
//
|
||
// Moodle is free software: you can redistribute it and/or modify
|
||
// it under the terms of the GNU General Public License as published by
|
||
// the Free Software Foundation, either version 3 of the License, or
|
||
// (at your option) any later version.
|
||
//
|
||
// Moodle is distributed in the hope that it will be useful,
|
||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
// GNU General Public License for more details.
|
||
//
|
||
// You should have received a copy of the GNU General Public License
|
||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||
|
||
/**
|
||
* Unit tests for the XML-RPC web service server.
|
||
*
|
||
* @package webservice_xmlrpc
|
||
* @category test
|
||
* @copyright 2016 Andrew Nicols <andrew@nicols.co.uk>
|
||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||
*/
|
||
|
||
defined('MOODLE_INTERNAL') || die();
|
||
|
||
global $CFG;
|
||
require_once($CFG->dirroot . '/webservice/xmlrpc/locallib.php');
|
||
|
||
/**
|
||
* Unit tests for the XML-RPC web service server.
|
||
*
|
||
* @package webservice_xmlrpc
|
||
* @category test
|
||
* @copyright 2016 Andrew Nicols <andrew@nicols.co.uk>
|
||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||
*/
|
||
class xmlrpc_server_test extends advanced_testcase {
|
||
|
||
/**
|
||
* Setup.
|
||
*/
|
||
public function setUp() {
|
||
if (!function_exists('xmlrpc_decode')) {
|
||
$this->markTestSkipped('XMLRPC is not installed.');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Test parameter parsing.
|
||
*
|
||
* @dataProvider parse_request_provider
|
||
* @param string $input The XML-RPC request
|
||
* @param string $expectfunction The expected value for the function after decoding the request
|
||
* @param array $expectparams The expected value for the params after decoding the request
|
||
*/
|
||
public function test_parse_request($input, $expectfunction, $expectparams) {
|
||
$server = $this->getMockBuilder('\webservice_xmlrpc_server')
|
||
->setMethods(['fetch_input_content'])
|
||
->disableOriginalConstructor()
|
||
->getMock();
|
||
|
||
$server->method('fetch_input_content')
|
||
->willReturn($input);
|
||
|
||
$rc = new \ReflectionClass('\webservice_xmlrpc_server');
|
||
$rcm = $rc->getMethod('parse_request');
|
||
$rcm->setAccessible(true);
|
||
$rcm->invoke($server);
|
||
|
||
$rcp = $rc->getProperty('functionname');
|
||
$rcp->setAccessible(true);
|
||
$this->assertEquals($expectfunction, $rcp->getValue($server));
|
||
|
||
$rcp = $rc->getProperty('parameters');
|
||
$rcp->setAccessible(true);
|
||
$this->assertEquals($expectparams, $rcp->getValue($server));
|
||
}
|
||
|
||
/**
|
||
* Data provider for testing parse_request.
|
||
*
|
||
* @return array
|
||
*/
|
||
public function parse_request_provider() {
|
||
$xml = '<?xml version="1.0" encoding="UTF-8"?>';
|
||
|
||
// This valid webservice call has one required param ('component'), and one optional param ('lang').
|
||
$validmethod = '<methodName>core_get_component_strings</methodName>';
|
||
$requiredparams = '<params><param><value><string>moodle</string></value></param></params>';
|
||
$allparams = '<params><param><value><string>moodle</string></value></param><param><value><string>en</string></value>'
|
||
. '</param></params>';
|
||
$requiredparamsnonlatin = '<params><param><value><string>ᛞᛁᛞᛃᛟᚢᚲᚾᛟᚹᛈᚺᛈᛋᚢᛈᛈᛟᚱᛏᛋᚢᛏᚠ8ᚡᚨᚱᛁᚨᛒᛚᛖᚾᚨᛗᛖᛋ</string></value></param></params>';
|
||
|
||
return [
|
||
'Valid method, required params only' => [
|
||
"{$xml}<methodCall>{$validmethod}{$requiredparams}</methodCall>",
|
||
'core_get_component_strings',
|
||
['component' => 'moodle'],
|
||
],
|
||
'Valid method, all params' => [
|
||
"{$xml}<methodCall>{$validmethod}{$allparams}</methodCall>",
|
||
'core_get_component_strings',
|
||
['component' => 'moodle', 'lang' => 'en'],
|
||
],
|
||
'Valid method required params only (non Latin)' => [
|
||
"{$xml}<methodCall>{$validmethod}{$requiredparamsnonlatin}</methodCall>",
|
||
'core_get_component_strings',
|
||
['component' => 'ᛞᛁᛞᛃᛟᚢᚲᚾᛟᚹᛈᚺᛈᛋᚢᛈᛈᛟᚱᛏᛋᚢᛏᚠ8ᚡᚨᚱᛁᚨᛒᛚᛖᚾᚨᛗᛖᛋ'],
|
||
],
|
||
];
|
||
}
|
||
}
|