. namespace mod_subsection\courseformat; /** * Subsection delegated section tests. * * @package mod_subsection * @copyright 2024 Sara Arjona * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @covers \mod_subsection\courseformat\sectiondelegate * @coversDefaultClass \mod_subsection\courseformat\sectiondelegate */ final class sectiondelegate_test extends \advanced_testcase { /** * Test has_delegate_class(). * * @covers ::has_delegate_class */ public function test_has_delegate_class(): void { $this->assertTrue(sectiondelegate::has_delegate_class('mod_subsection')); } /** * Test get_section_action_menu(). * * @covers ::get_section_action_menu */ public function test_get_section_action_menu(): void { global $PAGE; $this->resetAfterTest(); $this->setAdminUser(); $course = $this->getDataGenerator()->create_course(['format' => 'topics', 'numsections' => 1]); $this->getDataGenerator()->create_module('subsection', ['course' => $course->id, 'section' => 1]); $modinfo = get_fast_modinfo($course->id); $sectioninfos = $modinfo->get_section_info_all(); // Get the section info for the delegated section. $sectioninfo = $sectioninfos[2]; $delegated = sectiondelegate::instance($sectioninfo); $format = course_get_format($course); $outputclass = $format->get_output_classname('content\\section\\controlmenu'); $controlmenu = new $outputclass($format, $sectioninfo); $renderer = $PAGE->get_renderer('format_' . $course->format); // Highlight is only present in section menu (not module), so they shouldn't be found in the result. // Duplicate is not implemented yet, so they shouldn't be found in the result. // The possible options are: View, Edit, Show, Hide, Delete and Permalink. if (get_string_manager()->string_exists('editsection', 'format_'.$format->get_format())) { $streditsection = get_string('editsection', 'format_'.$format->get_format()); } else { $streditsection = get_string('editsection'); } $allowedoptions = [ get_string('view'), $streditsection, get_string('hidefromothers', 'format_' . $course->format), get_string('showfromothers', 'format_' . $course->format), get_string('move'), get_string('delete'), get_string('sectionlink', 'course'), ]; // The default section menu should be different for the delegated section menu. $result = $delegated->get_section_action_menu($format, $controlmenu, $renderer); foreach ($result->get_secondary_actions() as $secondaryaction) { $this->assertContains($secondaryaction->text, $allowedoptions); } } }