. namespace test_component\courseformat; use core_courseformat\base as course_format; use core_courseformat\output\local\content\section\controlmenu; use core_courseformat\sectiondelegate as sectiondelegatebase; use core_courseformat\stateupdates; use section_info; use renderer_base; use action_menu; /** * Test class for section delegate. * * @package core_courseformat * @copyright 2023 Ferran Recio * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class sectiondelegate extends sectiondelegatebase { /** @var string force the default parent action menu. */ public const MENUPARENT = 'parent'; /** @var string force an empty action menu. */ public const MENUEMPTY = 'empty'; /** @var string force a null action menu. */ public const MENUNULL = 'null'; /** * @var string|null Status to define which action menu to return when calling get_section_action_menu(). * Alternatively, different testing classes could be created, but it wasn't worth it for this case. */ protected ?string $actionmenustatus = self::MENUPARENT; /** * Test method to fake preprocesses the section name by appending a suffix to it. * * @param section_info $section The section information. * @param string|null $newname The new name for the section. * @return string|null The preprocessed section name with the suffix appended. */ public function preprocess_section_name(section_info $section, ?string $newname): ?string { if (empty($newname)) { return 'null_name'; } return $newname . '_suffix'; } /** * Test method to add state updates of a section with additional information. * * @param section_info $section The section to update. * @param stateupdates $updates The state updates to apply. * @return void */ public function put_section_state_extra_updates(section_info $section, stateupdates $updates): void { $updates->add_cm_put($section->itemid); } /** * Helper to change the behaviour of the get_section_action_menu(), for testing purposes, to return a different action menu * based on the value of $actionmenustatus. For instance: * - 'parent' returns the parent action menu. * - 'empty' returns an empty action menu. * - 'null' or null returns null action menu. * * @param string|null $actionmenustatus The status of the action menu. */ public function set_section_action_menu( ?string $actionmenustatus, ) { $this->actionmenustatus = $actionmenustatus; } /** * Allow delegate plugin to modify the available section menu. * By default, it returns the parent action menu. * * @param course_format $format The course format instance. * @param controlmenu $controlmenu The control menu instance. * @param renderer_base $output The renderer instance. * @return action_menu|null The new action menu with the list of edit control items or null if no action menu is available. */ public function get_section_action_menu( course_format $format, controlmenu $controlmenu, renderer_base $output, ): ?action_menu { switch ($this->actionmenustatus) { case self::MENUPARENT: return parent::get_section_action_menu($format, $controlmenu, $output); case self::MENUEMPTY: return new action_menu(); case self::MENUNULL: default: return null; } } }