/** * Test view_grade_report function */ public function test_view_grade_report() { global $USER; $this->resetAfterTest(true); $s1grade = 80; $s2grade = 60; list($course, $teacher, $student1, $student2) = $this->load_data($s1grade, $s2grade); // Redirect events to the sink, so we can recover them later. $sink = $this->redirectEvents(); $this->setUser($student1); $result = gradereport_user_external::view_grade_report($course->id); $result = external_api::clean_returnvalue(gradereport_user_external::view_grade_report_returns(), $result); $events = $sink->get_events(); $this->assertCount(1, $events); $event = reset($events); // Check the event details are correct. $this->assertInstanceOf('\\gradereport_user\\event\\grade_report_viewed', $event); $this->assertEquals(context_course::instance($course->id), $event->get_context()); $this->assertEquals($USER->id, $event->get_data()['relateduserid']); $this->setUser($teacher); $result = gradereport_user_external::view_grade_report($course->id, $student1->id); $result = external_api::clean_returnvalue(gradereport_user_external::view_grade_report_returns(), $result); $events = $sink->get_events(); $event = reset($events); $sink->close(); // Check the event details are correct. $this->assertInstanceOf('\\gradereport_user\\event\\grade_report_viewed', $event); $this->assertEquals(context_course::instance($course->id), $event->get_context()); $this->assertEquals($student1->id, $event->get_data()['relateduserid']); $this->setUser($student2); try { $studentgrade = gradereport_user_external::view_grade_report($course->id, $student1->id); $this->fail('Exception expected due to not permissions to view other user grades.'); } catch (moodle_exception $e) { $this->assertEquals('nopermissiontoviewgrades', $e->errorcode); } }
/** * Test get_grades_items function case student */ public function test_get_grade_items_student() { $this->resetAfterTest(true); $s1grade = 80; $s2grade = 60; list($course, $teacher, $student1, $student2, $assignment) = $this->load_data($s1grade, $s2grade); grade_set_setting($course->id, 'report_user_showrank', 1); grade_set_setting($course->id, 'report_user_showpercentage', 1); grade_set_setting($course->id, 'report_user_showgrade', 1); grade_set_setting($course->id, 'report_user_showfeedback', 1); grade_set_setting($course->id, 'report_user_showweight', 1); grade_set_setting($course->id, 'report_user_showcontributiontocoursetotal', 1); grade_set_setting($course->id, 'report_user_showlettergrade', 1); grade_set_setting($course->id, 'report_user_showaverage', 1); $this->setUser($student1); $studentgrades = gradereport_user_external::get_grade_items($course->id, $student1->id); $studentgrades = external_api::clean_returnvalue(gradereport_user_external::get_grade_items_returns(), $studentgrades); // No warnings returned. $this->assertCount(0, $studentgrades['warnings']); // Check that only grades for the student in the teacher group are returned. $this->assertCount(1, $studentgrades['usergrades']); $this->assertCount(2, $studentgrades['usergrades'][0]['gradeitems']); $this->assertEquals($course->id, $studentgrades['usergrades'][0]['courseid']); $this->assertEquals($student1->id, $studentgrades['usergrades'][0]['userid']); $this->assertEquals('mod', $studentgrades['usergrades'][0]['gradeitems'][0]['itemtype']); $this->assertEquals('assign', $studentgrades['usergrades'][0]['gradeitems'][0]['itemmodule']); $this->assertEquals($assignment->id, $studentgrades['usergrades'][0]['gradeitems'][0]['iteminstance']); $this->assertEquals($assignment->cmidnumber, $studentgrades['usergrades'][0]['gradeitems'][0]['cmid']); $this->assertEquals(0, $studentgrades['usergrades'][0]['gradeitems'][0]['itemnumber']); $this->assertEmpty($studentgrades['usergrades'][0]['gradeitems'][0]['outcomeid']); $this->assertEmpty($studentgrades['usergrades'][0]['gradeitems'][0]['scaleid']); $this->assertEquals(80, $studentgrades['usergrades'][0]['gradeitems'][0]['graderaw']); $this->assertEquals('80.00', $studentgrades['usergrades'][0]['gradeitems'][0]['gradeformatted']); $this->assertEquals(0, $studentgrades['usergrades'][0]['gradeitems'][0]['grademin']); $this->assertEquals(100, $studentgrades['usergrades'][0]['gradeitems'][0]['grademax']); $this->assertEquals('0–100', $studentgrades['usergrades'][0]['gradeitems'][0]['rangeformatted']); $this->assertEquals('80.00 %', $studentgrades['usergrades'][0]['gradeitems'][0]['percentageformatted']); $this->assertEmpty($studentgrades['usergrades'][0]['gradeitems'][0]['feedback']); $this->assertFalse($studentgrades['usergrades'][0]['gradeitems'][0]['gradehiddenbydate']); $this->assertFalse($studentgrades['usergrades'][0]['gradeitems'][0]['gradeneedsupdate']); $this->assertFalse($studentgrades['usergrades'][0]['gradeitems'][0]['gradeishidden']); $this->assertEquals('B-', $studentgrades['usergrades'][0]['gradeitems'][0]['lettergradeformatted']); $this->assertEquals(1, $studentgrades['usergrades'][0]['gradeitems'][0]['rank']); $this->assertEquals(2, $studentgrades['usergrades'][0]['gradeitems'][0]['numusers']); $this->assertEquals(70, $studentgrades['usergrades'][0]['gradeitems'][0]['averageformatted']); // Hide one grade for the user. $gradegrade = new grade_grade(array('userid' => $student1->id, 'itemid' => $studentgrades['usergrades'][0]['gradeitems'][0]['id']), true); $gradegrade->set_hidden(1); $studentgrades = gradereport_user_external::get_grade_items($course->id, $student1->id); $studentgrades = external_api::clean_returnvalue(gradereport_user_external::get_grade_items_returns(), $studentgrades); // Check we get only the course final grade. $this->assertCount(1, $studentgrades['usergrades']); $this->assertCount(1, $studentgrades['usergrades'][0]['gradeitems']); $this->assertEquals('course', $studentgrades['usergrades'][0]['gradeitems'][0]['itemtype']); }
/** * Test get_grades_table function case incorrect permissions */ public function test_get_grades_table_permissions() { global $CFG, $DB; $this->resetAfterTest(true); $s1grade = 80; $s2grade = 60; list($course, $teacher, $student1, $student2) = $this->load_data($s1grade, $s2grade); $this->setUser($student2); try { $studentgrade = gradereport_user_external::get_grades_table($course->id, $student1->id); $this->fail('Exception expected due to not perissions to view other user grades.'); } catch (moodle_exception $e) { $this->assertEquals('nopermissiontoviewgrades', $e->errorcode); } }