Commit 2c1080ef authored by Marina Glancy's avatar Marina Glancy
Browse files

MDL-60091 webservice: enhancements to WS test client

parent 9a316f33
......@@ -54,7 +54,7 @@ foreach ($allfunctions as $f) {
//some plugins may want to have own test client forms
include_once($CFG->dirroot.'/'.$finfo->testclientpath);
}
$class = $f->name.'_form';
$class = $f->name.'_testclient_form';
if (class_exists($class)) {
$functions[$f->name] = $f->name;
continue;
......@@ -103,7 +103,7 @@ if (!$function or !$protocol) {
die;
}
$class = $function.'_form';
$class = $function.'_testclient_form';
$mform = new $class(null, array('authmethod' => $authmethod));
$mform->set_data(array('function'=>$function, 'protocol'=>$protocol));
......
......@@ -29,19 +29,23 @@ class webservice_test_client_form extends moodleform {
// === Test client forms ===
/**
* Form class for create_categories() web service function test.
* Base class for implementations of WS test client forms.
*
* @package core_webservice
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @copyright 2012 Fabio Souto
* @copyright 2017 Marina Glancy
*/
class core_course_create_categories_form extends moodleform {
abstract class webservice_test_client_base_form extends moodleform {
/**
* Definition of the parameters used by this WS function
*/
protected abstract function test_client_definition();
/**
* The form definition.
*/
public function definition() {
global $CFG;
$mform = $this->_form;
$mform->addElement('header', 'wstestclienthdr', get_string('testclient', 'webservice'));
......@@ -59,19 +63,7 @@ class core_course_create_categories_form extends moodleform {
}
$mform->addElement('hidden', 'authmethod', $data['authmethod']);
$mform->setType('authmethod', core_user::get_property_type('auth'));
$mform->addElement('text', 'name[0]', 'name[0]');
$mform->addElement('text', 'parent[0]', 'parent[0]');
$mform->addElement('text', 'idnumber[0]', 'idnumber[0]');
$mform->addElement('text', 'description[0]', 'description[0]');
$mform->addElement('text', 'name[1]', 'name[1]');
$mform->addElement('text', 'parent[1]', 'parent[1]');
$mform->addElement('text', 'idnumber[1]', 'idnumber[1]');
$mform->addElement('text', 'description[1]', 'description[1]');
$mform->setType('name', core_user::get_property_type('firstname'));
$mform->setType('parent', core_user::get_property_type('id'));
$mform->setType('idnumber', core_user::get_property_type('idnumber'));
$mform->setType('description', core_user::get_property_type('description'));
$mform->setType('authmethod', PARAM_ALPHA);
$mform->addElement('hidden', 'function');
$mform->setType('function', PARAM_PLUGIN);
......@@ -79,6 +71,8 @@ class core_course_create_categories_form extends moodleform {
$mform->addElement('hidden', 'protocol');
$mform->setType('protocol', PARAM_ALPHA);
$this->test_client_definition();
$this->add_action_buttons(true, get_string('execute', 'webservice'));
}
......@@ -90,19 +84,51 @@ class core_course_create_categories_form extends moodleform {
if (!$data = $this->get_data()) {
return null;
}
// Remove unused from form data.
unset($data->submitbutton);
unset($data->protocol);
unset($data->function);
unset($data->wsusername);
unset($data->wspassword);
unset($data->token);
unset($data->authmethod);
return array_diff_key((array)$data, ['submitbutton' => 1, 'protocol' => 1, 'function' => 1,
'wsusername' => 1, 'wspassword' => 1, 'token' => 1, 'authmethod' => 1]);
}
}
/**
* Form class for create_categories() web service function test.
*
* @package core_webservice
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @copyright 2012 Fabio Souto
*/
class core_course_create_categories_testclient_form extends webservice_test_client_base_form {
/**
* The form definition.
*/
protected function test_client_definition() {
$mform = $this->_form;
$mform->addElement('text', 'name[0]', 'name[0]');
$mform->addElement('text', 'parent[0]', 'parent[0]');
$mform->addElement('text', 'idnumber[0]', 'idnumber[0]');
$mform->addElement('text', 'description[0]', 'description[0]');
$mform->addElement('text', 'name[1]', 'name[1]');
$mform->addElement('text', 'parent[1]', 'parent[1]');
$mform->addElement('text', 'idnumber[1]', 'idnumber[1]');
$mform->addElement('text', 'description[1]', 'description[1]');
$mform->setType('name', PARAM_TEXT);
$mform->setType('parent', PARAM_INT);
$mform->setType('idnumber', PARAM_RAW);
$mform->setType('description', PARAM_RAW);
}
/**
* Get the parameters that the user submitted using the form.
* @return array|null
*/
public function get_params() {
if (!$data = $this->get_data()) {
return null;
}
$params = array();
$params['categories'] = array();
for ($i=0; $i<10; $i++) {
if (empty($data->name[$i]) or empty($data->parent[$i])) {
if (empty($data->name[$i])) {
continue;
}
$params['categories'][] = array('name'=>$data->name[$i], 'parent'=>$data->parent[$i],
......@@ -119,48 +145,21 @@ class core_course_create_categories_form extends moodleform {
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @copyright 2012 Fabio Souto
*/
class core_course_delete_categories_form extends moodleform {
class core_course_delete_categories_testclient_form extends webservice_test_client_base_form {
/**
* The form definition.
*/
public function definition() {
global $CFG;
protected function test_client_definition() {
$mform = $this->_form;
$mform->addElement('header', 'wstestclienthdr', get_string('testclient', 'webservice'));
// Note: these values are intentionally PARAM_RAW - we want users to test any rubbish as parameters.
$data = $this->_customdata;
if ($data['authmethod'] == 'simple') {
$mform->addElement('text', 'wsusername', 'wsusername');
$mform->setType('wsusername', core_user::get_property_type('username'));
$mform->addElement('text', 'wspassword', 'wspassword');
$mform->setType('wspassword', core_user::get_property_type('password'));
} else if ($data['authmethod'] == 'token') {
$mform->addElement('text', 'token', 'token');
$mform->setType('token', PARAM_RAW_TRIMMED);
}
$mform->addElement('hidden', 'authmethod', $data['authmethod']);
$mform->setType('authmethod', core_user::get_property_type('auth'));
$mform->addElement('text', 'id[0]', 'id[0]');
$mform->addElement('text', 'newparent[0]', 'newparent[0]');
$mform->addElement('text', 'recursive[0]', 'recursive[0]');
$mform->addElement('text', 'id[1]', 'id[1]');
$mform->addElement('text', 'newparent[1]', 'newparent[1]');
$mform->addElement('text', 'recursive[1]', 'recursive[1]');
$mform->setType('id', core_user::get_property_type('id'));
$mform->setType('id', PARAM_INT);
$mform->setType('newparent', PARAM_INT);
$mform->setType('recursive', PARAM_BOOL);
$mform->addElement('hidden', 'function');
$mform->setType('function', PARAM_PLUGIN);
$mform->addElement('hidden', 'protocol');
$mform->setType('protocol', PARAM_ALPHA);
$this->add_action_buttons(true, get_string('execute', 'webservice'));
}
/**
......@@ -171,15 +170,6 @@ class core_course_delete_categories_form extends moodleform {
if (!$data = $this->get_data()) {
return null;
}
// Remove unused from form data.
unset($data->submitbutton);
unset($data->protocol);
unset($data->function);
unset($data->wsusername);
unset($data->wspassword);
unset($data->token);
unset($data->authmethod);
$params = array();
$params['categories'] = array();
for ($i=0; $i<10; $i++) {
......@@ -207,31 +197,12 @@ class core_course_delete_categories_form extends moodleform {
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @copyright 2012 Fabio Souto
*/
class core_course_update_categories_form extends moodleform {
class core_course_update_categories_testclient_form extends webservice_test_client_base_form {
/**
* The form definition.
*/
public function definition() {
global $CFG;
protected function test_client_definition() {
$mform = $this->_form;
$mform->addElement('header', 'wstestclienthdr', get_string('testclient', 'webservice'));
// Note: these values are intentionally PARAM_RAW - we want users to test any rubbish as parameters.
$data = $this->_customdata;
if ($data['authmethod'] == 'simple') {
$mform->addElement('text', 'wsusername', 'wsusername');
$mform->setType('wsusername', core_user::get_property_type('username'));
$mform->addElement('text', 'wspassword', 'wspassword');
$mform->setType('wspassword', core_user::get_property_type('password'));
} else if ($data['authmethod'] == 'token') {
$mform->addElement('text', 'token', 'token');
$mform->setType('token', PARAM_RAW_TRIMMED);
}
$mform->addElement('hidden', 'authmethod', $data['authmethod']);
$mform->setType('authmethod', core_user::get_property_type('auth'));
$mform->addElement('text', 'id[0]', 'id[0]');
$mform->addElement('text', 'name[0]', 'name[0]');
$mform->addElement('text', 'parent[0]', 'parent[0]');
......@@ -242,19 +213,11 @@ class core_course_update_categories_form extends moodleform {
$mform->addElement('text', 'parent[1]', 'parent[1]');
$mform->addElement('text', 'idnumber[1]', 'idnumber[1]');
$mform->addElement('text', 'description[1]', 'description[1]');
$mform->setType('id', core_user::get_property_type('id'));
$mform->setType('name', core_user::get_property_type('firstname'));
$mform->setType('id', PARAM_INT);
$mform->setType('name', PARAM_TEXT);
$mform->setType('parent', PARAM_INT);
$mform->setType('idnumber', core_user::get_property_type('idnumber'));
$mform->setType('description', core_user::get_property_type('description'));
$mform->addElement('hidden', 'function');
$mform->setType('function', PARAM_PLUGIN);
$mform->addElement('hidden', 'protocol');
$mform->setType('protocol', PARAM_ALPHA);
$this->add_action_buttons(true, get_string('execute', 'webservice'));
$mform->setType('idnumber', PARAM_RAW);
$mform->setType('description', PARAM_RAW);
}
/**
......@@ -265,15 +228,6 @@ class core_course_update_categories_form extends moodleform {
if (!$data = $this->get_data()) {
return null;
}
// Remove unused from form data.
unset($data->submitbutton);
unset($data->protocol);
unset($data->function);
unset($data->wsusername);
unset($data->wspassword);
unset($data->token);
unset($data->authmethod);
$params = array();
$params['categories'] = array();
for ($i=0; $i<10; $i++) {
......@@ -299,4 +253,100 @@ class core_course_update_categories_form extends moodleform {
}
return $params;
}
}
\ No newline at end of file
}
/**
* Test class for WS function core_fetch_notifications
*
* @package core_webservice
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @copyright 2017 Marina Glancy
*/
class core_fetch_notifications_testclient_form extends webservice_test_client_base_form {
/**
* The form definition.
*/
protected function test_client_definition() {
$mform = $this->_form;
$mform->addElement('text', 'contextid', 'contextid');
$mform->setType('contextid', PARAM_INT);
$mform->setDefault('contextid', context_system::instance()->id);
}
}
/**
* Test class for WS function get_site_info
*
* @package core_webservice
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @copyright 2017 Marina Glancy
*/
class core_webservice_get_site_info_testclient_form extends webservice_test_client_base_form {
/**
* The form definition.
*/
protected function test_client_definition() {
}
}
/**
* Test class for WS function core_get_string
*
* @package core_webservice
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @copyright 2017 Marina Glancy
*/
class core_get_string_testclient_form extends webservice_test_client_base_form {
/**
* The form definition.
*/
protected function test_client_definition() {
$mform = $this->_form;
$mform->addElement('text', 'stringid', 'stringid');
$mform->setType('stringid', PARAM_STRINGID);
$mform->addElement('text', 'component', 'component');
$mform->setType('component', PARAM_COMPONENT);
$mform->addElement('text', 'lang', 'lang');
$mform->setType('lang', PARAM_LANG);
$mform->addElement('text', 'stringparams_name[1]', 'Parameter 1 name');
$mform->setType('stringparams_name[1]', PARAM_ALPHANUMEXT);
$mform->addElement('text', 'stringparams_value[1]', 'Parameter 1 value');
$mform->setType('stringparams_value[1]', PARAM_RAW);
$mform->addElement('text', 'stringparams_name[2]', 'Parameter 2 name');
$mform->setType('stringparams_name[2]', PARAM_ALPHANUMEXT);
$mform->addElement('text', 'stringparams_value[2]', 'Parameter 2 value');
$mform->setType('stringparams_value[2]', PARAM_RAW);
$mform->addElement('text', 'stringparams_name[3]', 'Parameter 3 name');
$mform->setType('stringparams_name[3]', PARAM_ALPHANUMEXT);
$mform->addElement('text', 'stringparams_value[3]', 'Parameter 3 value');
$mform->setType('stringparams_value[3]', PARAM_RAW);
$mform->addElement('static', 'paramnote', '', 'If a parameter is not an object, only specify "Parameter 1 value"');
}
/**
* Get the parameters that the user submitted using the form.
* @return array|null
*/
public function get_params() {
$params = parent::get_params();
if ($params === null) {
return null;
}
$params['stringparams'] = [];
for ($idx = 1; $idx <= 3; $idx++) {
$name = isset($params['stringparams_name'][$idx]) ? strval($params['stringparams_name'][$idx]) : '';
$value = isset($params['stringparams_value'][$idx]) ? strval($params['stringparams_value'][$idx]) : '';
if ($name !== '' || $value !== '') {
if ($name === '') {
$params['stringparams'][] = ['value' => $value];
} else {
$params['stringparams'][] = ['name' => $name, 'value' => $value];
}
}
}
unset($params['stringparams_name']);
unset($params['stringparams_value']);
return $params;
}
}
......@@ -7,6 +7,9 @@ This information is intended for authors of webservices, not people writing webs
* External function core_webservice_external::get_site_info() now returns the calendar type used in the site and
by the user in the sitecalendartype and usercalendartype fields.
* Implementations of forms for test clients now must follow naming schema: WSFUNCTIONNAME_testclient_form
The old naming schema WSFUNCTIONNAME_form caused conflicts with existing classes.
New class webservice_test_client_base_form can be used as a base class for such forms.
=== 3.2 ===
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment