Files
moodle/lib/tests/fixtures/event_fixtures.php
T
Eloy Lafuente (stronk7) 7e170eb1b3 MDL-69688 phpunit: Improve test_context_not_used
This adds a few changes to the old test_context_not_used test:

- Move it to become an advanced_test, because its mission
  is to verify that the assertEventContextNotUsed() assertion
  works as expected.
- For consistency, also move the fixtures to own phpunit fixtures.
- Add proper coverage tags, to verify that the assertion is being
  covered.
- Add a data provider to provide all the current cases and ease
  any future case that may be needed in the future. One by one
  because previously there was code never executed with the
  warning expectation causing the test to stop.
- Run them in isolation, while this is not strictly required, it's
  including external fixtures and, we'll need that isolation soon
  (for changes coming when moving the test to PHPUnit 9.6 in MDL-81266).
2024-03-21 08:30:32 +01:00

312 lines
8.2 KiB
PHP

<?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 core_tests\event;
/**
* Fixtures for new event testing.
*
* @package core
* @category phpunit
* @copyright 2013 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
class unittest_executed extends \core\event\base {
public $nest = false;
public static function get_name() {
return 'xxx';
}
public function get_description() {
return 'yyy';
}
protected function init() {
$this->data['crud'] = 'u';
$this->data['edulevel'] = self::LEVEL_PARTICIPATING;
}
public function get_url() {
return new \moodle_url('/somepath/somefile.php', array('id'=>$this->data['other']['sample']));
}
}
class unittest_observer {
public static $info = array();
public static $event = array();
public static function reset() {
self::$info = array();
self::$event = array();
}
public static function observe_one(unittest_executed $event) {
self::$info[] = 'observe_one-'.$event->other['sample'];
self::$event[] = $event;
}
public static function external_observer(unittest_executed $event) {
self::$info[] = 'external_observer-'.$event->other['sample'];
self::$event[] = $event;
}
public static function broken_observer(unittest_executed $event) {
self::$info[] = 'broken_observer-'.$event->other['sample'];
self::$event[] = $event;
throw new \Exception('someerror');
}
public static function observe_all(\core\event\base $event) {
if (!($event instanceof unittest_executed)) {
self::$info[] = 'observe_all-unknown';
self::$event[] = $event;
return;
}
self::$event[] = $event;
if (!empty($event->nest)) {
self::$info[] = 'observe_all-nesting-'.$event->other['sample'];
unittest_executed::create(array('context'=>\context_system::instance(), 'other'=>array('sample'=>666, 'xx'=>666)))->trigger();
} else {
self::$info[] = 'observe_all-'.$event->other['sample'];
}
}
public static function observe_all_alt(\core\event\base $event) {
self::$info[] = 'observe_all_alt';
self::$event[] = $event;
}
public static function legacy_handler($data) {
self::$info[] = 'legacy_handler-'.$data[0];
self::$event[] = $data;
}
}
class bad_event1 extends \core\event\base {
protected function init() {
//$this->data['crud'] = 'u';
$this->data['edulevel'] = self::LEVEL_OTHER;
}
}
class bad_event2 extends \core\event\base {
protected function init() {
$this->data['crud'] = 'u';
//$this->data['edulevel'] = 10;
}
}
class bad_event2b extends \core\event\base {
protected function init() {
$this->data['crud'] = 'u';
// Invalid level value.
$this->data['edulevel'] = -1;
}
}
class bad_event3 extends \core\event\base {
protected function init() {
$this->data['crud'] = 'u';
$this->data['edulevel'] = self::LEVEL_OTHER;
unset($this->data['courseid']);
}
}
class bad_event4 extends \core\event\base {
protected function init() {
$this->data['crud'] = 'u';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->data['xxx'] = 1;
}
}
class bad_event5 extends \core\event\base {
protected function init() {
$this->data['crud'] = 'x';
$this->data['edulevel'] = self::LEVEL_OTHER;
}
}
class bad_event6 extends \core\event\base {
protected function init() {
$this->data['crud'] = 'c';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->data['objecttable'] = 'xxx_xxx_xx';
}
}
class bad_event7 extends \core\event\base {
protected function init() {
$this->data['crud'] = 'c';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->data['objecttable'] = null;
}
}
class bad_event8 extends \core\event\base {
protected function init() {
$this->data['crud'] = 'c';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->data['objecttable'] = 'user';
}
}
class problematic_event1 extends \core\event\base {
protected function init() {
$this->data['crud'] = 'u';
$this->data['edulevel'] = self::LEVEL_OTHER;
}
}
class problematic_event2 extends \core\event\base {
protected function init() {
$this->data['crud'] = 'c';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->context = \context_system::instance();
}
}
class problematic_event3 extends \core\event\base {
protected function init() {
$this->data['crud'] = 'c';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->context = \context_system::instance();
}
protected function validate_data() {
parent::validate_data();
if (empty($this->data['other'])) {
debugging('other is missing');
}
}
}
class deprecated_event1 extends \core\event\base {
protected function init() {
$this->data['crud'] = 'c';
$this->data['level'] = self::LEVEL_TEACHING; // Tests edulevel hint.
$this->context = \context_system::instance();
}
}
class noname_event extends \core\event\base {
protected function init() {
$this->data['crud'] = 'c';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->context = \context_system::instance();
}
}
/**
* Class course_module_viewed.
*
* Wrapper for testing \core\event\course_module_viewed.
*/
class course_module_viewed extends \core\event\course_module_viewed {
protected function init() {
$this->data['crud'] = 'r';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->data['objecttable'] = 'feedback';
}
}
/**
* Class course_module_viewed_noinit.
*
* Wrapper for testing \core\event\course_module_viewed.
*/
class course_module_viewed_noinit extends \core\event\course_module_viewed {
}
/**
* Event for testing core\event\grade_report_viewed.
*/
class grade_report_viewed extends \core\event\grade_report_viewed {
}
/**
* This is an explanation of the event.
* - I'm making a point here.
* - I have a second {@link something} point here.
* - whitespace is intentional to test it's removal.
*
*
* I have something else *Yeah* that.
*
*
*
* @package core
* @category phpunit
* @copyright 2014 Adrian Greeve <adrian@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class full_docblock extends \core\event\base {
protected function init() {
}
}
/**
* We have only the description in the docblock
* and nothing else.
*/
class docblock_test2 extends \core\event\base {
protected function init() {
}
}
/**
* Calendar event created event.
*
* @property-read array $other {
* Extra information about the event.
*
* - int timestart: timestamp for event time start.
* - string name: Name of the event.
* - int repeatid: Id of the parent event if present, else 0.
* }
*
* @package core
* @since Moodle 2.7
* @copyright 2014 onwards Adrian Greeve
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class docblock_test3 extends \core\event\base {
protected function init() {
}
}
class static_info_viewing extends \core\event\base {
protected function init() {
$this->data['crud'] = 'r';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->data['objecttable'] = 'mod_unittest';
}
}