4eba5344b482d9e7ab0a244dec1881e9e304576c
[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_strings
83      */
84     public function test_get_strings() {
85         $this->resetAfterTest(true);
87         $stringmanager = get_string_manager();
89         $service = new stdClass();
90         $service->name = 'Dummy Service';
91         $service->id = 12;
93         $returnedstrings = core_external::get_strings(
94                 array(
95                     array(
96                         'stringid' => 'addservice', 'component' => 'webservice',
97                         'stringparams' => array(array('name' => 'name', 'value' => $service->name),
98                               array('name' => 'id', 'value' => $service->id)
99                         ),
100                         'lang' => 'en'
101                     ),
102                     array('stringid' =>  'addaservice', 'component' => 'webservice', 'lang' => 'en')
103                 ));
105         // We need to execute the return values cleaning process to simulate the web service server.
106         $returnedstrings = external_api::clean_returnvalue(core_external::get_strings_returns(), $returnedstrings);
108         foreach($returnedstrings as $returnedstring) {
109             $corestring = $stringmanager->get_string($returnedstring['stringid'],
110                                                      $returnedstring['component'],
111                                                      $service,
112                                                      'en');
113             $this->assertSame($corestring, $returnedstring['string']);
114         }
115     }
117     /**
118      * Test get_component_strings
119      */
120     public function test_get_component_strings() {
121         global $USER;
122         $this->resetAfterTest(true);
124         $stringmanager = get_string_manager();
126         $wsstrings = $stringmanager->load_component_strings('webservice', current_language());
128         $componentstrings = core_external::get_component_strings('webservice');
130         // We need to execute the return values cleaning process to simulate the web service server.
131         $componentstrings = external_api::clean_returnvalue(core_external::get_component_strings_returns(), $componentstrings);
133         $this->assertEquals(count($componentstrings), count($wsstrings));
134         foreach($componentstrings as $string) {
135             $this->assertSame($string['string'], $wsstrings[$string['stringid']]);
136         }
137     }
139     /**
140      * Test update_inplace_editable()
141      */
142     public function test_update_inplace_editable() {
143         $this->resetAfterTest(true);
145         // Call service for component that does not have inplace_editable callback.
146         try {
147             core_external::update_inplace_editable('tool_log', 'itemtype', 1, 'newvalue');
148             $this->fail('Exception expected');
149         } catch (moodle_exception $e) {
150             $this->assertEquals('Error calling update processor', $e->getMessage());
151         }
153         // This is a very basic test for the return value of the external function.
154         // More detailed test for tag updating can be found in core_tag component.
155         $this->setAdminUser();
156         $tag = $this->getDataGenerator()->create_tag();
157         $res = core_external::update_inplace_editable('core_tag', 'tagname', $tag->id, 'new tag name');
158         $res = external_api::clean_returnvalue(core_external::update_inplace_editable_returns(), $res);
159         $this->assertEquals('new tag name', $res['value']);
160     }