Rev 1 | 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_courseformat\output\local\state;use availability_date\condition;use core_availability\tree;use stdClass;/*** Tests for cm state class.** @package core_courseformat* @copyright 2022 Ferran Recio <ferran@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later* @coversDefaultClass \core_courseformat\output\local\state\cm*/class cm_test extends \advanced_testcase {/*** Setup to ensure that fixtures are loaded.*/public static function setupBeforeClass(): void {global $CFG;require_once($CFG->dirroot . '/course/lib.php');require_once($CFG->dirroot . '/course/format/tests/fixtures/format_theunittest.php');require_once($CFG->dirroot . '/course/format/tests/fixtures/format_theunittest_output_course_format_state.php');}/*** Test the behaviour of state\cm hasavailability attribute.** @dataProvider hasrestrictions_state_provider* @covers ::export_for_template** @param string $format the course format* @param string $rolename the user role name (editingteacher or student)* @param bool $hasavailability if the activity|section has availability* @param bool $available if the activity availability condition is available or not to the user* @param bool $expected the expected result*/public function test_cm_hasrestrictions_state(string $format = 'topics',string $rolename = 'editingteacher',bool $hasavailability = false,bool $available = false,bool $expected = false): void {$data = $this->setup_hasrestrictions_scenario($format, $rolename, $hasavailability, $available);// Get the cm state.$courseformat = $data->courseformat;$renderer = $data->renderer;$cmclass = $courseformat->get_output_classname('state\\cm');$cmstate = new $cmclass($courseformat,$data->section,$data->cm);$state = $cmstate->export_for_template($renderer);$this->assertEquals($expected, $state->hascmrestrictions);}/*** Setup section or cm has restrictions scenario.** @param string $format the course format* @param string $rolename the user role name (editingteacher or student)* @param bool $hasavailability if the activity|section has availability* @param bool $available if the activity availability condition is available or not to the user* @return stdClass the scenario instances.*/private function setup_hasrestrictions_scenario(string $format = 'topics',string $rolename = 'editingteacher',bool $hasavailability = false,bool $available = false): stdClass {global $PAGE, $DB;$this->resetAfterTest();set_config('enableavailability', 1);$course = $this->getDataGenerator()->create_course(['numsections' => 1, 'format' => $format]);// Create and enrol user.$user = $this->getDataGenerator()->create_user();$this->getDataGenerator()->enrol_user($user->id,$course->id,$rolename);$this->setUser($user);// Create an activity.$activity = $this->getDataGenerator()->create_module('page', ['course' => $course->id], ['section' => 1,'visible' => 1]);// Set up the availability settings.if ($hasavailability) {$operation = ($available) ? condition::DIRECTION_UNTIL : condition::DIRECTION_FROM;$availabilityjson = json_encode(tree::get_root_json([condition::get_json($operation, time() + 3600),],'&',true));$selector = ['id' => $activity->cmid];$DB->set_field('course_modules', 'availability', trim($availabilityjson), $selector);}// Get the cm state.$courseformat = course_get_format($course->id);$modinfo = $courseformat->get_modinfo();$renderer = $courseformat->get_renderer($PAGE);if ($format == 'theunittest') {// These course format's hasn't the renderer file, so a debugging message will be displayed.$this->assertDebuggingCalled();}return (object)['courseformat' => $courseformat,'section' => $modinfo->get_section_info(1),'cm' => $modinfo->get_cm($activity->cmid),'renderer' => $renderer,];}/*** Data provider for test_state().** @return array*/public function hasrestrictions_state_provider(): array {return [// Teacher scenarios (topics).'Teacher, Topics, can edit, has availability and is available' => ['format' => 'topics','rolename' => 'editingteacher','hasavailability' => true,'available' => true,'expected' => true,],'Teacher, Topics, can edit, has availability and is not available' => ['format' => 'topics','rolename' => 'editingteacher','hasavailability' => true,'available' => false,'expected' => true,],'Teacher, Topics, can edit and has not availability' => ['format' => 'topics','rolename' => 'editingteacher','hasavailability' => false,'available' => true,'expected' => false,],// Teacher scenarios (weeks).'Teacher, Weeks, can edit, has availability and is available' => ['format' => 'weeks','rolename' => 'editingteacher','hasavailability' => true,'available' => true,'expected' => true,],'Teacher, Weeks, can edit, has availability and is not available' => ['format' => 'weeks','rolename' => 'editingteacher','hasavailability' => true,'available' => false,'expected' => true,],'Teacher, Weeks, can edit and has not availability' => ['format' => 'weeks','rolename' => 'editingteacher','hasavailability' => false,'available' => true,'expected' => false,],// Teacher scenarios (mock format).'Teacher, Mock format, can edit, has availability and is available' => ['format' => 'theunittest','rolename' => 'editingteacher','hasavailability' => true,'available' => true,'expected' => true,],'Teacher, Mock format, can edit, has availability and is not available' => ['format' => 'theunittest','rolename' => 'editingteacher','hasavailability' => true,'available' => false,'expected' => true,],'Teacher, Mock format, can edit and has not availability' => ['format' => 'theunittest','rolename' => 'editingteacher','hasavailability' => false,'available' => true,'expected' => false,],// Non editing teacher scenarios (topics).'Non editing teacher, Topics, can edit, has availability and is available' => ['format' => 'topics','rolename' => 'teacher','hasavailability' => true,'available' => true,'expected' => true,],'Non editing teacher, Topics, can edit, has availability and is not available' => ['format' => 'topics','rolename' => 'teacher','hasavailability' => true,'available' => false,'expected' => true,],'Non editing teacher, Topics, can edit and has not availability' => ['format' => 'topics','rolename' => 'teacher','hasavailability' => false,'available' => true,'expected' => false,],// Non editing teacher scenarios (weeks).'Non editing teacher, Weeks, can edit, has availability and is available' => ['format' => 'weeks','rolename' => 'teacher','hasavailability' => true,'available' => true,'expected' => true,],'Non editing teacher, Weeks, can edit, has availability and is not available' => ['format' => 'weeks','rolename' => 'teacher','hasavailability' => true,'available' => false,'expected' => true,],'Non editing teacher, Weeks, can edit and has not availability' => ['format' => 'weeks','rolename' => 'teacher','hasavailability' => false,'available' => true,'expected' => false,],// Non editing teacher scenarios (mock format).'Non editing teacher, Mock format, can edit, has availability and is available' => ['format' => 'theunittest','rolename' => 'teacher','hasavailability' => true,'available' => true,'expected' => true,],'Non editing teacher, Mock format, can edit, has availability and is not available' => ['format' => 'theunittest','rolename' => 'teacher','hasavailability' => true,'available' => false,'expected' => true,],'Non editing teacher, Mock format, can edit and has not availability' => ['format' => 'theunittest','rolename' => 'teacher','hasavailability' => false,'available' => true,'expected' => false,],// Student scenarios (topics).'Student, Topics, cannot edit, has availability and is available' => ['format' => 'topics','rolename' => 'student','hasavailability' => true,'available' => true,'expected' => false,],'Student, Topics, cannot edit, has availability and is not available' => ['format' => 'topics','rolename' => 'student','hasavailability' => true,'available' => false,'expected' => true,],'Student, Topics, cannot edit and has not availability' => ['format' => 'topics','rolename' => 'student','hasavailability' => false,'available' => true,'expected' => false,],// Student scenarios (weeks).'Student, Weeks, cannot edit, has availability and is available' => ['format' => 'weeks','rolename' => 'student','hasavailability' => true,'available' => true,'expected' => false,],'Student, Weeks, cannot edit, has availability and is not available' => ['format' => 'weeks','rolename' => 'student','hasavailability' => true,'available' => false,'expected' => true,],'Student, Weeks, cannot edit and has not availability' => ['format' => 'weeks','rolename' => 'student','hasavailability' => false,'available' => true,'expected' => false,],// Student scenarios (mock format).'Student, Mock format, cannot edit, has availability and is available' => ['format' => 'theunittest','rolename' => 'student','hasavailability' => true,'available' => true,'expected' => false,],'Student, Mock format, cannot edit, has availability and is not available' => ['format' => 'theunittest','rolename' => 'student','hasavailability' => true,'available' => false,'expected' => true,],'Student, Mock format, cannot edit and has not availability' => ['format' => 'theunittest','rolename' => 'student','hasavailability' => false,'available' => true,'expected' => false,],];}}