diff --git a/notes/tests/externallib_test.php b/notes/tests/externallib_test.php index 72af7f91e1fd4..7005466e3d032 100644 --- a/notes/tests/externallib_test.php +++ b/notes/tests/externallib_test.php @@ -240,4 +240,121 @@ public function test_update_notes() { $notes2 = array($note2); $updatednotes = core_notes_external::update_notes($notes2); } + + /** + * Test get_course_notes + */ + public function test_get_course_notes() { + global $DB, $CFG; + + $this->resetAfterTest(true); + $CFG->enablenotes = true; + + // Take role definitions. + $studentrole = $DB->get_record('role', array('shortname' => 'student')); + $teacherrole = $DB->get_record('role', array('shortname' => 'teacher')); + + // Create students and teachers. + $student1 = $this->getDataGenerator()->create_user(); + $student2 = $this->getDataGenerator()->create_user(); + $teacher1 = $this->getDataGenerator()->create_user(); + $teacher2 = $this->getDataGenerator()->create_user(); + $course1 = $this->getDataGenerator()->create_course(); + $course2 = $this->getDataGenerator()->create_course(); + + // Enroll students and teachers to COURSE-1. + $this->getDataGenerator()->enrol_user($student1->id, $course1->id, $studentrole->id); + $this->getDataGenerator()->enrol_user($student2->id, $course1->id, $studentrole->id); + $this->getDataGenerator()->enrol_user($teacher1->id, $course1->id, $teacherrole->id); + $this->getDataGenerator()->enrol_user($teacher2->id, $course1->id, $teacherrole->id); + // Enroll students and teachers to COURSE-2 (teacher1 is not enrolled in Course 2). + $this->getDataGenerator()->enrol_user($student1->id, $course2->id, $studentrole->id); + $this->getDataGenerator()->enrol_user($student2->id, $course2->id, $studentrole->id); + + $this->getDataGenerator()->enrol_user($teacher2->id, $course2->id, $teacherrole->id); + + // Generate notes. + $gen = $this->getDataGenerator()->get_plugin_generator('core_notes'); + + $this->setUser($teacher1); + + // NoteA1: on student1 (Course1) by Teacher1. + $params = array('courseid' => $course1->id, 'userid' => $student1->id, 'publishstate' => NOTES_STATE_PUBLIC, + 'usermodified' => $teacher1->id); + $notea1 = $gen->create_instance($params); + // NoteA2: on student1 (Course1) by Teacher1. + $params = array('courseid' => $course1->id, 'userid' => $student1->id, 'publishstate' => NOTES_STATE_PUBLIC, + 'usermodified' => $teacher1->id); + $notea2 = $gen->create_instance($params); + // NoteS1: on student1 SITE-LEVEL by teacher1. + $params = array('courseid' => $course1->id, 'userid' => $student1->id, 'publishstate' => NOTES_STATE_SITE, + 'usermodified' => $teacher1->id); + $notes1 = $gen->create_instance($params); + // NoteP1: on student1 PERSONAL by teacher1. + $params = array('courseid' => $course1->id, 'userid' => $student1->id, 'publishstate' => NOTES_STATE_DRAFT, + 'usermodified' => $teacher1->id); + $notep1 = $gen->create_instance($params); + // NoteB1: on student1 (Course2) by teacher1. + $params = array('courseid' => $course2->id, 'userid' => $student1->id, 'publishstate' => NOTES_STATE_PUBLIC, + 'usermodified' => $teacher1->id); + $noteb1 = $gen->create_instance($params); + + // Retrieve notes, normal case. + $result = core_notes_external::get_course_notes($course1->id, $student1->id); + $result = external_api::clean_returnvalue(core_notes_external::get_course_notes_returns(), $result); + $this->assertEquals($notes1->id, $result['sitenotes'][0]['id']); + $this->assertEquals($notea1->id, $result['coursenotes'][0]['id']); + $this->assertEquals($notep1->id, $result['personalnotes'][0]['id']); + + // Try to get notes from a course the user is not enrolled. + try { + $result = core_notes_external::get_course_notes($course2->id, $student1->id); + $this->fail('the user is not enrolled in the course'); + } catch (require_login_exception $e) { + $this->assertEquals('requireloginerror', $e->errorcode); + } + + $result = core_notes_external::get_course_notes(0, $student1->id); + $result = external_api::clean_returnvalue(core_notes_external::get_course_notes_returns(), $result); + $this->assertEmpty($result['sitenotes']); + $this->assertEquals($notea1->id, $result['coursenotes'][0]['id']); + $this->assertEquals($notea2->id, $result['coursenotes'][1]['id']); + $this->assertCount(2, $result['coursenotes']); + + $this->setAdminUser(); + $result = core_notes_external::get_course_notes(0, $student1->id); + $result = external_api::clean_returnvalue(core_notes_external::get_course_notes_returns(), $result); + $this->assertEquals($notes1->id, $result['sitenotes'][0]['id']); + $this->assertCount(1, $result['sitenotes']); + + $this->setUser($teacher1); + $result = core_notes_external::get_course_notes(0, 0); + $result = external_api::clean_returnvalue(core_notes_external::get_course_notes_returns(), $result); + $this->assertEmpty($result['sitenotes']); + $this->assertEmpty($result['coursenotes']); + $this->assertEmpty($result['personalnotes']); + + $this->setUser($teacher2); + $result = core_notes_external::get_course_notes($course1->id, $student1->id); + $result = external_api::clean_returnvalue(core_notes_external::get_course_notes_returns(), $result); + $this->assertEquals($notes1->id, $result['sitenotes'][0]['id']); + $this->assertEquals($notea1->id, $result['coursenotes'][0]['id']); + $this->assertCount(1, $result['sitenotes']); + $this->assertCount(2, $result['coursenotes']); + + $result = core_notes_external::get_course_notes($course1->id, 0); + $result = external_api::clean_returnvalue(core_notes_external::get_course_notes_returns(), $result); + $this->assertEquals($notes1->id, $result['sitenotes'][0]['id']); + $this->assertEquals($notea1->id, $result['coursenotes'][0]['id']); + $this->assertEquals($notea2->id, $result['coursenotes'][1]['id']); + $this->assertCount(1, $result['sitenotes']); + $this->assertCount(2, $result['coursenotes']); + + $this->setUser($teacher1); + $result = core_notes_external::get_course_notes($course1->id, 0); + $result = external_api::clean_returnvalue(core_notes_external::get_course_notes_returns(), $result); + $this->assertEquals($notep1->id, $result['personalnotes'][0]['id']); + $this->assertCount(1, $result['personalnotes']); + + } } diff --git a/version.php b/version.php index 9495a9cdcef6e..9172a176a33d1 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2015032600.00; // YYYYMMDD = weekly release date of this DEV branch. +$version = 2015032600.01; // YYYYMMDD = weekly release date of this DEV branch. // RR = release increments - 00 in DEV branches. // .XX = incremental changes.