Merge branch 'MDL-53779-master' of git://github.com/FMCorz/moodle
[moodle.git] / lib / external / tests / external_test.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 defined('MOODLE_INTERNAL') || die();
19 global $CFG;
20 require_once($CFG->dirroot . '/lib/external/externallib.php');
21 require_once($CFG->dirroot . '/webservice/tests/helpers.php');
23 /**
24  * External library functions unit tests
25  *
26  * @package    core
27  * @category   phpunit
28  * @copyright  2012 Jerome Mouneyrac
29  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
30  */
31 class core_external_testcase extends externallib_advanced_testcase {
33     /**
34      * Test get_string
35      */
36     public function test_get_string() {
37         $this->resetAfterTest(true);
39         $service = new stdClass();
40         $service->name = 'Dummy Service';
41         $service->id = 12;
43         // String with two parameters.
44         $returnedstring = core_external::get_string('addservice', 'webservice', null,
45                 array(array('name' => 'name', 'value' => $service->name),
46                       array('name' => 'id', 'value' => $service->id)));
48         // We need to execute the return values cleaning process to simulate the web service server.
49         $returnedstring = external_api::clean_returnvalue(core_external::get_string_returns(), $returnedstring);
51         $corestring = get_string('addservice', 'webservice', $service);
52         $this->assertSame($corestring, $returnedstring);
54         // String with one parameter.
55         $acapname = 'A capability name';
56         $returnedstring = core_external::get_string('missingrequiredcapability', 'webservice', null,
57                 array(array('value' => $acapname)));
59         // We need to execute the return values cleaning process to simulate the web service server.
60         $returnedstring = external_api::clean_returnvalue(core_external::get_string_returns(), $returnedstring);
62         $corestring = get_string('missingrequiredcapability', 'webservice', $acapname);
63         $this->assertSame($corestring, $returnedstring);
65         // String without parameters.
66         $returnedstring = core_external::get_string('missingpassword', 'webservice');
68         // We need to execute the return values cleaning process to simulate the web service server.
69         $returnedstring = external_api::clean_returnvalue(core_external::get_string_returns(), $returnedstring);
71         $corestring = get_string('missingpassword', 'webservice');
72         $this->assertSame($corestring, $returnedstring);
74         // String with two parameter but one is invalid (not named).
75         $this->setExpectedException('moodle_exception');
76         $returnedstring = core_external::get_string('addservice', 'webservice', null,
77                 array(array('value' => $service->name),
78                       array('name' => 'id', 'value' => $service->id)));
79     }
81     /**
82      * Test get_string with HTML.
83      */
84     public function test_get_string_containing_html() {
85         $result = core_external::get_string('registrationinfo');
86         $actual = external_api::clean_returnvalue(core_external::get_string_returns(), $result);
87         $expected = get_string('registrationinfo', 'moodle');
88         $this->assertSame($expected, $actual);
89     }
91     /**
92      * Test get_string with arguments containing HTML.
93      */
94     public function test_get_string_with_args_containing_html() {
95         $result = core_external::get_string('added', 'moodle', null, [['value' => '<strong>Test</strong>']]);
96         $actual = external_api::clean_returnvalue(core_external::get_string_returns(), $result);
97         $expected = get_string('added', 'moodle', '<strong>Test</strong>');
98         $this->assertSame($expected, $actual);
99     }
101     /**
102      * Test get_strings
103      */
104     public function test_get_strings() {
105         $this->resetAfterTest(true);
107         $stringmanager = get_string_manager();
109         $service = new stdClass();
110         $service->name = 'Dummy Service';
111         $service->id = 12;
113         $returnedstrings = core_external::get_strings(
114                 array(
115                     array(
116                         'stringid' => 'addservice', 'component' => 'webservice',
117                         'stringparams' => array(array('name' => 'name', 'value' => $service->name),
118                               array('name' => 'id', 'value' => $service->id)
119                         ),
120                         'lang' => 'en'
121                     ),
122                     array('stringid' =>  'addaservice', 'component' => 'webservice', 'lang' => 'en')
123                 ));
125         // We need to execute the return values cleaning process to simulate the web service server.
126         $returnedstrings = external_api::clean_returnvalue(core_external::get_strings_returns(), $returnedstrings);
128         foreach($returnedstrings as $returnedstring) {
129             $corestring = $stringmanager->get_string($returnedstring['stringid'],
130                                                      $returnedstring['component'],
131                                                      $service,
132                                                      'en');
133             $this->assertSame($corestring, $returnedstring['string']);
134         }
135     }
137     /**
138      * Test get_strings with HTML.
139      */
140     public function test_get_strings_containing_html() {
141         $result = core_external::get_strings([['stringid' => 'registrationinfo'], ['stringid' => 'loginaspasswordexplain']]);
142         $actual = external_api::clean_returnvalue(core_external::get_strings_returns(), $result);
143         $this->assertSame(get_string('registrationinfo', 'moodle'), $actual[0]['string']);
144         $this->assertSame(get_string('loginaspasswordexplain', 'moodle'), $actual[1]['string']);
145     }
147     /**
148      * Test get_strings with arguments containing HTML.
149      */
150     public function test_get_strings_with_args_containing_html() {
151         $result = core_external::get_strings([
152             ['stringid' => 'added', 'stringparams' => [['value' => '<strong>Test</strong>']]],
153             ['stringid' => 'loggedinas', 'stringparams' => [['value' => '<strong>Test</strong>']]]]
154         );
155         $actual = external_api::clean_returnvalue(core_external::get_strings_returns(), $result);
156         $this->assertSame(get_string('added', 'moodle', '<strong>Test</strong>'), $actual[0]['string']);
157         $this->assertSame(get_string('loggedinas', 'moodle', '<strong>Test</strong>'), $actual[1]['string']);
158     }
160     /**
161      * Test get_component_strings
162      */
163     public function test_get_component_strings() {
164         global $USER;
165         $this->resetAfterTest(true);
167         $stringmanager = get_string_manager();
169         $wsstrings = $stringmanager->load_component_strings('webservice', current_language());
171         $componentstrings = core_external::get_component_strings('webservice');
173         // We need to execute the return values cleaning process to simulate the web service server.
174         $componentstrings = external_api::clean_returnvalue(core_external::get_component_strings_returns(), $componentstrings);
176         $this->assertEquals(count($componentstrings), count($wsstrings));
177         foreach($componentstrings as $string) {
178             $this->assertSame($string['string'], $wsstrings[$string['stringid']]);
179         }
180     }
182     /**
183      * Test update_inplace_editable()
184      */
185     public function test_update_inplace_editable() {
186         $this->resetAfterTest(true);
188         // Call service for component that does not have inplace_editable callback.
189         try {
190             core_external::update_inplace_editable('tool_log', 'itemtype', 1, 'newvalue');
191             $this->fail('Exception expected');
192         } catch (moodle_exception $e) {
193             $this->assertEquals('Error calling update processor', $e->getMessage());
194         }
196         // This is a very basic test for the return value of the external function.
197         // More detailed test for tag updating can be found in core_tag component.
198         $this->setAdminUser();
199         $tag = $this->getDataGenerator()->create_tag();
200         $res = core_external::update_inplace_editable('core_tag', 'tagname', $tag->id, 'new tag name');
201         $res = external_api::clean_returnvalue(core_external::update_inplace_editable_returns(), $res);
202         $this->assertEquals('new tag name', $res['value']);
203     }