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/>. 16 17 namespace core_group\customfield; 18 19 use advanced_testcase; 20 use context_course; 21 use context_system; 22 use moodle_url; 23 use core_customfield\field_controller; 24 25 /** 26 * Unit tests for grouping custom field handler. 27 * 28 * @package core_group 29 * @covers \core_group\customfield\group_handler 30 * @author Tomo Tsuyuki <tomotsuyuki@catalyst-au.net> 31 * @copyright 2023 Catalyst IT Pty Ltd 32 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 33 */ 34 class grouping_handler_test extends advanced_testcase { 35 /** 36 * Test custom field handler. 37 * @var \core_customfield\handler 38 */ 39 protected $handler; 40 41 /** 42 * Setup. 43 */ 44 public function setUp(): void { 45 $this->handler = grouping_handler::create(); 46 } 47 48 /** 49 * Create grouping custom field for testing. 50 * 51 * @return field_controller 52 */ 53 protected function create_grouping_custom_field(): field_controller { 54 $fieldcategory = self::getDataGenerator()->create_custom_field_category([ 55 'component' => 'core_group', 56 'area' => 'grouping', 57 ]); 58 59 return self::getDataGenerator()->create_custom_field([ 60 'shortname' => 'testfield1', 61 'type' => 'text', 62 'categoryid' => $fieldcategory->get('id'), 63 ]); 64 } 65 66 /** 67 * Test configuration context. 68 */ 69 public function test_get_configuration_context() { 70 $this->assertInstanceOf(context_system::class, $this->handler->get_configuration_context()); 71 } 72 73 /** 74 * Test getting config URL. 75 */ 76 public function test_get_configuration_url() { 77 $this->assertInstanceOf(moodle_url::class, $this->handler->get_configuration_url()); 78 $this->assertEquals('/group/grouping_customfield.php', $this->handler->get_configuration_url()->out_as_local_url()); 79 } 80 81 /** 82 * Test getting instance context. 83 */ 84 public function test_get_instance_context() { 85 global $COURSE; 86 $this->resetAfterTest(); 87 88 $course = self::getDataGenerator()->create_course(); 89 $grouping = self::getDataGenerator()->create_grouping(['courseid' => $course->id]); 90 91 $this->assertInstanceOf(context_course::class, $this->handler->get_instance_context()); 92 $this->assertSame(context_course::instance($COURSE->id), $this->handler->get_instance_context()); 93 94 $this->assertInstanceOf(context_course::class, $this->handler->get_instance_context($grouping->id)); 95 $this->assertSame(context_course::instance($course->id), $this->handler->get_instance_context($grouping->id)); 96 } 97 98 /** 99 * Test can configure check. 100 */ 101 public function test_can_configure() { 102 $this->resetAfterTest(); 103 104 $user = self::getDataGenerator()->create_user(); 105 self::setUser($user); 106 107 $this->assertFalse($this->handler->can_configure()); 108 109 $roleid = self::getDataGenerator()->create_role(); 110 assign_capability('moodle/group:configurecustomfields', CAP_ALLOW, $roleid, context_system::instance()->id, true); 111 role_assign($roleid, $user->id, context_system::instance()->id); 112 113 $this->assertTrue($this->handler->can_configure()); 114 } 115 116 /** 117 * Test can edit functionality. 118 */ 119 public function test_can_edit() { 120 $this->resetAfterTest(); 121 122 $course = self::getDataGenerator()->create_course(); 123 $contextid = context_course::instance($course->id)->id; 124 $grouping = self::getDataGenerator()->create_grouping(['courseid' => $course->id]); 125 $roleid = self::getDataGenerator()->create_role(); 126 assign_capability('moodle/course:managegroups', CAP_ALLOW, $roleid, $contextid, true); 127 128 $field = $this->create_grouping_custom_field(); 129 130 $user = self::getDataGenerator()->create_user(); 131 self::setUser($user); 132 133 $this->assertFalse($this->handler->can_edit($field, $grouping->id)); 134 135 role_assign($roleid, $user->id, $contextid); 136 $this->assertTrue($this->handler->can_edit($field, $grouping->id)); 137 } 138 139 /** 140 * Test can view functionality. 141 */ 142 public function test_can_view() { 143 $this->resetAfterTest(); 144 145 $course = self::getDataGenerator()->create_course(); 146 $contextid = context_course::instance($course->id)->id; 147 $grouping = self::getDataGenerator()->create_grouping(['courseid' => $course->id]); 148 $manageroleid = self::getDataGenerator()->create_role(); 149 assign_capability('moodle/course:managegroups', CAP_ALLOW, $manageroleid, $contextid, true); 150 151 $viewroleid = self::getDataGenerator()->create_role(); 152 assign_capability('moodle/course:view', CAP_ALLOW, $viewroleid, $contextid, true); 153 154 $viewandmanageroleid = self::getDataGenerator()->create_role(); 155 assign_capability('moodle/course:managegroups', CAP_ALLOW, $viewandmanageroleid, $contextid, true); 156 assign_capability('moodle/course:view', CAP_ALLOW, $viewandmanageroleid, $contextid, true); 157 158 $field = $this->create_grouping_custom_field(); 159 160 $user1 = self::getDataGenerator()->create_user(); 161 $user2 = self::getDataGenerator()->create_user(); 162 $user3 = self::getDataGenerator()->create_user(); 163 164 self::setUser($user1); 165 $this->assertFalse($this->handler->can_view($field, $grouping->id)); 166 167 self::setUser($user2); 168 $this->assertFalse($this->handler->can_view($field, $grouping->id)); 169 170 self::setUser($user3); 171 $this->assertFalse($this->handler->can_view($field, $grouping->id)); 172 173 role_assign($manageroleid, $user1->id, $contextid); 174 role_assign($viewroleid, $user2->id, $contextid); 175 role_assign($viewandmanageroleid, $user3->id, $contextid); 176 177 self::setUser($user1); 178 $this->assertTrue($this->handler->can_view($field, $grouping->id)); 179 180 self::setUser($user2); 181 $this->assertTrue($this->handler->can_view($field, $grouping->id)); 182 183 self::setUser($user3); 184 $this->assertTrue($this->handler->can_view($field, $grouping->id)); 185 } 186 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body