mirror of
https://github.com/moodle/moodle.git
synced 2025-08-09 02:46:40 +02:00
MDL-66489 enrol: Send all form data to WS and do all busines logic there
It is discouraged to use JS Date functions. We should pass all raw data to PHP.
This commit is contained in:
parent
310d6901f9
commit
2d4ce64dde
8 changed files with 247 additions and 45 deletions
|
@ -958,6 +958,155 @@ class core_enrol_externallib_testcase extends externallib_advanced_testcase {
|
|||
$this->assertEquals(ENROL_USER_SUSPENDED, $ue->status);
|
||||
}
|
||||
|
||||
/**
|
||||
* dataProvider for test_submit_user_enrolment_form().
|
||||
*/
|
||||
public function submit_user_enrolment_form_provider() {
|
||||
$now = new DateTime();
|
||||
|
||||
$nextmonth = clone($now);
|
||||
$nextmonth->add(new DateInterval('P1M'));
|
||||
|
||||
return [
|
||||
'Invalid data' => [
|
||||
'customdata' => [
|
||||
'status' => ENROL_USER_ACTIVE,
|
||||
'timestart' => [
|
||||
'day' => $now->format('j'),
|
||||
'month' => $now->format('n'),
|
||||
'year' => $now->format('Y'),
|
||||
'hour' => $now->format('G'),
|
||||
'minute' => 0,
|
||||
'enabled' => 1,
|
||||
],
|
||||
'timeend' => [
|
||||
'day' => $now->format('j'),
|
||||
'month' => $now->format('n'),
|
||||
'year' => $now->format('Y'),
|
||||
'hour' => $now->format('G'),
|
||||
'minute' => 0,
|
||||
'enabled' => 1,
|
||||
],
|
||||
],
|
||||
'expectedresult' => false,
|
||||
'validationerror' => true,
|
||||
],
|
||||
'Valid data' => [
|
||||
'customdata' => [
|
||||
'status' => ENROL_USER_ACTIVE,
|
||||
'timestart' => [
|
||||
'day' => $now->format('j'),
|
||||
'month' => $now->format('n'),
|
||||
'year' => $now->format('Y'),
|
||||
'hour' => $now->format('G'),
|
||||
'minute' => 0,
|
||||
'enabled' => 1,
|
||||
],
|
||||
'timeend' => [
|
||||
'day' => $nextmonth->format('j'),
|
||||
'month' => $nextmonth->format('n'),
|
||||
'year' => $nextmonth->format('Y'),
|
||||
'hour' => $nextmonth->format('G'),
|
||||
'minute' => 0,
|
||||
'enabled' => 1,
|
||||
],
|
||||
],
|
||||
'expectedresult' => true,
|
||||
'validationerror' => false
|
||||
],
|
||||
'Suspend user' => [
|
||||
'customdata' => [
|
||||
'status' => ENROL_USER_SUSPENDED,
|
||||
],
|
||||
'expectedresult' => true,
|
||||
'validationerror' => false
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $customdata The data we are providing to the webservice.
|
||||
* @param bool $expectedresult The result we are expecting to receive from the webservice.
|
||||
* @param bool $validationerror The validationerror we are expecting to receive from the webservice.
|
||||
* @dataProvider submit_user_enrolment_form_provider
|
||||
*/
|
||||
public function test_submit_user_enrolment_form($customdata, $expectedresult, $validationerror) {
|
||||
global $CFG, $DB;
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
$datagen = $this->getDataGenerator();
|
||||
|
||||
/** @var enrol_manual_plugin $manualplugin */
|
||||
$manualplugin = enrol_get_plugin('manual');
|
||||
|
||||
$studentroleid = $DB->get_field('role', 'id', ['shortname' => 'student'], MUST_EXIST);
|
||||
$teacherroleid = $DB->get_field('role', 'id', ['shortname' => 'editingteacher'], MUST_EXIST);
|
||||
$course = $datagen->create_course();
|
||||
$user = $datagen->create_user();
|
||||
$teacher = $datagen->create_user();
|
||||
|
||||
$instanceid = null;
|
||||
$instances = enrol_get_instances($course->id, true);
|
||||
foreach ($instances as $inst) {
|
||||
if ($inst->enrol == 'manual') {
|
||||
$instanceid = (int)$inst->id;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (empty($instanceid)) {
|
||||
$instanceid = $manualplugin->add_default_instance($course);
|
||||
if (empty($instanceid)) {
|
||||
$instanceid = $manualplugin->add_instance($course);
|
||||
}
|
||||
}
|
||||
$this->assertNotNull($instanceid);
|
||||
|
||||
$instance = $DB->get_record('enrol', ['id' => $instanceid], '*', MUST_EXIST);
|
||||
$manualplugin->enrol_user($instance, $user->id, $studentroleid, 0, 0, ENROL_USER_ACTIVE);
|
||||
$manualplugin->enrol_user($instance, $teacher->id, $teacherroleid, 0, 0, ENROL_USER_ACTIVE);
|
||||
$ueid = (int) $DB->get_field(
|
||||
'user_enrolments',
|
||||
'id',
|
||||
['enrolid' => $instance->id, 'userid' => $user->id],
|
||||
MUST_EXIST
|
||||
);
|
||||
|
||||
// Login as teacher.
|
||||
$teacher->ignoresesskey = true;
|
||||
$this->setUser($teacher);
|
||||
|
||||
$formdata = [
|
||||
'ue' => $ueid,
|
||||
'ifilter' => 0,
|
||||
'status' => null,
|
||||
'timestart' => null,
|
||||
'duration' => null,
|
||||
'timeend' => null,
|
||||
];
|
||||
|
||||
$formdata = array_merge($formdata, $customdata);
|
||||
|
||||
require_once("$CFG->dirroot/enrol/editenrolment_form.php");
|
||||
$formdata = enrol_user_enrolment_form::mock_generate_submit_keys($formdata);
|
||||
|
||||
$querystring = http_build_query($formdata, '', '&');
|
||||
|
||||
$result = external_api::clean_returnvalue(
|
||||
core_enrol_external::submit_user_enrolment_form_returns(),
|
||||
core_enrol_external::submit_user_enrolment_form($querystring)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
['result' => $expectedresult, 'validationerror' => $validationerror],
|
||||
$result,
|
||||
'', 0.0, 10, true);
|
||||
|
||||
if ($result['result']) {
|
||||
$ue = $DB->get_record('user_enrolments', ['id' => $ueid], '*', MUST_EXIST);
|
||||
$this->assertEquals($formdata['status'], $ue->status);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for core_enrol_external::unenrol_user_enrolment().
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue