eb9ff724c1e3d9d1bdfdfaef20c9513a91806e65
[moodle.git] / course / tests / services_content_item_service_test.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Contains the tests for the content_item_service class.
19  *
20  * @package    core
21  * @subpackage course
22  * @copyright  2020 Jake Dallimore <jrhdallimore@gmail.com>
23  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
25 namespace tests\course;
27 defined('MOODLE_INTERNAL') || die();
29 use \core_course\local\service\content_item_service;
30 use \core_course\local\repository\content_item_readonly_repository;
32 /**
33  * The tests for the content_item_service class.
34  *
35  * @copyright  2020 Jake Dallimore <jrhdallimore@gmail.com>
36  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
37  */
38 class services_content_item_service_testcase extends \advanced_testcase {
40     /**
41      * Test confirming that content items are returned by the service.
42      */
43     public function test_get_content_items_for_user_in_course_basic() {
44         $this->resetAfterTest();
46         // Create a user in a course.
47         $course = $this->getDataGenerator()->create_course();
48         $user = $this->getDataGenerator()->create_and_enrol($course, 'editingteacher');
50         $cis = new content_item_service(new content_item_readonly_repository());
51         $contentitems = $cis->get_content_items_for_user_in_course($user, $course);
53         foreach ($contentitems as $key => $contentitem) {
54             $this->assertObjectHasAttribute('id', $contentitem);
55             $this->assertObjectHasAttribute('name', $contentitem);
56             $this->assertObjectHasAttribute('title', $contentitem);
57             $this->assertObjectHasAttribute('link', $contentitem);
58             $this->assertObjectHasAttribute('icon', $contentitem);
59             $this->assertObjectHasAttribute('help', $contentitem);
60             $this->assertObjectHasAttribute('archetype', $contentitem);
61             $this->assertObjectHasAttribute('componentname', $contentitem);
62         }
63     }
65     /**
66      * Test confirming that access control is performed when asking the service to return content items for a user in a course.
67      */
68     public function test_get_content_items_for_user_in_course_permissions() {
69         $this->resetAfterTest();
70         global $DB;
72         // Create a user in a course.
73         $course = $this->getDataGenerator()->create_course();
74         $user = $this->getDataGenerator()->create_and_enrol($course, 'editingteacher');
76         // No cap override, so assign should be returned.
77         $cis = new content_item_service(new content_item_readonly_repository());
78         $contentitems = $cis->get_content_items_for_user_in_course($user, $course);
79         $this->assertContains('assign', array_column($contentitems, 'name'));
81         // Override the capability 'mod/assign:addinstance' for the 'editing teacher' role.
82         $teacherrole = $DB->get_record('role', array('shortname' => 'editingteacher'));
83         assign_capability('mod/assign:addinstance', CAP_PROHIBIT, $teacherrole->id, \context_course::instance($course->id));
85         $contentitems = $cis->get_content_items_for_user_in_course($user, $course);
86         $this->assertArrayNotHasKey('assign', $contentitems);
87     }
89     /**
90      * Test confirming that params can be added to the content item's link.
91      */
92     public function test_get_content_item_for_user_in_course_link_params() {
93         $this->resetAfterTest();
95         // Create a user in a course.
96         $course = $this->getDataGenerator()->create_course();
97         $user = $this->getDataGenerator()->create_and_enrol($course, 'editingteacher');
99         $cis = new content_item_service(new content_item_readonly_repository());
100         $contentitems = $cis->get_content_items_for_user_in_course($user, $course, ['sr' => 7]);
102         foreach ($contentitems as $item) {
103             $this->assertStringContainsString('sr=7', $item->link);
104         }
105     }