Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.0.x will end 8 May 2023 (12 months).
  • Bug fixes for security issues in 4.0.x will end 13 November 2023 (18 months).
  • PHP version: minimum PHP 7.3.0 Note: the minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is also supported.
<?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 H5PEditorAjaxInterface 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;
< use ReflectionMethod;
> use Moodle\H5PCore;
/** * * Test class covering the H5PEditorAjaxInterface 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_ajax_testcase extends \advanced_testcase {
> class editor_ajax_test extends \advanced_testcase {
/** @var editor_ajax H5P editor ajax instance */ protected $editorajax; /** * Set up function for tests. */
< protected function setUp() {
> protected function setUp(): void {
parent::setUp(); autoloader::register(); $this->editorajax = new editor_ajax(); } /** * Test that getLatestLibraryVersions method retrieves the latest installed library versions. */ public function test_getLatestLibraryVersions(): void { $this->resetAfterTest(); $generator = \testing_util::get_data_generator(); $h5pgenerator = $generator->get_plugin_generator('core_h5p'); // Create several libraries records. $h5pgenerator->create_library_record('Library1', 'Lib1', 2, 0); $lib2 = $h5pgenerator->create_library_record('Library2', 'Lib2', 2, 1); $expectedlibraries[] = $lib2->id; $lib3 = $h5pgenerator->create_library_record('Library3', 'Lib3', 1, 3); $expectedlibraries[] = $lib3->id; $h5pgenerator->create_library_record('Library1', 'Lib1', 2, 1); $lib12 = $h5pgenerator->create_library_record('Library1', 'Lib1', 3, 0); $expectedlibraries[] = $lib12->id; $actuallibraries = $this->editorajax->getLatestLibraryVersions(); ksort($actuallibraries); $this->assertEquals($expectedlibraries, array_keys($actuallibraries)); } /**
> * Test that getContentTypeCache method retrieves the latest library versions that exists locally. * Test that the method getTranslations retrieves the translations of several libraries. > */ * > public function test_getContentTypeCache(): void { * @dataProvider get_translations_provider > $this->resetAfterTest(); * > * @param array $datalibs Libraries to create > $h5pgenerator = \testing_util::get_data_generator()->get_plugin_generator('core_h5p'); * @param string $lang Language to get the translations > * @param bool $emptyexpected True if empty translations are expected; false otherwise > // Create several libraries records. * @param array $altstringlibs When defined, libraries are no created and the content here is used to call the method > $lib1 = $h5pgenerator->create_library_record('Library1', 'Lib1', 1, 0, 1, '', null, 'http://tutorial.org', */ > 'http://example.org'); public function test_get_translations(array $datalibs, string $lang, bool $emptyexpected, ?array $altstringlibs = []): void { > $lib2 = $h5pgenerator->create_library_record('Library2', 'Lib2', 2, 0, 1, '', null, 'http://tutorial.org'); $this->resetAfterTest(); > $lib3 = $h5pgenerator->create_library_record('Library3', 'Lib3', 3, 0); > $libs = [$lib1, $lib2, $lib3]; // Fetch generator. > $generator = \testing_util::get_data_generator(); > $libraries = $this->editorajax->getContentTypeCache(); $h5pgenerator = $generator->get_plugin_generator('core_h5p'); > $this->assertCount(3, $libraries); > foreach ($libs as $lib) { $h5pfilestorage = new file_storage(); > $library = $libraries[$lib->id]; $h5ptempath = $h5pfilestorage->getTmpPath(); > $this->assertEquals($library->id, $lib->id); > $this->assertEquals($library->machine_name, $lib->machinename); if (!empty($altstringlibs)) { > $this->assertEquals($library->major_version, $lib->majorversion); // Libraries won't be created and the getTranslation method will be called with this $altstringlibs. > $this->assertEquals($library->tutorial, $lib->tutorial); $stringlibs = $altstringlibs; > $this->assertEquals($library->example, $lib->example); } else { > $this->assertEquals($library->is_recommended, 0); $stringlibs = []; > $this->assertEquals($library->summary, ''); foreach ($datalibs as $datalib) { > } // 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'], $datalib['translation']); $h5pfilestorage->saveLibrary($library);
< $stringlibs[] = \H5PCore::libraryToString($library);
> $stringlibs[] = H5PCore::libraryToString($library);
} } $translations = $this->editorajax->getTranslations($stringlibs, $lang); if ($emptyexpected) { $this->assertEmpty($translations); } else { foreach ($translations as $stringlib => $translation) { $this->assertEquals($datalibs[$stringlib]['translation'][$lang], $translation); } } } /** * Data provider for test_get_translations(). * * @return array */ public function get_translations_provider(): array { return [ 'No library' => [ [], 'es', true, ['Library1 1.2'] ], 'One library with existing translation (es)' => [ [ 'Library1 1.2' => [ 'machinename' => 'Library1', 'title' => 'Lib1', 'majorversion' => 1, 'minorversion' => 2, 'translation' => [ 'es' => '{"libraryStrings": {"key": "valor"}}', 'fr' => '{"libraryStrings": {"key": "valeur"}}', ], ] ], 'es', false ], 'One library with existing translation (fr)' => [ [ 'Library1 1.2' => [ 'machinename' => 'Library1', 'title' => 'Lib1', 'majorversion' => 1, 'minorversion' => 2, 'translation' => [ 'es' => '{"libraryStrings": {"key": "valor"}}', 'fr' => '{"libraryStrings": {"key": "valeur"}}', ], ] ], 'fr', false ], 'One library with 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 ], 'Two libraries with existing translation (es)' => [ [ 'Library1 1.2' => [ 'machinename' => 'Library1', 'title' => 'Lib1', 'majorversion' => 1, 'minorversion' => 2, 'translation' => [ 'es' => '{"libraryStrings": {"key": "valor"}}', 'fr' => '{"libraryStrings": {"key": "valeur"}}', ], ], 'Library2 3.4' => [ 'machinename' => 'Library2', 'title' => 'Lib1', 'majorversion' => 3, 'minorversion' => 4, 'translation' => [ 'es' => '{"libraryStrings": {"key": "valor"}}', 'fr' => '{"libraryStrings": {"key": "valeur"}}', ], ] ], 'es', false ], 'Two libraries with unexisting translation (de)' => [ [ 'Library1 1.2' => [ 'machinename' => 'Library1', 'title' => 'Lib1', 'majorversion' => 1, 'minorversion' => 2, 'translation' => [ 'es' => '{"libraryStrings": {"key": "valor"}}', 'fr' => '{"libraryStrings": {"key": "valeur"}}', ], ], 'Library2 3.4' => [ 'machinename' => 'Library2', 'title' => 'Lib1', 'majorversion' => 3, 'minorversion' => 4, 'translation' => [ 'es' => '{"libraryStrings": {"key": "valor"}}', 'fr' => '{"libraryStrings": {"key": "valeur"}}', ], ] ], 'de', true ], ]; } }