/** * Test save_grade */ public function test_save_grade() { global $DB, $USER; $this->resetAfterTest(true); // Create a course and assignment and users. $course = self::getDataGenerator()->create_course(); $teacher = self::getDataGenerator()->create_user(); $teacherrole = $DB->get_record('role', array('shortname' => 'teacher')); $this->getDataGenerator()->enrol_user($teacher->id, $course->id, $teacherrole->id); $this->setUser($teacher); $generator = $this->getDataGenerator()->get_plugin_generator('mod_assign'); $params['course'] = $course->id; $params['assignfeedback_file_enabled'] = 1; $params['assignfeedback_comments_enabled'] = 1; $instance = $generator->create_instance($params); $cm = get_coursemodule_from_instance('assign', $instance->id); $context = context_module::instance($cm->id); $assign = new assign($context, $cm, $course); $student1 = self::getDataGenerator()->create_user(); $student2 = self::getDataGenerator()->create_user(); $studentrole = $DB->get_record('role', array('shortname' => 'student')); $this->getDataGenerator()->enrol_user($student1->id, $course->id, $studentrole->id); $this->getDataGenerator()->enrol_user($student2->id, $course->id, $studentrole->id); // Simulate a grade. $this->setUser($teacher); // Create a file in a draft area. $draftidfile = file_get_unused_draft_itemid(); $usercontext = context_user::instance($teacher->id); $filerecord = array('contextid' => $usercontext->id, 'component' => 'user', 'filearea' => 'draft', 'itemid' => $draftidfile, 'filepath' => '/', 'filename' => 'testtext.txt'); $fs = get_file_storage(); $fs->create_file_from_string($filerecord, 'text contents'); // Now try a grade. $feedbackpluginparams = array(); $feedbackpluginparams['files_filemanager'] = $draftidfile; $feedbackeditorparams = array('text' => 'Yeeha!', 'format' => 1); $feedbackpluginparams['assignfeedbackcomments_editor'] = $feedbackeditorparams; $result = mod_assign_external::save_grade($instance->id, $student1->id, 50.0, -1, true, 'released', false, $feedbackpluginparams); // No warnings. $this->assertNull($result); $result = mod_assign_external::get_grades(array($instance->id)); $result = external_api::clean_returnvalue(mod_assign_external::get_grades_returns(), $result); $this->assertEquals($result['assignments'][0]['grades'][0]['grade'], '50.0'); }
/** * Test get_grades */ public function test_get_grades() { global $DB, $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'; $assign = self::getDataGenerator()->create_module('assign', $assigndata); // Create a 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. $context = context_course::instance($course->id); $roleid = $this->assignUserCapability('moodle/course:viewparticipants', $context->id, 3); $context = context_module::instance($assign->cmid); $this->assignUserCapability('mod/assign:grade', $context->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 student and give them 2 grades (for 2 attempts). $student = self::getDataGenerator()->create_user(); $grade = new stdClass(); $grade->assignment = $assign->id; $grade->userid = $student->id; $grade->timecreated = time(); $grade->timemodified = $grade->timecreated; $grade->grader = $USER->id; $grade->grade = 50; $grade->attemptnumber = 0; $DB->insert_record('assign_grades', $grade); $grade = new stdClass(); $grade->assignment = $assign->id; $grade->userid = $student->id; $grade->timecreated = time(); $grade->timemodified = $grade->timecreated; $grade->grader = $USER->id; $grade->grade = 75; $grade->attemptnumber = 1; $DB->insert_record('assign_grades', $grade); $assignmentids[] = $assign->id; $result = mod_assign_external::get_grades($assignmentids); // We need to execute the return values cleaning process to simulate the web service server. $result = external_api::clean_returnvalue(mod_assign_external::get_grades_returns(), $result); // Check that the correct grade information for the student is returned. $this->assertEquals(1, count($result['assignments'])); $assignment = $result['assignments'][0]; $this->assertEquals($assign->id, $assignment['assignmentid']); // Should only get the last grade for this student. $this->assertEquals(1, count($assignment['grades'])); $grade = $assignment['grades'][0]; $this->assertEquals($student->id, $grade['userid']); // Should be the last grade (not the first). $this->assertEquals(75, $grade['grade']); }