Merge branch 'wip-MDL-48794-m27' of git://github.com/marinaglancy/moodle into MOODLE_...
[moodle.git] / admin / roles / tests / preset_test.php
blob08994800314120e3990490bb228622977b17995e
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.
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 * Role XML presets test case.
20 * @package core_role
21 * @category phpunit
22 * @copyright 2013 Petr Skoda {@link http://skodak.org}
23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
26 defined('MOODLE_INTERNAL') || die();
29 class core_role_preset_testcase extends advanced_testcase {
30 public function test_xml() {
31 global $DB;
33 $roles = $DB->get_records('role');
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']);
44 $contextlevels = get_role_contextlevels($role->id);
45 $this->assertEquals(array_values($contextlevels), array_values($info['contextlevels']));
47 foreach (array('assign', 'override', 'switch') 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);
54 $allows[] = $record->{'allow'.$type};
56 $this->assertEquals($allows, $info['allow'.$type], "$type $role->shortname does not match");
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));
66 foreach ($capabilities as $cap) {
67 $this->assertEquals($cap->permission, $info['permissions'][$cap->capability]);
68 unset($info['permissions'][$cap->capability]);
70 // The remainders should be only inherits.
71 foreach ($info['permissions'] as $capability => $permission) {
72 if ($permission == CAP_INHERIT) {
73 continue;
75 $this->fail('only CAP_INHERIT expected');