MDL-69520 core_h5p: unit tests for covering example and tutorial
authorSara Arjona <sara@moodle.com>
Thu, 24 Sep 2020 19:23:36 +0000 (21:23 +0200)
committerSara Arjona <sara@moodle.com>
Wed, 14 Oct 2020 16:35:52 +0000 (18:35 +0200)
h5p/tests/editor_ajax_test.php
h5p/tests/framework_test.php
h5p/tests/generator/lib.php
h5p/tests/generator_test.php
h5p/tests/h5p_core_test.php

index c0b6734..13f46c9 100644 (file)
@@ -79,6 +79,35 @@ class editor_ajax_testcase extends \advanced_testcase {
         $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.
      *
index 1a2c18b..ce12f57 100644 (file)
@@ -174,6 +174,55 @@ class framework_testcase extends \advanced_testcase {
         $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().
      */
index 72e8087..78c234b 100644 (file)
@@ -173,9 +173,10 @@ class core_h5p_generator extends \component_generator_base {
      */
     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);
@@ -248,10 +249,13 @@ class core_h5p_generator extends \component_generator_base {
      * @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(
@@ -266,7 +270,9 @@ class core_h5p_generator extends \component_generator_base {
             'preloadedcss' => 'css/example.css',
             'droplibrarycss' => '',
             'semantics' => $semantics,
-            'addto' => $addto
+            'addto' => $addto,
+            'tutorial' => $tutorial,
+            'example' => $example
         );
 
         $libraryid = $DB->insert_record('h5p_libraries', $content);
index dc266f5..05be967 100644 (file)
@@ -227,7 +227,9 @@ class generator_testcase extends \advanced_testcase {
 
         $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) [
@@ -244,6 +246,8 @@ class generator_testcase extends \advanced_testcase {
             'droplibrarycss' => '',
             'semantics' => 'Semantics example',
             'addto' => '/regex11/',
+            'tutorial' => 'http://tutorial.org/',
+            'example' => 'http://example.org/',
             'coremajor' => null,
             'coreminor' => null,
             'metadatasettings' => null,
index 8d7f088..d441fdc 100644 (file)
@@ -68,8 +68,14 @@ class h5p_core_testcase extends \advanced_testcase {
 
         // 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,
@@ -77,6 +83,13 @@ class h5p_core_testcase extends \advanced_testcase {
                 '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'];
@@ -92,6 +105,10 @@ class h5p_core_testcase extends \advanced_testcase {
         $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);
+        }
     }
 
     /**