/**
  * Test get_definitions
  */
 public function test_get_definitions()
 {
     global $DB, $CFG, $USER;
     $this->resetAfterTest(true);
     // Create a course and assignment.
     $coursedata['idnumber'] = 'idnumbercourse';
     $coursedata['fullname'] = 'Lightwork Course';
     $coursedata['summary'] = 'Lightwork Course description';
     $coursedata['summaryformat'] = FORMAT_MOODLE;
     $course = self::getDataGenerator()->create_course($coursedata);
     $assigndata['course'] = $course->id;
     $assigndata['name'] = 'lightwork assignment';
     $cm = self::getDataGenerator()->create_module('assign', $assigndata);
     // Create manual enrolment record.
     $manualenroldata['enrol'] = 'manual';
     $manualenroldata['status'] = 0;
     $manualenroldata['courseid'] = $course->id;
     $enrolid = $DB->insert_record('enrol', $manualenroldata);
     // Create a teacher and give them capabilities.
     $coursecontext = context_course::instance($course->id);
     $roleid = $this->assignUserCapability('moodle/course:viewparticipants', $coursecontext->id, 3);
     $modulecontext = context_module::instance($cm->cmid);
     $this->assignUserCapability('mod/assign:grade', $modulecontext->id, $roleid);
     // Create the teacher's enrolment record.
     $userenrolmentdata['status'] = 0;
     $userenrolmentdata['enrolid'] = $enrolid;
     $userenrolmentdata['userid'] = $USER->id;
     $DB->insert_record('user_enrolments', $userenrolmentdata);
     // Create a grading area.
     $gradingarea = array('contextid' => $modulecontext->id, 'component' => 'mod_assign', 'areaname' => 'submissions', 'activemethod' => 'rubric');
     $areaid = $DB->insert_record('grading_areas', $gradingarea);
     // Create a rubric grading definition.
     $rubricdefinition = array('areaid' => $areaid, 'method' => 'rubric', 'name' => 'test', 'status' => 20, 'copiedfromid' => 1, 'timecreated' => 1, 'usercreated' => $USER->id, 'timemodified' => 1, 'usermodified' => $USER->id, 'timecopied' => 0);
     $definitionid = $DB->insert_record('grading_definitions', $rubricdefinition);
     // Create a criterion with levels.
     $rubriccriteria1 = array('definitionid' => $definitionid, 'sortorder' => 1, 'description' => 'Demonstrate an understanding of disease control', 'descriptionformat' => 0);
     $criterionid1 = $DB->insert_record('gradingform_rubric_criteria', $rubriccriteria1);
     $rubriclevel1 = array('criterionid' => $criterionid1, 'score' => 5, 'definition' => 'pass', 'definitionformat' => 0);
     $DB->insert_record('gradingform_rubric_levels', $rubriclevel1);
     $rubriclevel2 = array('criterionid' => $criterionid1, 'score' => 10, 'definition' => 'excellent', 'definitionformat' => 0);
     $DB->insert_record('gradingform_rubric_levels', $rubriclevel2);
     // Create a second criterion with levels.
     $rubriccriteria2 = array('definitionid' => $definitionid, 'sortorder' => 2, 'description' => 'Demonstrate an understanding of brucellosis', 'descriptionformat' => 0);
     $criterionid2 = $DB->insert_record('gradingform_rubric_criteria', $rubriccriteria2);
     $rubriclevel1 = array('criterionid' => $criterionid2, 'score' => 5, 'definition' => 'pass', 'definitionformat' => 0);
     $DB->insert_record('gradingform_rubric_levels', $rubriclevel1);
     $rubriclevel2 = array('criterionid' => $criterionid2, 'score' => 10, 'definition' => 'excellent', 'definitionformat' => 0);
     $DB->insert_record('gradingform_rubric_levels', $rubriclevel2);
     // Call the external function.
     $cmids = array($cm->cmid);
     $areaname = 'submissions';
     $result = core_grading_external::get_definitions($cmids, $areaname);
     $result = external_api::clean_returnvalue(core_grading_external::get_definitions_returns(), $result);
     $this->assertEquals(1, count($result['areas']));
     $this->assertEquals(1, count($result['areas'][0]['definitions']));
     $definition = $result['areas'][0]['definitions'][0];
     $this->assertEquals($rubricdefinition['method'], $definition['method']);
     $this->assertEquals($USER->id, $definition['usercreated']);
     require_once "{$CFG->dirroot}/grade/grading/lib.php";
     require_once $CFG->dirroot . '/grade/grading/form/' . $rubricdefinition['method'] . '/lib.php';
     $gradingmanager = get_grading_manager($areaid);
     $this->assertEquals(1, count($definition[$rubricdefinition['method']]));
     $rubricdetails = $definition[$rubricdefinition['method']];
     $details = call_user_func('gradingform_' . $rubricdefinition['method'] . '_controller::get_external_definition_details');
     $this->assertEquals(2, count($rubricdetails[key($details)]));
     $found = false;
     foreach ($rubricdetails[key($details)] as $criterion) {
         if ($criterion['id'] == $criterionid1) {
             $this->assertEquals($rubriccriteria1['description'], $criterion['description']);
             $this->assertEquals(2, count($criterion['levels']));
             $found = true;
             break;
         }
     }
     $this->assertTrue($found);
 }
示例#2
0
 public static function get_definitions_returns()
 {
     return core_grading_external::get_definitions_returns();
 }