Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.
<?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/>.

/**
 * Testing the H5peditorStorage interface implementation.
 *
 * @package    core_h5p
 * @category   test
 * @copyright  2020 Victor Deniz <victor@moodle.com>
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

namespace core_h5p;

use core_h5p\local\library\autoloader;

/**
 *
 * Test class covering the H5peditorStorage interface implementation.
 *
 * @package    core_h5p
 * @copyright  2020 Victor Deniz <victor@moodle.com>
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 *
 * @runTestsInSeparateProcesses
 */
< class editor_framework_testcase extends \advanced_testcase {
> class editor_framework_test extends \advanced_testcase {
/** @var editor_framework H5P editor_framework instance */ protected $editorframework; /**
> * Setup to ensure that fixtures are loaded. * Set up function for tests. > */ */ > public static function setupBeforeClass(): void { protected function setUp(): void { > autoloader::register(); parent::setUp(); > } > autoloader::register(); > /**
< autoloader::register(); <
} /** * Test that the method getLanguage retrieves the translation of a library in the requested language. * * @dataProvider get_language_provider * * @param array $datalib Library data to create * @param string $lang Language to retrieve the translation * @param bool $emptyexpected True when false value is expected; false, otherwise * @param string $machinename The machine readable name of the library(content type) * @param int $majorversion Major part of version number * @param int $minorversion Minor part of version number */ public function test_get_language(array $datalib, string $lang, ?bool $emptyexpected = false, ?string $machinename = '', ?int $majorversion = 1, ?int $minorversion = 0): void { $this->resetAfterTest(true); // Fetch generator. $generator = \testing_util::get_data_generator(); $h5pgenerator = $generator->get_plugin_generator('core_h5p'); $h5pfilestorage = new file_storage(); $h5ptempath = $h5pfilestorage->getTmpPath(); $expectedresult = ''; if ($datalib) { $translations = []; if (array_key_exists('translation', $datalib)) { $translations = $datalib['translation']; } // Create DB entry for this library. $tmplib = $h5pgenerator->create_library_record($datalib['machinename'], $datalib['title'], $datalib['majorversion'], $datalib['minorversion']); // Create the files for this libray. [$library, $files] = $h5pgenerator->create_library($h5ptempath, $tmplib->id, $datalib['machinename'], $datalib['majorversion'], $datalib['minorversion'], $translations); $h5pfilestorage->saveLibrary($library); // If machinename, majorversion or minorversion are empty, use the value in datalib. if (empty($machinename)) { $machinename = $datalib['machinename']; } if (empty($majorversion)) { $majorversion = $datalib['majorversion']; } if (empty($minorversion)) { $minorversion = $datalib['minorversion']; } if (!$emptyexpected && array_key_exists($lang, $translations)) { $expectedresult = $translations[$lang]; } } // Get Language. $json = $this->editorframework->getLanguage($machinename, $majorversion, $minorversion, $lang); if ($emptyexpected) { $this->assertFalse($json); } else { $this->assertEquals($expectedresult, $json); } } /** * Data provider for test_get_language(). * * @return array */ public function get_language_provider(): array { return [ 'No library' => [ [], 'en', true, 'Library1', 1, 2, ], 'One library created but getting translation from an unexisting one' => [ 'Library1 1.2' => [ 'machinename' => 'Library1', 'title' => 'Lib1', 'majorversion' => 1, 'minorversion' => 2, 'translation' => [ 'es' => '{"libraryStrings": {"key": "valor"}}', 'fr' => '{"libraryStrings": {"key": "valeur"}}', ], ], 'es', true, 'AnotherLibrary', ], 'One library without any translation' => [ 'Library1 1.2' => [ 'machinename' => 'Library1', 'title' => 'Lib1', 'majorversion' => 1, 'minorversion' => 2, ], 'es', true, ], 'One library with 2 translations (es and fr) - es' => [ 'Library1 1.2' => [ 'machinename' => 'Library1', 'title' => 'Lib1', 'majorversion' => 1, 'minorversion' => 2, 'translation' => [ 'es' => '{"libraryStrings": {"key": "valor"}}', 'fr' => '{"libraryStrings": {"key": "valeur"}}', ], ], 'es', ], 'One library with 2 translations (es and fr) - fr' => [ 'Library1 1.2' => [ 'machinename' => 'Library1', 'title' => 'Lib1', 'majorversion' => 1, 'minorversion' => 2, 'translation' => [ 'es' => '{"libraryStrings": {"key": "valor"}}', 'fr' => '{"libraryStrings": {"key": "valeur"}}', ], ], 'fr', ], 'One library with 2 translations (es and fr) - unexisting translation (de)' => [ 'Library1 1.2' => [ 'machinename' => 'Library1', 'title' => 'Lib1', 'majorversion' => 1, 'minorversion' => 2, 'translation' => [ 'es' => '{"libraryStrings": {"key": "valor"}}', 'fr' => '{"libraryStrings": {"key": "valeur"}}', ], ], 'de', true ], 'One library with 3 translations (one of them English) - fr' => [ 'Library1 1.2' => [ 'machinename' => 'Library1', 'title' => 'Lib1', 'majorversion' => 1, 'minorversion' => 2, 'translation' => [ 'en' => '{"libraryStrings": {"key": "value"}}', 'es' => '{"libraryStrings": {"key": "valor"}}', 'fr' => '{"libraryStrings": {"key": "valeur"}}', ], ], 'fr', ], 'One library with 3 translations (one of them English) - en' => [ 'Library1 1.2' => [ 'machinename' => 'Library1', 'title' => 'Lib1', 'majorversion' => 1, 'minorversion' => 2, 'translation' => [ 'en' => '{"libraryStrings": {"key": "value"}}', 'es' => '{"libraryStrings": {"key": "valor"}}', 'fr' => '{"libraryStrings": {"key": "valeur"}}', ], ], 'en', ], ]; } /** * Test that the method getAvailableLanguages retrieves all the language available of a library. * * @dataProvider get_available_languages_provider * * @param array $datalib Library data to create * @param array $expectedlangs Available languages expected. * @param string $machinename The machine readable name of the library(content type) * @param int $majorversion Major part of version number * @param int $minorversion Minor part of version number */ public function test_get_available_languages(array $datalib, ?array $expectedlangs = null, ?string $machinename = '', ?int $majorversion = 1, ?int $minorversion = 0): void { $this->resetAfterTest(true); // Fetch generator. $generator = \testing_util::get_data_generator(); $h5pgenerator = $generator->get_plugin_generator('core_h5p'); $h5pfilestorage = new file_storage(); $h5ptempath = $h5pfilestorage->getTmpPath(); $translations = []; if ($datalib) { if (array_key_exists('translation', $datalib)) { $translations = $datalib['translation']; } // Create DB entry for this library. $tmplib = $h5pgenerator->create_library_record($datalib['machinename'], $datalib['title'], $datalib['majorversion'], $datalib['minorversion']); // Create the files for this libray. [$library, $files] = $h5pgenerator->create_library($h5ptempath, $tmplib->id, $datalib['machinename'], $datalib['majorversion'], $datalib['minorversion'], $translations); $h5pfilestorage->saveLibrary($library); if (empty($machinename)) { $machinename = $datalib['machinename']; } if (empty($majorversion)) { $majorversion = $datalib['majorversion']; } if (empty($minorversion)) { $minorversion = $datalib['minorversion']; } } // Get available languages. $langs = $this->editorframework->getAvailableLanguages($machinename, $majorversion, $minorversion); $this->assertCount(count($expectedlangs), $langs); $this->assertEquals(ksort($expectedlangs), ksort($langs)); } /** * Data provider for test_get_available_languages(). * * @return array */ public function get_available_languages_provider(): array { return [ 'No library' => [ [], [], 'Library1', 1, 2, ], 'One library created but getting available from an unexisting one' => [ 'Library1 1.2' => [ 'machinename' => 'Library1', 'title' => 'Lib1', 'majorversion' => 1, 'minorversion' => 2, 'translation' => [ 'es' => '{"libraryStrings": {"key": "valor"}}', 'fr' => '{"libraryStrings": {"key": "valeur"}}', ], ], [], 'Library2', 1, 2, ], 'One library without any translation' => [ 'Library1 1.2' => [ 'machinename' => 'Library1', 'title' => 'Lib1', 'majorversion' => 1, 'minorversion' => 2, ], ['en'], ], 'One library with 2 translations (es and fr)' => [ 'Library1 1.2' => [ 'machinename' => 'Library1', 'title' => 'Lib1', 'majorversion' => 1, 'minorversion' => 2, 'translation' => [ 'es' => '{"libraryStrings": {"key": "valor"}}', 'fr' => '{"libraryStrings": {"key": "valeur"}}', ], ], ['en', 'es', 'fr'], ], 'One library with 3 translations (one of them English)' => [ 'Library1 1.2' => [ 'machinename' => 'Library1', 'title' => 'Lib1', 'majorversion' => 1, 'minorversion' => 2, 'translation' => [ 'en' => '{"libraryStrings": {"key": "value"}}', 'es' => '{"libraryStrings": {"key": "valor"}}', 'fr' => '{"libraryStrings": {"key": "valeur"}}', ], ], ['en', 'es', 'fr'], ], ]; } /** * Test that the method getLibraries get the specified libraries or all the content types (runnable = 1). */ public function test_getLibraries(): void { $this->resetAfterTest(true); $generator = \testing_util::get_data_generator(); $h5pgenerator = $generator->get_plugin_generator('core_h5p'); // Generate some h5p related data. $data = $h5pgenerator->generate_h5p_data(); $expectedlibraries = []; foreach ($data as $key => $value) {
< if (isset($value->data)) {
> if (isset($value->data) && $value->data->runnable) {
$value->data->name = $value->data->machinename; $value->data->majorVersion = $value->data->majorversion; $value->data->minorVersion = $value->data->minorversion; $expectedlibraries[$value->data->title] = $value->data; } } ksort($expectedlibraries); // Get all libraries. $libraries = $this->editorframework->getLibraries(); foreach ($libraries as $library) { $actuallibraries[] = $library->title; } sort($actuallibraries); $this->assertEquals(array_keys($expectedlibraries), $actuallibraries); // Get a subset of libraries. $librariessubset = array_slice($expectedlibraries, 0, 4); $actuallibraries = []; $libraries = $this->editorframework->getLibraries($librariessubset); foreach ($libraries as $library) { $actuallibraries[] = $library->title; } $this->assertEquals(array_keys($librariessubset), $actuallibraries); } }