$exceptionparam->courseid = $course->id;
throw new moodle_exception('errorcoursecontextnotvalid', 'webservice', '', $exceptionparam);
}
- require_capability('moodle/course:view', $context);
+ if ($course->id != SITEID) {
+ require_capability('moodle/course:view', $context);
+ }
$courseinfo = array();
$courseinfo['id'] = $course->id;
$this->assertEquals($DB->count_records('course'), count($courses));
}
+ /**
+ * Test get_courses without capability
+ */
+ public function test_get_courses_without_capability() {
+ $this->resetAfterTest(true);
+
+ $course1 = $this->getDataGenerator()->create_course();
+ $this->setUser($this->getDataGenerator()->create_user());
+
+ // No permissions are required to get the site course.
+ $courses = core_course_external::get_courses(array('ids' => [SITEID]));
+ $courses = external_api::clean_returnvalue(core_course_external::get_courses_returns(), $courses);
+
+ $this->assertEquals(1, count($courses));
+ $this->assertEquals('PHPUnit test site', $courses[0]['fullname']);
+ $this->assertEquals('site', $courses[0]['format']);
+
+ // Requesting course without being enrolled or capability to view it will throw an exception.
+ try {
+ core_course_external::get_courses(array('ids' => [$course1->id]));
+ $this->fail('Exception expected');
+ } catch (moodle_exception $e) {
+ $this->assertEquals(1, preg_match('/Course or activity not accessible. \(Not enrolled\)/', $e->getMessage()));
+ }
+ }
+
/**
* Test search_courses
*/