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 core_grades\output;use advanced_testcase;use grade_helper;use context_course;use moodle_url;/*** A test class used to test general_action_bar.** @package core_grades* @copyright 2021 Mihail Geshoski <mihail@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class general_action_bar_test extends advanced_testcase {/*** Load required test libraries*/public static function setUpBeforeClass(): void {global $CFG;require_once("{$CFG->dirroot}/grade/lib.php");}/*** Search array $options for an element which is an array containing 'name' => $name.** @param array $options the array of options.* @param string $name the name to find.* @return array|null the particular option if found, else null.*/protected function find_option_by_name(array $options, string $name): ?array {foreach ($options as $option) {if ($option['name'] == $name) {return $option;}}return null;}/*** Test the exported data for the general action bar for different user roles and settings.** @dataProvider export_for_template_provider* @param string $userrole The user role to test* @param bool $enableoutcomes Whether to enable outcomes* @param array $expectedoptions The expected options returned in the general action selector* @covers \core_grades\output\general_action_bar::export_for_template*/public function test_export_for_template(string $userrole, bool $enableoutcomes, array $expectedoptions): void {global $PAGE;// There may be additional plugins installed in the codebase where this// test is being run, therefore, we need to know which links can be// present in a standard Moodle install, and only check them.$allcorenavlinks = [get_string('view') => [get_string('pluginname', 'gradereport_grader'),get_string('pluginname', 'gradereport_history'),get_string('pluginname', 'gradereport_outcomes'),get_string('pluginname', 'gradereport_overview'),get_string('pluginname', 'gradereport_singleview'),get_string('pluginname', 'gradereport_summary'),get_string('pluginname', 'gradereport_user'),],get_string('setup', 'grades') => [get_string('gradebooksetup', 'grades'),get_string('coursegradesettings', 'grades'),get_string('preferences', 'grades') . ': ' . get_string('pluginname', 'gradereport_grader'),],get_string('moremenu') => [get_string('scales'),get_string('outcomes', 'grades'),get_string('gradeletters', 'grades'),get_string('import', 'grades'),get_string('export', 'grades'),],];$this->resetAfterTest();// Reset the cache.grade_helper::reset_caches();// Create a course.$course = $this->getDataGenerator()->create_course();$coursecontext = context_course::instance($course->id);if ($userrole === 'admin') {$this->setAdminUser();} else {// Enrol user to the course.$user = $this->getDataGenerator()->create_and_enrol($course, $userrole);$this->setUser($user);}if ($enableoutcomes) {set_config('enableoutcomes', 1);}$generalactionbar = new general_action_bar($coursecontext,new moodle_url('/grade/report/user/index.php', ['id' => $course->id]), 'report', 'user');$renderer = $PAGE->get_renderer('core');$generalactionbardata = $generalactionbar->export_for_template($renderer);$this->assertCount(1, $generalactionbardata);$this->assertArrayHasKey('generalnavselector', $generalactionbardata);$generalnavselector = $generalactionbardata['generalnavselector'];// Assert that the right links are present in each group.foreach ($allcorenavlinks as $groupname => $corelinks) {$actualgroup = $this->find_option_by_name($generalnavselector->options, $groupname);if (!isset($expectedoptions[$groupname])) {// This group should not be present.$this->assertNull($actualgroup, "Nav link group '$groupname' should not be present, but is.");continue;}$this->assertNotNull($actualgroup, "Nav link group '$groupname' should be present, but is not.");$this->assertTrue($actualgroup['isgroup'], "the thing claiming to be nav link group '$groupname' is not a group.");foreach ($corelinks as $corelinkname) {$actuallink = $this->find_option_by_name($actualgroup['options'], $corelinkname);if (!in_array($corelinkname, $expectedoptions[$groupname])) {$this->assertNull($actuallink,"Nav link '$corelinkname' should not be present in group '$groupname', but is.");} else {$this->assertNotNull($actuallink,"Nav link '$corelinkname' should be present in group '$groupname', but is not.");}}}}/*** Data provider for the test_export_for_template test.** @return array*/public function export_for_template_provider(): array {$graderpluginname = get_string('pluginname', 'gradereport_grader');$historypluginname = get_string('pluginname', 'gradereport_history');$outcomespluginname = get_string('pluginname', 'gradereport_outcomes');$overviewpluginname = get_string('pluginname', 'gradereport_overview');$singleviewpluginname = get_string('pluginname', 'gradereport_singleview');$summarypluginname = get_string('pluginname', 'gradereport_summary');$userpluginname = get_string('pluginname', 'gradereport_user');$viewstr = get_string('view');$setupstr = get_string('setup', 'grades');$morestr = get_string('moremenu');$gradebooksetupstr = get_string('gradebooksetup', 'grades');$coursegradesettingsstr = get_string('coursegradesettings', 'grades');$graderpreferencesstr = get_string('preferences', 'grades') . ': ' . get_string('pluginname', 'gradereport_grader');$scalesstr = get_string('scales');$outcomesstr = get_string('outcomes', 'grades');$gradelettersstr = get_string('gradeletters', 'grades');$importstr = get_string('import', 'grades');$exportstr = get_string('export', 'grades');return ['Gradebook general navigation for admin; outcomes disabled.' => ['admin',false,[$viewstr => [$graderpluginname,$historypluginname,$overviewpluginname,$singleviewpluginname,$summarypluginname,$userpluginname,],$setupstr => [$gradebooksetupstr,$coursegradesettingsstr,$graderpreferencesstr,],$morestr => [$scalesstr,$gradelettersstr,$importstr,$exportstr,],],],'Gradebook general navigation for admin; outcomes enabled.' => ['admin',true,[$viewstr => [$graderpluginname,$historypluginname,$outcomespluginname,$overviewpluginname,$singleviewpluginname,$summarypluginname,$userpluginname,],$setupstr => [$gradebooksetupstr,$coursegradesettingsstr,$graderpreferencesstr,],$morestr => [$scalesstr,$outcomesstr,$gradelettersstr,$importstr,$exportstr,],],],'Gradebook general navigation for editing teacher; outcomes disabled.' => ['editingteacher',false,[$viewstr => [$graderpluginname,$historypluginname,$overviewpluginname,$singleviewpluginname,$summarypluginname,$userpluginname,],$setupstr => [$gradebooksetupstr,$coursegradesettingsstr,$graderpreferencesstr,],$morestr => [$scalesstr,$gradelettersstr,$importstr,$exportstr,],],],'Gradebook general navigation for editing teacher; outcomes enabled.' => ['editingteacher',true,[$viewstr => [$graderpluginname,$historypluginname,$outcomespluginname,$overviewpluginname,$singleviewpluginname,$summarypluginname,$userpluginname,],$setupstr => [$gradebooksetupstr,$coursegradesettingsstr,$graderpreferencesstr,],$morestr => [$scalesstr,$outcomesstr,$gradelettersstr,$importstr,$exportstr,],],],'Gradebook general navigation for non-editing teacher; outcomes enabled.' => ['teacher',true,[$viewstr => [$graderpluginname,$historypluginname,$outcomespluginname,$overviewpluginname,$summarypluginname,$userpluginname,],$setupstr => [$graderpreferencesstr,],$morestr => [$exportstr,],],],'Gradebook general navigation for student; outcomes enabled.' => ['student',true,[$viewstr => [$overviewpluginname,$userpluginname,],],],];}}