$this->assertEquals($expectedlibraries, array_keys($actuallibraries));
}
+ /**
+ * Test that getContentTypeCache method retrieves the latest library versions that exists locally.
+ */
+ public function test_getContentTypeCache(): void {
+ $this->resetAfterTest();
+
+ $h5pgenerator = \testing_util::get_data_generator()->get_plugin_generator('core_h5p');
+
+ // Create several libraries records.
+ $lib1 = $h5pgenerator->create_library_record('Library1', 'Lib1', 1, 0, 1, '', null, 'http://tutorial.org',
+ 'http://example.org');
+ $lib2 = $h5pgenerator->create_library_record('Library2', 'Lib2', 2, 0, 1, '', null, 'http://tutorial.org');
+ $lib3 = $h5pgenerator->create_library_record('Library3', 'Lib3', 3, 0);
+ $libs = [$lib1, $lib2, $lib3];
+
+ $libraries = $this->editorajax->getContentTypeCache();
+ $this->assertCount(3, $libraries);
+ foreach ($libs as $lib) {
+ $library = $libraries[$lib->id];
+ $this->assertEquals($library->id, $lib->id);
+ $this->assertEquals($library->machine_name, $lib->machinename);
+ $this->assertEquals($library->major_version, $lib->majorversion);
+ $this->assertEquals($library->tutorial, $lib->tutorial);
+ $this->assertEquals($library->example, $lib->example);
+ $this->assertEquals($library->is_recommended, 0);
+ $this->assertEquals($library->summary, '');
+ }
+ }
+
/**
* Test that the method getTranslations retrieves the translations of several libraries.
*
$this->assertEmpty($data);
}
+ /**
+ * Test the behaviour of setLibraryTutorialUrl().
+ */
+ public function test_setLibraryTutorialUrl() {
+ global $DB;
+
+ $this->resetAfterTest();
+
+ $generator = $this->getDataGenerator()->get_plugin_generator('core_h5p');
+
+ // Create several libraries records.
+ $lib1 = $generator->create_library_record('Library1', 'Lib1', 1, 0, 1, '', null, 'http://tutorial1.org',
+ 'http://example.org');
+ $lib2 = $generator->create_library_record('Library2', 'Lib2', 2, 0, 1, '', null, 'http://tutorial2.org');
+ $lib3 = $generator->create_library_record('Library3', 'Lib3', 3, 0);
+
+ // Check only lib1 tutorial URL is updated.
+ $url = 'https://newtutorial.cat';
+ $this->framework->setLibraryTutorialUrl($lib1->machinename, $url);
+
+ $libraries = $DB->get_records('h5p_libraries');
+ $this->assertEquals($libraries[$lib1->id]->tutorial, $url);
+ $this->assertNotEquals($libraries[$lib2->id]->tutorial, $url);
+
+ // Check lib1 tutorial URL is set to null.
+ $this->framework->setLibraryTutorialUrl($lib1->machinename, null);
+
+ $libraries = $DB->get_records('h5p_libraries');
+ $this->assertCount(3, $libraries);
+ $this->assertNull($libraries[$lib1->id]->tutorial);
+
+ // Check no tutorial URL is set if library name doesn't exist.
+ $this->framework->setLibraryTutorialUrl('Unexisting library', $url);
+
+ $libraries = $DB->get_records('h5p_libraries');
+ $this->assertCount(3, $libraries);
+ $this->assertNull($libraries[$lib1->id]->tutorial);
+ $this->assertEquals($libraries[$lib2->id]->tutorial, 'http://tutorial2.org');
+ $this->assertNull($libraries[$lib3->id]->tutorial);
+
+ // Check tutorial is set as expected when it was null.
+ $this->framework->setLibraryTutorialUrl($lib3->machinename, $url);
+
+ $libraries = $DB->get_records('h5p_libraries');
+ $this->assertEquals($libraries[$lib3->id]->tutorial, $url);
+ $this->assertNull($libraries[$lib1->id]->tutorial);
+ $this->assertEquals($libraries[$lib2->id]->tutorial, 'http://tutorial2.org');
+ }
+
/**
* Test the behaviour of setErrorMessage().
*/
*/
public function generate_h5p_data(bool $createlibraryfiles = false): stdClass {
// Create libraries.
- $mainlib = $libraries[] = $this->create_library_record('MainLibrary', 'Main Lib', 1, 0);
- $lib1 = $libraries[] = $this->create_library_record('Library1', 'Lib1', 2, 0);
- $lib2 = $libraries[] = $this->create_library_record('Library2', 'Lib2', 2, 1);
+ $mainlib = $libraries[] = $this->create_library_record('MainLibrary', 'Main Lib', 1, 0, 1, '', null,
+ 'http://tutorial.org', 'http://example.org');
+ $lib1 = $libraries[] = $this->create_library_record('Library1', 'Lib1', 2, 0, 1, '', null, null, 'http://example.org');
+ $lib2 = $libraries[] = $this->create_library_record('Library2', 'Lib2', 2, 1, 1, '', null, 'http://tutorial.org');
$lib3 = $libraries[] = $this->create_library_record('Library3', 'Lib3', 3, 2);
$lib4 = $libraries[] = $this->create_library_record('Library4', 'Lib4', 1, 1);
$lib5 = $libraries[] = $this->create_library_record('Library5', 'Lib5', 1, 3);
* @param int $patchversion The library's patch version
* @param string $semantics Json describing the content structure for the library
* @param string $addto The plugin configuration data
+ * @param string $tutorial The tutorial URL
+ * @param string $examlpe The example URL
* @return stdClass An object representing the added library record
*/
public function create_library_record(string $machinename, string $title, int $majorversion = 1,
- int $minorversion = 0, int $patchversion = 1, string $semantics = '', string $addto = null): stdClass {
+ int $minorversion = 0, int $patchversion = 1, string $semantics = '', string $addto = null,
+ string $tutorial = null, string $example = null): stdClass {
global $DB;
$content = array(
'preloadedcss' => 'css/example.css',
'droplibrarycss' => '',
'semantics' => $semantics,
- 'addto' => $addto
+ 'addto' => $addto,
+ 'tutorial' => $tutorial,
+ 'example' => $example
);
$libraryid = $DB->insert_record('h5p_libraries', $content);
$generator = $this->getDataGenerator()->get_plugin_generator('core_h5p');
- $data = $generator->create_library_record('Library', 'Lib', 1, 2, 3, 'Semantics example', '/regex11/');
+ $data = $generator->create_library_record(
+ 'Library', 'Lib', 1, 2, 3, 'Semantics example', '/regex11/', 'http://tutorial.org/', 'http://example.org/'
+ );
unset($data->id);
$expected = (object) [
'droplibrarycss' => '',
'semantics' => 'Semantics example',
'addto' => '/regex11/',
+ 'tutorial' => 'http://tutorial.org/',
+ 'example' => 'http://example.org/',
'coremajor' => null,
'coreminor' => null,
'metadatasettings' => null,
// Get info of latest content types versions.
$contenttypes = $this->core->get_latest_content_types()->contentTypes;
- // We are installing the first content type.
+ // We are installing the first content type with tutorial and example fields (or the first one if none has them).
$librarydata = $contenttypes[0];
+ foreach ($contenttypes as $contentype) {
+ if (isset($contenttype->tutorial) && isset($contenttype->example)) {
+ $librarydata = $contenttype;
+ break;
+ }
+ }
$library = [
'machineName' => $librarydata->id,
'minorVersion' => $librarydata->version->minor,
'patchVersion' => $librarydata->version->patch,
];
+ // Add example and tutorial to the library.
+ if (isset($librarydata->example)) {
+ $library['example'] = $librarydata->example;
+ }
+ if (isset($librarydata->tutorial)) {
+ $library['tutorial'] = $librarydata->tutorial;
+ }
// Verify that the content type is not yet installed.
$conditions['machinename'] = $library['machineName'];
$this->assertEquals($librarydata->id, $typeinstalled->machinename);
$this->assertEquals($librarydata->coreApiVersionNeeded->major, $typeinstalled->coremajor);
$this->assertEquals($librarydata->coreApiVersionNeeded->minor, $typeinstalled->coreminor);
+ if (isset($librarydata->tutorial)) {
+ $this->assertEquals($librarydata->tutorial, $typeinstalled->tutorial);
+ $this->assertEquals($librarydata->example, $typeinstalled->example);
+ }
}
/**