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/>./*** BBB Library tests class.** @package mod_bigbluebuttonbn* @copyright 2018 - present, Blindside Networks Inc* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later* @author Laurent David (laurent@call-learning.fr)*/namespace mod_bigbluebuttonbn\local\helpers;use context_course;use context_module;use context_system;use mod_bigbluebuttonbn\instance;use mod_bigbluebuttonbn\test\testcase_helper_trait;use stdClass;use stored_file;/*** BBB Library tests class.** @package mod_bigbluebuttonbn* @copyright 2018 - present, Blindside Networks Inc* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later* @author Laurent David (laurent@call-learning.fr)* @covers \mod_bigbluebuttonbn\local\helpers\files* @coversDefaultClass \mod_bigbluebuttonbn\local\helpers\files*/class files_test extends \advanced_testcase {use testcase_helper_trait;/** @var string Filename used for the presentation */const PRESENTATION_FILENAME = 'bbpresentation.pptx';/** @var string Filename used for the presentation */const PRESENTATION_FILEPATH = '/mod/bigbluebuttonbn/tests/fixtures/bbpresentation.pptx';/*** Plugin valid test case*/public function test_pluginfile_valid(): void {$this->resetAfterTest();$this->assertFalse(files::pluginfile_valid(context_course::instance($this->get_course()->id), 'presentation'));$this->assertTrue(files::pluginfile_valid(context_system::instance(), 'presentation'));$this->assertFalse(files::pluginfile_valid(context_system::instance(), 'otherfilearea'));}/*** Plugin file test case*/public function test_pluginfile_file(): void {global $CFG;$this->resetAfterTest();list($user, $bbactivity) = $this->create_user_and_activity($CFG->dirroot . self::PRESENTATION_FILEPATH);$this->setUser($user);$instance = instance::get_from_instanceid($bbactivity->id);$cm = $instance->get_cm();$cmrecord = $cm->get_course_module_record();/** @var stored_file $mediafile */$mediafile =files::pluginfile_file($this->get_course(), $cmrecord, $instance->get_context(),'presentation', [self::PRESENTATION_FILENAME]);$this->assertEquals(self::PRESENTATION_FILENAME, $mediafile->get_filename());}/*** Get presentation file*/public function test_default_presentation_get_file(): void {$this->resetAfterTest();list($user, $bbactivity) = $this->create_user_and_activity();$this->setUser($user);$instance = instance::get_from_instanceid($bbactivity->id);$cm = $instance->get_cm();$cmrecord = $cm->get_course_module_record();$mediafilename =files::get_plugin_filename($this->get_course(), $cmrecord, $instance->get_context(), ['presentation.pptx']);$this->assertEquals('presentation.pptx', $mediafilename);}/*** Test that file is accessible only once.*/public function test_presentation_file_accessible_twice(): void {global $CFG;$this->resetAfterTest();list($user, $bbactivity) = $this->create_user_and_activity($CFG->dirroot . self::PRESENTATION_FILEPATH);$this->setUser($user);$CFG->bigbluebuttonbn_preuploadpresentation_editable = true;$instance = instance::get_from_instanceid($bbactivity->id);$presentation = $instance->get_presentation_for_bigbluebutton_upload();$fulldirset = explode('/', $presentation['url']);$filename = array_pop($fulldirset);$nonce = array_pop($fulldirset);$cm = $instance->get_cm();$cmrecord = $cm->get_course_module_record();// The link should be valid twice.for ($i = 0; $i < 2; $i++) {$mediafile = files::pluginfile_file($this->get_course(), $cmrecord, $instance->get_context(), 'presentation',[$nonce, $filename]);$this->assertEquals($filename, $mediafile->get_filename());}// Third time is a charm, this should be false.$mediafile = files::pluginfile_file($this->get_course(), $cmrecord, $instance->get_context(), 'presentation',[$nonce, $filename]);$this->assertFalse($mediafile);}/*** Test that file is accessible only once.*/public function test_presentation_file_not_accessible_externally(): void {global $CFG;$this->resetAfterTest();list($user, $bbactivity) = $this->create_user_and_activity($CFG->dirroot . self::PRESENTATION_FILEPATH);$this->setUser($user);$CFG->bigbluebuttonbn_preuploadpresentation_editable = true;$instance = instance::get_from_instanceid($bbactivity->id);$presentation = $instance->get_presentation();$fulldirset = explode('/', $presentation['url']);$filename = array_pop($fulldirset);$this->setGuestUser();$this->expectException(\require_login_exception::class);$cm = $instance->get_cm();$cmrecord = $cm->get_course_module_record();files::pluginfile_file($this->get_course(), $cmrecord, $instance->get_context(), 'presentation', [$filename]);$this->setUser($user);$mediafile = files::pluginfile_file($this->get_course(), $cmrecord, $instance->get_context(), 'presentation', [$filename]);$this->assertNotNull($mediafile);}/*** Get filename test*/public function test_pluginfile_filename(): void {global $CFG;$this->resetAfterTest();list($user, $bbactivity, $bbactivitycm, $bbactivitycontext) = $this->create_user_and_activity();$this->setUser($user);$this->create_sample_file(self::PRESENTATION_FILENAME, $bbactivitycontext->id);$CFG->bigbluebuttonbn_preuploadpresentation_editable = true;$presentationdef = files::get_presentation($bbactivitycontext, self::PRESENTATION_FILENAME, $bbactivity->id, true);$pathparts = explode('/', $presentationdef['url']);$filename = array_pop($pathparts);$salt = array_pop($pathparts);$filename = files::get_plugin_filename($this->get_course(), $bbactivitycm->get_course_module_record(), $bbactivitycontext,[$salt, $filename]);$this->assertEquals(self::PRESENTATION_FILENAME, $filename);}/*** Get media files*/public function test_get_media_file(): void {$this->resetAfterTest();list($user, $bbactivity) = $this->create_user_and_activity();$this->setUser($user);$bbformdata = $this->get_form_data_from_instance($bbactivity);$mediafilepath = files::save_media_file($bbformdata);$this->assertEmpty($mediafilepath);// From test_delete_original_file_from_draft (lib/test/filelib_test.php)// Create a bbb private file.$this->create_sample_file(self::PRESENTATION_FILENAME, context_module::instance($bbformdata->coursemodule)->id);file_prepare_draft_area($bbformdata->presentation,context_module::instance($bbformdata->coursemodule)->id,'mod_bigbluebuttonbn','presentation', 0);$mediafilepath = files::save_media_file($bbformdata);$this->assertEquals('/' . self::PRESENTATION_FILENAME, $mediafilepath);}/*** Create a user and an activity** @param string|null $presentationpath* @param bool $closed* @return array*/protected function create_user_and_activity($presentationpath = null, $closed = false): array {$generator = $this->getDataGenerator();$user = $generator->create_user();$this->setAdminUser();$activitydata = ['closingtime' => time() + ($closed ? -3600 : +3600)];if (!empty($presentationpath)) {$activitydata['presentation'] = $presentationpath;}list($bbactivitycontext, $bbactivitycm, $bbactivity) =$this->create_instance(null, $activitydata);$generator->enrol_user($user->id, $this->get_course()->id, 'editingteacher');return [$user, $bbactivity, $bbactivitycm, $bbactivitycontext];}/*** Helper to create sample file for tests** @param string $filename* @param int $contextid* @return stored_file*/protected function create_sample_file($filename, $contextid) {$bbbfilerecord = new stdClass;$bbbfilerecord->contextid = $contextid;$bbbfilerecord->component = 'mod_bigbluebuttonbn';$bbbfilerecord->filearea = 'presentation';$bbbfilerecord->itemid = 0;$bbbfilerecord->filepath = '/';$bbbfilerecord->filename = $filename;$bbbfilerecord->source = 'test';$fs = get_file_storage();return $fs->create_file_from_string($bbbfilerecord, 'Presentation file content');}}