MDL-40039 phpunit: Test core_files_external::upload() without the new params
[moodle.git] / files / tests / externallib_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/>.
18 /**
19  * PHPunit tests for external files API.
20  *
21  * @package    core_files
22  * @category   external
23  * @copyright  2013 Ankit Agarwal
24  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
25  * @since Moodle 2.6
26  */
27 defined('MOODLE_INTERNAL') || die();
29 global $CFG;
31 require_once($CFG->dirroot . '/webservice/tests/helpers.php');
32 require_once($CFG->dirroot . '/files/externallib.php');
34 class test_external_files extends advanced_testcase {
36     /*
37      * Test core_files_external::upload().
38      */
40     public function test_upload() {
41         global $USER;
43         $this->resetAfterTest();
44         $this->setAdminUser();
45         $context = context_user::instance($USER->id);
46         $contextid = $context->id;
47         $component = "user";
48         $filearea = "private";
49         $itemid = 0;
50         $filepath = "/";
51         $filename = "Simple.txt";
52         $filecontent = base64_encode("Let us create a nice simple file");
53         $contextlevel = null;
54         $instanceid = null;
55         $browser = get_file_browser();
57         // Make sure no file exists.
58         $file = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, $filename);
59         $this->assertEmpty($file);
61         // Call the api to create a file.
62         core_files_external::upload($contextid, $component, $filearea, $itemid, $filepath,
63                 $filename, $filecontent, $contextlevel, $instanceid);
65         // Make sure the file was created.
66         $file = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, $filename);
67         $this->assertNotEmpty($file);
69         // Make sure no file exists.
70         $itemid = 2;
71         $filename = "Simple2.txt";
72         $file = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, $filename);
73         $this->assertEmpty($file);
75         // Call the api to create a file.
76         $fileinfo = core_files_external::upload($contextid, $component, $filearea, $itemid,
77                 $filepath, $filename, $filecontent, $contextlevel, $instanceid);
79         // Make sure itemid is always set to 0.
80         $this->assertEquals(0, $fileinfo['itemid']);
82         // Let us try creating a file using contextlevel and instance id.
83         $itemid = 0;
84         $filename = "Simple5.txt";
85         $contextid = 0;
86         $contextlevel = "user";
87         $instanceid = $USER->id;
88         $file = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, $filename);
89         $this->assertEmpty($file);
90         $fileinfo = core_files_external::upload($contextid, $component, $filearea, $itemid, $filepath,
91                 $filename, $filecontent, $contextlevel, $instanceid);
92         $this->assertEmpty($file);
94         // Make sure the same file cannot be created again.
95         $this->setExpectedException("moodle_exception");
96         core_files_external::upload($contextid, $component, $filearea, $itemid, $filepath,
97                 $filename, $filecontent, $contextlevel, $instanceid);
98     }
100     /*
101      * Make sure only user component is allowed in  core_files_external::upload().
102      */
103     public function test_upload_param_component() {
104         global $USER;
106         $this->resetAfterTest();
107         $this->setAdminUser();
108         $context = context_user::instance($USER->id);
109         $contextid = $context->id;
110         $component = "backup";
111         $filearea = "private";
112         $itemid = 0;
113         $filepath = "/";
114         $filename = "Simple3.txt";
115         $filecontent = base64_encode("Let us create a nice simple file");
116         $contextlevel = null;
117         $instanceid = null;
119         // Make sure exception is thrown.
120         $this->setExpectedException("coding_exception");
121         core_files_external::upload($contextid, $component, $filearea, $itemid,
122                 $filepath, $filename, $filecontent, $contextlevel, $instanceid);
123     }
125     /*
126      * Make sure only private area is allowed in  core_files_external::upload().
127      */
128     public function test_upload_param_area() {
129         global $USER;
131         $this->resetAfterTest();
132         $this->setAdminUser();
133         $context = context_user::instance($USER->id);
134         $contextid = $context->id;
135         $component = "user";
136         $filearea = "draft";
137         $itemid = 0;
138         $filepath = "/";
139         $filename = "Simple4.txt";
140         $filecontent = base64_encode("Let us create a nice simple file");
141         $contextlevel = null;
142         $instanceid = null;
144         // Make sure exception is thrown.
145         $this->setExpectedException("coding_exception");
146         core_files_external::upload($contextid, $component, $filearea, $itemid, $filepath,
147                 $filename, $filecontent, $contextlevel, $instanceid);
148     }
150     /*
151      * Make sure core_files_external::upload() works without new parameters.
152      */
153     public function test_upload_without_new_param() {
154         global $USER;
156         $this->resetAfterTest();
157         $this->setAdminUser();
158         $context = context_user::instance($USER->id);
159         $contextid = $context->id;
160         $component = "user";
161         $filearea = "private";
162         $itemid = 0;
163         $filepath = "/";
164         $filename = "Simple4.txt";
165         $filecontent = base64_encode("Let us create a nice simple file");
167         // Make sure the file is created.
168         @core_files_external::upload($contextid, $component, $filearea, $itemid, $filepath, $filename, $filecontent);
169         $browser = get_file_browser();
170         $file = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, $filename);
171         $this->assertNotEmpty($file);
172     }