/** * * Tests save_definitions for the marking guide grading method */ public function test_save_definitions_marking_guide() { global $DB, $CFG, $USER; $this->resetAfterTest(true); // Create a course and assignment. $course = self::getDataGenerator()->create_course(); $generator = $this->getDataGenerator()->get_plugin_generator('mod_assign'); $params['course'] = $course->id; $instance = $generator->create_instance($params); $cm = get_coursemodule_from_instance('assign', $instance->id); $context = context_module::instance($cm->id); $coursecontext = context_course::instance($course->id); // Create the teacher. $teacher = self::getDataGenerator()->create_user(); $USER->id = $teacher->id; $teacherrole = $DB->get_record('role', array('shortname' => 'editingteacher')); $this->assignUserCapability('moodle/grade:managegradingforms', $context->id, $teacherrole->id); $this->getDataGenerator()->enrol_user($teacher->id, $course->id, $teacherrole->id); // Test insert a grading area with guide definition, criteria and comments. $gradingarea = array( 'cmid' => $cm->id, 'contextid' => $context->id, 'component' => 'mod_assign', 'areaname' => 'submissions', 'activemethod' => 'guide' ); $guidedefinition = array( 'method' => 'guide', 'name' => 'test', 'description' => '', 'status' => 20, 'copiedfromid' => 1, 'timecreated' => 1, 'usercreated' => $teacher->id, 'timemodified' => 1, 'usermodified' => $teacher->id, 'timecopied' => 0 ); $guidecomment = array( 'sortorder' => 1, 'description' => 'Students need to show that they understand the control of zoonoses', 'descriptionformat' => 0 ); $guidecriteria1 = array ( 'sortorder' => 1, 'shortname' => 'Rabies Control', 'description' => 'Understand rabies control techniques', 'descriptionformat' => 0, 'descriptionmarkers' => 'Student must demonstrate that they understand rabies control', 'descriptionmarkersformat' => 0, 'maxscore' => 50 ); $guidecriteria2 = array ( 'sortorder' => 2, 'shortname' => 'Anthrax Control', 'description' => 'Understand anthrax control', 'descriptionformat' => 0, 'descriptionmarkers' => 'Student must demonstrate that they understand anthrax control', 'descriptionmarkersformat' => 0, 'maxscore' => 50 ); $guidedefinition['guide'] = array('guide_criteria' => array($guidecriteria1, $guidecriteria2), 'guide_comments' => array($guidecomment)); $gradingarea['definitions'] = array($guidedefinition); $results = core_grading_external::save_definitions(array($gradingarea)); $area = $DB->get_record('grading_areas', array('contextid' => $context->id, 'component' => 'mod_assign', 'areaname' => 'submissions'), '*', MUST_EXIST); $this->assertEquals($area->activemethod, 'guide'); $definition = $DB->get_record('grading_definitions', array('areaid' => $area->id, 'method' => 'guide'), '*', MUST_EXIST); $this->assertEquals($guidedefinition['name'], $definition->name); $this->assertEquals(2, $DB->count_records('gradingform_guide_criteria', array('definitionid' => $definition->id))); $this->assertEquals(1, $DB->count_records('gradingform_guide_comments', array('definitionid' => $definition->id))); // Test removal of a criteria. $guidedefinition['guide'] = array('guide_criteria' => array($guidecriteria1), 'guide_comments' => array($guidecomment)); $gradingarea['definitions'] = array($guidedefinition); $results = core_grading_external::save_definitions(array($gradingarea)); $this->assertEquals(1, $DB->count_records('gradingform_guide_criteria', array('definitionid' => $definition->id))); // Test an invalid method in the definition. $guidedefinition['method'] = 'invalid'; $gradingarea['definitions'] = array($guidedefinition); $this->setExpectedException('invalid_parameter_exception'); $results = core_grading_external::save_definitions(array($gradingarea)); }