From d0cff2367a6e25143af50db4df99b623411a613b Mon Sep 17 00:00:00 2001 From: Jake Dallimore Date: Mon, 5 Aug 2019 09:25:02 +0800 Subject: [PATCH] MDL-66147 mod_assign: external get_participant supports relative dates --- mod/assign/externallib.php | 8 ++-- mod/assign/tests/externallib_test.php | 60 +++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 4 deletions(-) diff --git a/mod/assign/externallib.php b/mod/assign/externallib.php index b7325e2afbd..2da9021b80d 100644 --- a/mod/assign/externallib.php +++ b/mod/assign/externallib.php @@ -2821,10 +2821,10 @@ class mod_assign_external extends external_api { 'requiregrading' => $participant->requiregrading, 'grantedextension' => $participant->grantedextension, 'blindmarking' => $assign->is_blind_marking(), - 'allowsubmissionsfromdate' => $assign->get_instance()->allowsubmissionsfromdate, - 'duedate' => $assign->get_instance()->duedate, - 'cutoffdate' => $assign->get_instance()->cutoffdate, - 'duedatestr' => userdate($assign->get_instance()->duedate, get_string('strftimedatetime', 'langconfig')), + 'allowsubmissionsfromdate' => $assign->get_instance($userid)->allowsubmissionsfromdate, + 'duedate' => $assign->get_instance($userid)->duedate, + 'cutoffdate' => $assign->get_instance($userid)->cutoffdate, + 'duedatestr' => userdate($assign->get_instance($userid)->duedate, get_string('strftimedatetime', 'langconfig')), ); if (!empty($participant->groupid)) { diff --git a/mod/assign/tests/externallib_test.php b/mod/assign/tests/externallib_test.php index dda4e5ee019..89cd0fd16e8 100644 --- a/mod/assign/tests/externallib_test.php +++ b/mod/assign/tests/externallib_test.php @@ -2467,6 +2467,66 @@ class mod_assign_external_testcase extends externallib_advanced_testcase { $this->assertEquals($group->name, $result['groupname']); } + /** + * Test get_participant() when relative dates mode is enabled on the course. + * + * @dataProvider get_participant_relative_dates_provider + * @param array $courseconfig the config to use when creating the course. + * @param array $assignconfig the config to use when creating the assignment. + * @param array $enrolconfig the enrolement to create. + * @param array $expectedproperties array of expected assign properties. + */ + public function test_get_participant_relative_dates(array $courseconfig, array $assignconfig, array $enrolconfig, + array $expectedproperties) { + $this->resetAfterTest(); + + set_config('enablecourserelativedates', true); // Enable relative dates at site level. + + $course = $this->getDataGenerator()->create_course($courseconfig); + $generator = $this->getDataGenerator()->get_plugin_generator('mod_assign'); + $assignconfig['course'] = $course->id; + $instance = $generator->create_instance($assignconfig); + $cm = get_coursemodule_from_instance('assign', $instance->id); + $context = context_module::instance($cm->id); + $assign = new assign($context, $cm, $course); + + $user = $this->getDataGenerator()->create_and_enrol($course, ...array_values($enrolconfig)); + + $teacher = $this->getDataGenerator()->create_and_enrol($course, 'teacher', null, 'manual', time() - 50 * DAYSECS); + + $this->setUser($teacher); + $result = mod_assign_external::get_participant($assign->get_instance()->id, $user->id, false); + $result = external_api::clean_returnvalue(mod_assign_external::get_participant_returns(), $result); + + foreach ($expectedproperties as $propertyname => $propertyval) { + $this->assertEquals($propertyval, $result[$propertyname]); + } + } + + /** + * The test_get_participant_relative_dates data provider. + */ + public function get_participant_relative_dates_provider() { + $timenow = time(); + + return [ + 'Student whose enrolment starts after the course start date, relative dates mode enabled' => [ + 'courseconfig' => ['relativedatesmode' => true, 'startdate' => $timenow - 10 * DAYSECS], + 'assignconfig' => ['duedate' => $timenow + 4 * DAYSECS], + 'enrolconfig' => ['shortname' => 'student', 'userparams' => null, 'method' => 'manual', + 'startdate' => $timenow - 8 * DAYSECS], + 'expectedproperties' => ['duedate' => $timenow + 6 * DAYSECS] + ], + 'Student whose enrolment starts before the course start date, relative dates mode enabled' => [ + 'courseconfig' => ['relativedatesmode' => true, 'startdate' => $timenow - 10 * DAYSECS], + 'assignconfig' => ['duedate' => $timenow + 4 * DAYSECS], + 'enrolconfig' => ['shortname' => 'student', 'userparams' => null, 'method' => 'manual', + 'startdate' => $timenow - 12 * DAYSECS], + 'expectedproperties' => ['duedate' => $timenow + 4 * DAYSECS] + ], + ]; + } + /** * Test for mod_assign_external::list_participants(). * -- 2.43.0