MDL-67192 core_h5p: get site UUID from H5P using the API
[moodle.git] / lib / tests / fixtures / testable_core_h5p.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Fixture for testing the functionality of core_h5p.
19  *
20  * @package     core
21  * @subpackage  fixtures
22  * @category    test
23  * @copyright   2019 Victor Deniz <victor@moodle.com>
24  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
25  */
27 namespace core_h5p;
29 defined('MOODLE_INTERNAL') || die();
31 /**
32  * H5P factory class stub for testing purposes.
33  *
34  * This class extends the real one to return the H5P core class stub.
35  *
36  * @copyright  2019 Victor Deniz <victor@moodle.com>
37  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
38  */
39 class h5p_test_factory extends factory {
40     /**
41      * Returns an instance of the \core_h5p\core stub class.
42      *
43      * @return core_h5p\core
44      */
45     public function get_core(): core {
46         if ($this->core === null ) {
47             $fs = new file_storage();
48             $language = framework::get_language();
49             $context = \context_system::instance();
51             $url = \moodle_url::make_pluginfile_url($context->id, 'core_h5p', '', null,
52                 '', '')->out();
54             $this->core = new h5p_test_core($this->get_framework(), $fs, $url, $language, true);
55         }
57         return $this->core;
58     }
59 }
61 /**
62  * H5P core class stub for testing purposes.
63  *
64  * Modifies get_api_endpoint method to use local URLs.
65  *
66  * @copyright   2019 Victor Deniz <victor@moodle.com>
67  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
68  */
69 class h5p_test_core extends core {
70     /** @var $endpoint Endpoint URL for testing H5P API */
71     protected $endpoint;
73     /**
74      * Set the endpoint URL
75      *
76      * @param string $url Endpoint URL
77      * @return void
78      */
79     public function set_endpoint($url): void {
80         $this->endpoint = $url;
81     }
83     /**
84      * Get the URL of the test endpoints instead of the H5P ones.
85      *
86      * If $endpoint = 'content' and $library is null, moodle_url is the endpoint of the latest version of the H5P content
87      * types; however, if $library is the machine name of a content type, moodle_url is the endpoint to download the content type.
88      * The SITES endpoint ($endpoint = 'site') may be use to get a site UUID or send site data.
89      *
90      * @param string|null $library The machineName of the library whose endpoint is requested.
91      * @param string $endpoint The endpoint required. Valid values: "site", "content".
92      * @return \moodle_url The endpoint moodle_url object.
93      */
94     public function get_api_endpoint(?string $library = null, string $endpoint = 'content'): \moodle_url {
96         if ($library) {
97             $h5purl = $this->endpoint . '/' . $library . '.h5p';
98         } else if ($endpoint == 'content') {
99             $h5purl = $this->endpoint . '/h5pcontenttypes.json';
100         } else {
101             $h5purl = $this->endpoint . '/h5puuid.json';
102         }
104         return new \moodle_url($h5purl);
105     }