Differences Between: [Versions 310 and 402] [Versions 311 and 402] [Versions 39 and 402] [Versions 400 and 402] [Versions 401 and 402]
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_role; 18 19 use core_role_preset; 20 21 /** 22 * Role XML presets test case. 23 * 24 * @package core_role 25 * @category test 26 * @copyright 2013 Petr Skoda {@link http://skodak.org} 27 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 28 */ 29 class preset_test extends \advanced_testcase { 30 public function test_xml() { 31 global $DB; 32 33 $roles = $DB->get_records('role'); 34 35 foreach ($roles as $role) { 36 $xml = core_role_preset::get_export_xml($role->id); 37 $this->assertTrue(core_role_preset::is_valid_preset($xml)); 38 $info = core_role_preset::parse_preset($xml); 39 $this->assertSame($role->shortname, $info['shortname']); 40 $this->assertSame($role->name, $info['name']); 41 $this->assertSame($role->description, $info['description']); 42 $this->assertSame($role->archetype, $info['archetype']); 43 44 $contextlevels = get_role_contextlevels($role->id); 45 $this->assertEquals(array_values($contextlevels), array_values($info['contextlevels'])); 46 47 foreach (array('assign', 'override', 'switch', 'view') as $type) { 48 $records = $DB->get_records('role_allow_'.$type, array('roleid'=>$role->id), "allow$type ASC"); 49 $allows = array(); 50 foreach ($records as $record) { 51 if ($record->{'allow'.$type} == $role->id) { 52 array_unshift($allows, -1); 53 } 54 $allows[] = $record->{'allow'.$type}; 55 } 56 $this->assertEquals($allows, $info['allow'.$type], "$type $role->shortname does not match"); 57 } 58 59 $capabilities = $DB->get_records_sql( 60 "SELECT * 61 FROM {role_capabilities} 62 WHERE contextid = :syscontext AND roleid = :roleid 63 ORDER BY capability ASC", 64 array('syscontext' => \context_system::instance()->id, 'roleid' => $role->id)); 65 66 foreach ($capabilities as $cap) { 67 $this->assertEquals($cap->permission, $info['permissions'][$cap->capability]); 68 unset($info['permissions'][$cap->capability]); 69 } 70 // The remainders should be only inherits. 71 foreach ($info['permissions'] as $capability => $permission) { 72 if ($permission == CAP_INHERIT) { 73 continue; 74 } 75 $this->fail('only CAP_INHERIT expected'); 76 } 77 } 78 } 79 80 /** 81 * Tests covered method. 82 * @covers \core_role_preset::parse_preset 83 */ 84 public function test_mixed_levels() { 85 // The problem here is that we cannot guarantee plugin contexts 86 // have unique short names, so we have to also support level numbers. 87 $xml = file_get_contents(__DIR__ . '/fixtures/mixed_levels.xml'); 88 $this->assertTrue(\core_role_preset::is_valid_preset($xml)); 89 90 $preset = \core_role_preset::parse_preset($xml); 91 $expected = [\core\context\system::LEVEL, \core\context\coursecat::LEVEL, \core\context\course::LEVEL]; 92 $expected = array_combine($expected, $expected); 93 $this->assertSame($expected, $preset['contextlevels']); 94 } 95 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body