Moodle release 2.9.5
[moodle.git] / user / tests / myprofile_test.php
blobf273192f71eeeb13599c561b3455cf70e3835237
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.
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 * Unit tests for core_user\output\myprofile
20 * @package core_user
21 * @category test
22 * @copyright 2015 onwards Ankit Agarwal
23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later (5)
26 defined('MOODLE_INTERNAL') || die();
27 global $CFG;
28 require_once($CFG->dirroot . "/user/tests/fixtures/myprofile_fixtures.php");
30 /**
31 * Unit tests for core_user\output\myprofile
33 * @package core_user
34 * @category test
35 * @copyright 2015 onwards Ankit Agarwal
36 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later (5)
38 class core_user_myprofile_testcase extends advanced_testcase {
39 /**
40 * Test node::__construct().
42 public function test_node__construct() {
43 $node = new \core_user\output\myprofile\node('parentcat', 'nodename',
44 'nodetitle', 'after', 'www.google.com', 'description', new pix_icon('i/course', ''), 'class1 class2');
45 $this->assertSame('parentcat', $node->parentcat);
46 $this->assertSame('nodename', $node->name);
47 $this->assertSame('nodetitle', $node->title);
48 $this->assertSame('after', $node->after);
49 $url = new moodle_url('www.google.com');
50 $this->assertEquals($url, $node->url);
51 $this->assertEquals(new pix_icon('i/course', ''), $node->icon);
52 $this->assertSame('class1 class2', $node->classes);
55 /**
56 * Test category::node_add().
58 public function test_add_node() {
59 $tree = new \core_user\output\myprofile\tree();
60 $category = new \core_user\output\myprofile\category('category', 'categorytitle');
62 $node = new \core_user\output\myprofile\node('category', 'nodename',
63 'nodetitle', null, 'www.iAmaZombie.com', 'description');
64 $category->add_node($node);
65 $this->assertCount(1, $category->nodes);
66 $node = new \core_user\output\myprofile\node('category', 'nodename2',
67 'nodetitle', null, 'www.WorldisGonnaEnd.com', 'description');
68 $category->add_node($node);
69 $this->assertCount(2, $category->nodes);
71 $node = new \core_user\output\myprofile\node('category', 'nodename3',
72 'nodetitle', null, 'www.TeamBeardsFTW.com', 'description');
73 $tree->add_node($node);
74 $tree->add_category($category);
75 $tree->sort_categories();
76 $category = $tree->categories['category'];
77 $this->assertCount(3, $category->nodes);
80 /**
81 * Test category::__construct().
83 public function test_category__construct() {
84 $category = new \core_user\output\myprofile\category('categoryname', 'title', 'after', 'class1 class2');
85 $this->assertSame('categoryname', $category->name);
86 $this->assertSame('title', $category->title);
87 $this->assertSame('after', $category->after);
88 $this->assertSame('class1 class2', $category->classes);
91 public function test_validate_after_order1() {
92 $category = new \phpunit_fixture_myprofile_category('category', 'title', null);
94 // Create nodes.
95 $node1 = new \core_user\output\myprofile\node('category', 'node1', 'nodetitle', null, null, 'content');
96 $node2 = new \core_user\output\myprofile\node('category', 'node2', 'nodetitle', 'node1', null, 'content');
97 $node3 = new \core_user\output\myprofile\node('category', 'node3', 'nodetitle', 'node2', null, null);
99 $category->add_node($node3);
100 $category->add_node($node2);
101 $category->add_node($node1);
103 $this->setExpectedException('coding_exception');
104 $category->validate_after_order();
108 public function test_validate_after_order2() {
109 $category = new \phpunit_fixture_myprofile_category('category', 'title', null);
111 // Create nodes.
112 $node1 = new \core_user\output\myprofile\node('category', 'node1', 'nodetitle', null, null, null);
113 $node2 = new \core_user\output\myprofile\node('category', 'node2', 'nodetitle', 'node1', null, 'content');
114 $node3 = new \core_user\output\myprofile\node('category', 'node3', 'nodetitle', 'node2', null, null);
116 $category->add_node($node3);
117 $category->add_node($node2);
118 $category->add_node($node1);
120 $this->setExpectedException('coding_exception');
121 $category->validate_after_order();
126 * Test category::find_nodes_after().
128 public function test_find_nodes_after() {
129 $category = new \phpunit_fixture_myprofile_category('category', 'title', null);
131 // Create nodes.
132 $node1 = new \core_user\output\myprofile\node('category', 'node1', 'nodetitle', null);
133 $node2 = new \core_user\output\myprofile\node('category', 'node2', 'nodetitle', 'node1');
134 $node3 = new \core_user\output\myprofile\node('category', 'node3', 'nodetitle', 'node2');
135 $node4 = new \core_user\output\myprofile\node('category', 'node4', 'nodetitle', 'node3');
136 $node5 = new \core_user\output\myprofile\node('category', 'node5', 'nodetitle', 'node3');
137 $node6 = new \core_user\output\myprofile\node('category', 'node6', 'nodetitle', 'node1');
139 // Add the nodes in random order.
140 $category->add_node($node3);
141 $category->add_node($node2);
142 $category->add_node($node4);
143 $category->add_node($node1);
144 $category->add_node($node5);
145 $category->add_node($node6);
147 // After node 1 we should have node2 - node3 - node4 - node5 - node6.
148 $return = $category->find_nodes_after($node1);
149 $this->assertCount(5, $return);
150 $node = array_shift($return);
151 $this->assertEquals($node2, $node);
152 $node = array_shift($return);
153 $this->assertEquals($node3, $node);
154 $node = array_shift($return);
155 $this->assertEquals($node4, $node);
156 $node = array_shift($return);
157 $this->assertEquals($node5, $node);
158 $node = array_shift($return);
159 $this->assertEquals($node6, $node);
161 // Last check also verifies calls for all subsequent nodes, still do some random checking.
162 $return = $category->find_nodes_after($node6);
163 $this->assertCount(0, $return);
164 $return = $category->find_nodes_after($node3);
165 $this->assertCount(2, $return);
169 * Test category::sort_nodes().
171 public function test_sort_nodes1() {
172 $category = new \phpunit_fixture_myprofile_category('category', 'title', null);
174 // Create nodes.
175 $node1 = new \core_user\output\myprofile\node('category', 'node1', 'nodetitle', null);
176 $node2 = new \core_user\output\myprofile\node('category', 'node2', 'nodetitle', 'node1');
177 $node3 = new \core_user\output\myprofile\node('category', 'node3', 'nodetitle', 'node2');
178 $node4 = new \core_user\output\myprofile\node('category', 'node4', 'nodetitle', 'node3');
179 $node5 = new \core_user\output\myprofile\node('category', 'node5', 'nodetitle', 'node3');
180 $node6 = new \core_user\output\myprofile\node('category', 'node6', 'nodetitle', 'node1');
182 // Add the nodes in random order.
183 $category->add_node($node3);
184 $category->add_node($node2);
185 $category->add_node($node4);
186 $category->add_node($node1);
187 $category->add_node($node5);
188 $category->add_node($node6);
190 // After node 1 we should have node2 - node3 - node4 - node5 - node6.
191 $category->sort_nodes();
192 $nodes = $category->nodes;
193 $this->assertCount(6, $nodes);
194 $node = array_shift($nodes);
195 $this->assertEquals($node1, $node);
196 $node = array_shift($nodes);
197 $this->assertEquals($node2, $node);
198 $node = array_shift($nodes);
199 $this->assertEquals($node3, $node);
200 $node = array_shift($nodes);
201 $this->assertEquals($node4, $node);
202 $node = array_shift($nodes);
203 $this->assertEquals($node5, $node);
204 $node = array_shift($nodes);
205 $this->assertEquals($node6, $node);
207 // Last check also verifies calls for all subsequent nodes, still do some random checking.
208 $return = $category->find_nodes_after($node6);
209 $this->assertCount(0, $return);
210 $return = $category->find_nodes_after($node3);
211 $this->assertCount(2, $return);
213 // Add a node with invalid 'after' and make sure an exception is thrown.
214 $node7 = new \core_user\output\myprofile\node('category', 'node7', 'nodetitle', 'noderandom');
215 $category->add_node($node7);
216 $this->setExpectedException('coding_exception');
217 $category->sort_nodes();
221 * Test category::sort_nodes() with a mix of content and non content nodes.
223 public function test_sort_nodes2() {
224 $category = new \phpunit_fixture_myprofile_category('category', 'title', null);
226 // Create nodes.
227 $node1 = new \core_user\output\myprofile\node('category', 'node1', 'nodetitle', null, null, 'content');
228 $node2 = new \core_user\output\myprofile\node('category', 'node2', 'nodetitle', 'node1', null, 'content');
229 $node3 = new \core_user\output\myprofile\node('category', 'node3', 'nodetitle', null);
230 $node4 = new \core_user\output\myprofile\node('category', 'node4', 'nodetitle', 'node3');
231 $node5 = new \core_user\output\myprofile\node('category', 'node5', 'nodetitle', 'node3');
232 $node6 = new \core_user\output\myprofile\node('category', 'node6', 'nodetitle', 'node1', null, 'content');
234 // Add the nodes in random order.
235 $category->add_node($node3);
236 $category->add_node($node2);
237 $category->add_node($node4);
238 $category->add_node($node1);
239 $category->add_node($node5);
240 $category->add_node($node6);
242 // After node 1 we should have node2 - node6 - node3 - node4 - node5.
243 $category->sort_nodes();
244 $nodes = $category->nodes;
245 $this->assertCount(6, $nodes);
246 $node = array_shift($nodes);
247 $this->assertEquals($node1, $node);
248 $node = array_shift($nodes);
249 $this->assertEquals($node2, $node);
250 $node = array_shift($nodes);
251 $this->assertEquals($node6, $node);
252 $node = array_shift($nodes);
253 $this->assertEquals($node3, $node);
254 $node = array_shift($nodes);
255 $this->assertEquals($node4, $node);
256 $node = array_shift($nodes);
257 $this->assertEquals($node5, $node);
261 * Test tree::add_node().
263 public function test_tree_add_node() {
264 $tree = new \phpunit_fixture_myprofile_tree();
265 $node1 = new \core_user\output\myprofile\node('category', 'node1', 'nodetitle');
266 $tree->add_node($node1);
267 $nodes = $tree->nodes;
268 $node = array_shift($nodes);
269 $this->assertEquals($node1, $node);
271 // Can't add node with same name.
272 $this->setExpectedException('coding_exception');
273 $tree->add_node($node1);
277 * Test tree::add_category().
279 public function test_tree_add_category() {
280 $tree = new \phpunit_fixture_myprofile_tree();
281 $category1 = new \core_user\output\myprofile\category('category', 'title');
282 $tree->add_category($category1);
283 $categories = $tree->categories;
284 $category = array_shift($categories);
285 $this->assertEquals($category1, $category);
287 // Can't add node with same name.
288 $this->setExpectedException('coding_exception');
289 $tree->add_category($category1);
293 * Test tree::find_categories_after().
295 public function test_find_categories_after() {
296 $tree = new \phpunit_fixture_myprofile_tree('category', 'title', null);
298 // Create categories.
299 $category1 = new \core_user\output\myprofile\category('category1', 'category1', null);
300 $category2 = new \core_user\output\myprofile\category('category2', 'category2', 'category1');
301 $category3 = new \core_user\output\myprofile\category('category3', 'category3', 'category2');
302 $category4 = new \core_user\output\myprofile\category('category4', 'category4', 'category3');
303 $category5 = new \core_user\output\myprofile\category('category5', 'category5', 'category3');
304 $category6 = new \core_user\output\myprofile\category('category6', 'category6', 'category1');
306 // Add the categories in random order.
307 $tree->add_category($category3);
308 $tree->add_category($category2);
309 $tree->add_category($category4);
310 $tree->add_category($category1);
311 $tree->add_category($category5);
312 $tree->add_category($category6);
314 // After category 1 we should have category2 - category3 - category4 - category5 - category6.
315 $return = $tree->find_categories_after($category1);
316 $this->assertCount(5, $return);
317 $category = array_shift($return);
318 $this->assertEquals($category2, $category);
319 $category = array_shift($return);
320 $this->assertEquals($category3, $category);
321 $category = array_shift($return);
322 $this->assertEquals($category4, $category);
323 $category = array_shift($return);
324 $this->assertEquals($category5, $category);
325 $category = array_shift($return);
326 $this->assertEquals($category6, $category);
328 // Last check also verifies calls for all subsequent categories, still do some random checking.
329 $return = $tree->find_categories_after($category6);
330 $this->assertCount(0, $return);
331 $return = $tree->find_categories_after($category3);
332 $this->assertCount(2, $return);
336 * Test tree::sort_categories().
338 public function test_sort_categories() {
339 $tree = new \phpunit_fixture_myprofile_tree('category', 'title', null);
341 // Create categories.
342 $category1 = new \core_user\output\myprofile\category('category1', 'category1', null);
343 $category2 = new \core_user\output\myprofile\category('category2', 'category2', 'category1');
344 $category3 = new \core_user\output\myprofile\category('category3', 'category3', 'category2');
345 $category4 = new \core_user\output\myprofile\category('category4', 'category4', 'category3');
346 $category5 = new \core_user\output\myprofile\category('category5', 'category5', 'category3');
347 $category6 = new \core_user\output\myprofile\category('category6', 'category6', 'category1');
349 // Add the categories in random order.
350 $tree->add_category($category3);
351 $tree->add_category($category2);
352 $tree->add_category($category4);
353 $tree->add_category($category1);
354 $tree->add_category($category5);
355 $tree->add_category($category6);
357 // After category 1 we should have category2 - category3 - category4 - category5 - category6.
358 $tree->sort_categories();
359 $categories = $tree->categories;
360 $this->assertCount(6, $categories);
361 $category = array_shift($categories);
362 $this->assertEquals($category1, $category);
363 $category = array_shift($categories);
364 $this->assertEquals($category2, $category);
365 $category = array_shift($categories);
366 $this->assertEquals($category3, $category);
367 $category = array_shift($categories);
368 $this->assertEquals($category4, $category);
369 $category = array_shift($categories);
370 $this->assertEquals($category5, $category);
371 $category = array_shift($categories);
372 $this->assertEquals($category6, $category);
374 // Can't add category with same name.
375 $this->setExpectedException('coding_exception');
376 $tree->add_category($category1);