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 tool_admin_presets\local\action; 18 19 /** 20 * Tests for the delete class. 21 * 22 * @package tool_admin_presets 23 * @category test 24 * @copyright 2021 Sara Arjona (sara@moodle.com) 25 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 26 * @coversDefaultClass \tool_admin_presets\local\action\delete 27 */ 28 class delete_test extends \advanced_testcase { 29 30 /** 31 * Test the behaviour of execute() method. 32 * 33 * @covers ::execute 34 */ 35 public function test_delete_execute(): void { 36 global $DB; 37 38 $this->resetAfterTest(); 39 $this->setAdminUser(); 40 41 // Create some presets. 42 $generator = $this->getDataGenerator()->get_plugin_generator('core_adminpresets'); 43 $presetid1 = $generator->create_preset(['name' => 'Preset 1', 'applypreset' => true]); 44 $presetid2 = $generator->create_preset(['name' => 'Preset 2']); 45 46 $currentpresets = $DB->count_records('adminpresets'); 47 $currentitems = $DB->count_records('adminpresets_it'); 48 $currentadvitems = $DB->count_records('adminpresets_it_a'); 49 $currentplugins = $DB->count_records('adminpresets_plug'); 50 51 // Only preset1 has been applied. 52 $this->assertCount(1, $DB->get_records('adminpresets_app')); 53 // Only the preset1 settings that have changed: enablebadges, mediawidth and maxanswers. 54 $this->assertCount(3, $DB->get_records('adminpresets_app_it')); 55 // Only the preset1 advanced settings that have changed: maxanswers_adv. 56 $this->assertCount(1, $DB->get_records('adminpresets_app_it_a')); 57 // Only the preset1 plugins that have changed: enrol_guest and mod_glossary. 58 $this->assertCount(2, $DB->get_records('adminpresets_app_plug')); 59 60 // Initialise the parameters and create the delete class. 61 $_POST['action'] = 'delete'; 62 $_POST['mode'] = 'execute'; 63 $_POST['id'] = $presetid1; 64 $_POST['sesskey'] = sesskey(); 65 66 $action = new delete(); 67 $sink = $this->redirectEvents(); 68 try { 69 $action->execute(); 70 } catch (\exception $e) { 71 // If delete action was successfull, redirect should be called so we will encounter an 72 // 'unsupported redirect error' moodle_exception. 73 $this->assertInstanceOf(\moodle_exception::class, $e); 74 } finally { 75 // Check the preset data has been removed. 76 $presets = $DB->get_records('adminpresets'); 77 $this->assertCount($currentpresets - 1, $presets); 78 $preset = reset($presets); 79 $this->assertArrayHasKey($presetid2, $presets); 80 // Check preset items. 81 $this->assertCount($currentitems - 4, $DB->get_records('adminpresets_it')); 82 $this->assertCount(0, $DB->get_records('adminpresets_it', ['adminpresetid' => $presetid1])); 83 // Check preset advanced items. 84 $this->assertCount($currentadvitems - 1, $DB->get_records('adminpresets_it_a')); 85 // Check preset plugins. 86 $this->assertCount($currentplugins - 3, $DB->get_records('adminpresets_plug')); 87 $this->assertCount(0, $DB->get_records('adminpresets_plug', ['adminpresetid' => $presetid1])); 88 // Check preset applied tables are empty now. 89 $this->assertCount(0, $DB->get_records('adminpresets_app')); 90 $this->assertCount(0, $DB->get_records('adminpresets_app_it')); 91 $this->assertCount(0, $DB->get_records('adminpresets_app_it_a')); 92 $this->assertCount(0, $DB->get_records('adminpresets_app_plug')); 93 94 // Check the delete event has been raised. 95 $events = $sink->get_events(); 96 $sink->close(); 97 $event = reset($events); 98 $this->assertInstanceOf('\\tool_admin_presets\\event\\preset_deleted', $event); 99 } 100 } 101 102 /** 103 * Test the behaviour of execute() method when the preset id doesn't exist. 104 * 105 * @covers ::execute 106 */ 107 public function test_delete_execute_unexisting_preset(): void { 108 109 $this->resetAfterTest(); 110 $this->setAdminUser(); 111 112 // Create some presets. 113 $generator = $this->getDataGenerator()->get_plugin_generator('core_adminpresets'); 114 $presetid = $generator->create_preset(['name' => 'Preset 1']); 115 116 // Initialise the parameters and create the delete class. 117 $_POST['action'] = 'delete'; 118 $_POST['mode'] = 'execute'; 119 $_POST['id'] = $presetid * 2; // Unexisting preset identifier. 120 $_POST['sesskey'] = sesskey(); 121 122 $action = new delete(); 123 $this->expectException(\moodle_exception::class); 124 $action->execute(); 125 } 126 127 /** 128 * Test the behaviour of show() method when the preset id doesn't exist. 129 * 130 * @covers ::show 131 */ 132 public function test_delete_show_unexisting_preset(): void { 133 134 $this->resetAfterTest(); 135 $this->setAdminUser(); 136 137 // Create some presets. 138 $generator = $this->getDataGenerator()->get_plugin_generator('core_adminpresets'); 139 $presetid = $generator->create_preset(['name' => 'Preset 1']); 140 141 // Initialise the parameters and create the delete class. 142 $_POST['action'] = 'delete'; 143 $_POST['mode'] = 'show'; 144 $_POST['id'] = $presetid * 2; // Unexisting preset identifier. 145 146 $action = new delete(); 147 $this->expectException(\moodle_exception::class); 148 $action->show(); 149 } 150 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body