Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>.namespace tool_admin_presets\local\action;/*** Tests for the delete class.** @package tool_admin_presets* @category test* @copyright 2021 Sara Arjona (sara@moodle.com)* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later* @coversDefaultClass \tool_admin_presets\local\action\delete*/class delete_test extends \advanced_testcase {/*** Test the behaviour of execute() method.** @covers ::execute*/public function test_delete_execute(): void {global $DB;$this->resetAfterTest();$this->setAdminUser();// Create some presets.$generator = $this->getDataGenerator()->get_plugin_generator('core_adminpresets');$presetid1 = $generator->create_preset(['name' => 'Preset 1', 'applypreset' => true]);$presetid2 = $generator->create_preset(['name' => 'Preset 2']);$currentpresets = $DB->count_records('adminpresets');$currentitems = $DB->count_records('adminpresets_it');$currentadvitems = $DB->count_records('adminpresets_it_a');$currentplugins = $DB->count_records('adminpresets_plug');// Only preset1 has been applied.$this->assertCount(1, $DB->get_records('adminpresets_app'));// Only the preset1 settings that have changed: enablebadges, mediawidth and maxanswers.$this->assertCount(3, $DB->get_records('adminpresets_app_it'));// Only the preset1 advanced settings that have changed: maxanswers_adv.$this->assertCount(1, $DB->get_records('adminpresets_app_it_a'));// Only the preset1 plugins that have changed: enrol_guest and mod_glossary.$this->assertCount(2, $DB->get_records('adminpresets_app_plug'));// Initialise the parameters and create the delete class.$_POST['action'] = 'delete';$_POST['mode'] = 'execute';$_POST['id'] = $presetid1;$_POST['sesskey'] = sesskey();$action = new delete();$sink = $this->redirectEvents();try {$action->execute();} catch (\exception $e) {// If delete action was successfull, redirect should be called so we will encounter an// 'unsupported redirect error' moodle_exception.$this->assertInstanceOf(\moodle_exception::class, $e);} finally {// Check the preset data has been removed.$presets = $DB->get_records('adminpresets');$this->assertCount($currentpresets - 1, $presets);$preset = reset($presets);$this->assertArrayHasKey($presetid2, $presets);// Check preset items.$this->assertCount($currentitems - 4, $DB->get_records('adminpresets_it'));$this->assertCount(0, $DB->get_records('adminpresets_it', ['adminpresetid' => $presetid1]));// Check preset advanced items.$this->assertCount($currentadvitems - 1, $DB->get_records('adminpresets_it_a'));// Check preset plugins.$this->assertCount($currentplugins - 3, $DB->get_records('adminpresets_plug'));$this->assertCount(0, $DB->get_records('adminpresets_plug', ['adminpresetid' => $presetid1]));// Check preset applied tables are empty now.$this->assertCount(0, $DB->get_records('adminpresets_app'));$this->assertCount(0, $DB->get_records('adminpresets_app_it'));$this->assertCount(0, $DB->get_records('adminpresets_app_it_a'));$this->assertCount(0, $DB->get_records('adminpresets_app_plug'));// Check the delete event has been raised.$events = $sink->get_events();$sink->close();$event = reset($events);$this->assertInstanceOf('\\tool_admin_presets\\event\\preset_deleted', $event);}}/*** Test the behaviour of execute() method when the preset id doesn't exist.** @covers ::execute*/public function test_delete_execute_unexisting_preset(): void {$this->resetAfterTest();$this->setAdminUser();// Create some presets.$generator = $this->getDataGenerator()->get_plugin_generator('core_adminpresets');$presetid = $generator->create_preset(['name' => 'Preset 1']);// Initialise the parameters and create the delete class.$_POST['action'] = 'delete';$_POST['mode'] = 'execute';$_POST['id'] = $presetid * 2; // Unexisting preset identifier.$_POST['sesskey'] = sesskey();$action = new delete();$this->expectException(\moodle_exception::class);$action->execute();}/*** Test the behaviour of show() method when the preset id doesn't exist.** @covers ::show*/public function test_delete_show_unexisting_preset(): void {$this->resetAfterTest();$this->setAdminUser();// Create some presets.$generator = $this->getDataGenerator()->get_plugin_generator('core_adminpresets');$presetid = $generator->create_preset(['name' => 'Preset 1']);// Initialise the parameters and create the delete class.$_POST['action'] = 'delete';$_POST['mode'] = 'show';$_POST['id'] = $presetid * 2; // Unexisting preset identifier.$action = new delete();$this->expectException(\moodle_exception::class);$action->show();}}