Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
7.80% covered (danger)
7.80%
32 / 410
50.00% covered (danger)
50.00%
9 / 18
CRAP
0.00% covered (danger)
0.00%
0 / 1
phpbb_tests_tree_nestedset_forum_move_test
7.80% covered (danger)
7.80%
32 / 410
50.00% covered (danger)
50.00%
9 / 18
271.90
0.00% covered (danger)
0.00%
0 / 1
 move_data
0.00% covered (danger)
0.00%
0 / 100
0.00% covered (danger)
0.00%
0 / 1
2
 test_move
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 move_down_data
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 1
2
 test_move_down
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 move_up_data
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 1
2
 test_move_up
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 move_children_data
0.00% covered (danger)
0.00%
0 / 114
0.00% covered (danger)
0.00%
0 / 1
2
 test_move_children
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 move_children_throws_item_data
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 test_move_children_throws_item
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 move_children_throws_parent_data
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 test_move_children_throws_parent
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 change_parent_data
0.00% covered (danger)
0.00%
0 / 86
0.00% covered (danger)
0.00%
0 / 1
2
 test_change_parent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 change_parent_throws_item_data
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 test_change_parent_throws_item
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 change_parent_throws_parent_data
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 test_change_parent_throws_parent
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2/**
3*
4* This file is part of the phpBB Forum Software package.
5*
6* @copyright (c) phpBB Limited <https://www.phpbb.com>
7* @license GNU General Public License, version 2 (GPL-2.0)
8*
9* For full copyright and license information, please see
10* the docs/CREDITS.txt file.
11*
12*/
13
14require_once __DIR__ . '/nestedset_forum_base.php';
15
16class phpbb_tests_tree_nestedset_forum_move_test extends phpbb_tests_tree_nestedset_forum_base
17{
18    public static function move_data()
19    {
20        return array(
21            array('Move first item up',
22                1, 1, false, array(
23                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
24                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
25                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
26                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
27                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
28                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
29                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
30                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
31                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
32                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
33                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
34            )),
35            array('Move last item down',
36                7, -1, false, array(
37                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
38                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
39                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
40                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
41                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
42                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
43                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
44                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
45                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
46                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
47                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
48            )),
49            array('Move first item down',
50                1, -1, true, array(
51                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
52                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5),
53                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4),
54                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
55                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9),
56                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11),
57                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
58                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
59                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
60                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
61                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
62            )),
63            array('Move second item up',
64                4, 1, true, array(
65                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
66                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5),
67                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4),
68                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
69                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9),
70                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11),
71                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
72                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
73                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
74                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
75                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
76            )),
77            array('Move last item up',
78                7, 1, true, array(
79                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
80                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
81                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
82                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 16),
83                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9),
84                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 13),
85                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 11, 'right_id' => 12),
86                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
87                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22),
88                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21),
89                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20),
90            )),
91            array('Move last item up by 2',
92                7, 2, true, array(
93                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10),
94                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 2, 'right_id' => 3),
95                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 4, 'right_id' => 7),
96                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 5, 'right_id' => 6),
97                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9),
98                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 16),
99                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 12, 'right_id' => 13),
100                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 14, 'right_id' => 15),
101                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22),
102                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21),
103                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20),
104            )),
105            array('Move last item up by 100',
106                7, 100, true, array(
107                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10),
108                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 2, 'right_id' => 3),
109                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 4, 'right_id' => 7),
110                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 5, 'right_id' => 6),
111                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 8, 'right_id' => 9),
112                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 16),
113                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 12, 'right_id' => 13),
114                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 14, 'right_id' => 15),
115                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 17, 'right_id' => 22),
116                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 18, 'right_id' => 21),
117                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20),
118            )),
119        );
120    }
121
122    /**
123    * @dataProvider move_data
124    */
125    public function test_move($explain, $forum_id, $delta, $expected_moved, $expected)
126    {
127        $this->assertEquals($expected_moved, $this->set->move($forum_id, $delta));
128
129        $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id
130            FROM phpbb_forums
131            ORDER BY left_id, forum_id ASC");
132        $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
133    }
134
135    public static function move_down_data()
136    {
137        return array(
138            array('Move last item down',
139                7, false, array(
140                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
141                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
142                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
143                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
144                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
145                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
146                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
147                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
148                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
149                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
150                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
151            )),
152            array('Move first item down',
153                1, true, array(
154                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
155                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5),
156                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4),
157                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
158                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9),
159                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11),
160                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
161                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
162                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
163                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
164                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
165            )),
166        );
167    }
168
169    /**
170    * @dataProvider move_down_data
171    */
172    public function test_move_down($explain, $forum_id, $expected_moved, $expected)
173    {
174        $this->assertEquals($expected_moved, $this->set->move_down($forum_id));
175
176        $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id
177            FROM phpbb_forums
178            ORDER BY left_id, forum_id ASC");
179        $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
180    }
181
182    public static function move_up_data()
183    {
184        return array(
185            array('Move first item up',
186                1, false, array(
187                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
188                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3),
189                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5),
190                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
191                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11),
192                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10),
193                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
194                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
195                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
196                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
197                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
198            )),
199            array('Move second item up',
200                4, true, array(
201                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6),
202                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 2, 'right_id' => 5),
203                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 3, 'right_id' => 4),
204                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12),
205                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 8, 'right_id' => 9),
206                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 10, 'right_id' => 11),
207                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22),
208                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15),
209                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19),
210                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18),
211                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21),
212            )),
213        );
214    }
215
216    /**
217    * @dataProvider move_up_data
218    */
219    public function test_move_up($explain, $forum_id, $expected_moved, $expected)
220    {
221        $this->assertEquals($expected_moved, $this->set->move_up($forum_id));
222
223        $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id
224            FROM phpbb_forums
225            ORDER BY left_id, forum_id ASC");
226        $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
227    }
228
229    public static function move_children_data()
230    {
231        return array(
232            array('Item has no children',
233                2, 1, false, array(
234                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
235                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
236                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
237
238                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
239                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
240                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
241
242                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
243                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
244                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
245                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
246                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
247            )),
248            array('Move to same parent',
249                4, 4, false, array(
250                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
251                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
252                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
253
254                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
255                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
256                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 9, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
257
258                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
259                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
260                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
261                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
262                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
263            )),
264            array('Move single child up',
265                5, 1, true, array(
266                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
267                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
268                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
269                array('forum_id' => 6, 'parent_id' => 1, 'left_id' => 6, 'right_id' => 7, 'forum_parents' => ''),
270
271                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
272                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
273
274                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
275                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
276                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
277                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
278                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
279            )),
280            array('Move nested children up',
281                4, 1, true, array(
282                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
283                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
284                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
285                array('forum_id' => 5, 'parent_id' => 1, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => ''),
286                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
287
288                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
289
290                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
291                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
292                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
293                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
294                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
295            )),
296            array('Move single child down',
297                5, 7, true, array(
298                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
299                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
300                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
301
302                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
303                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
304
305                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
306                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
307                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
308                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
309                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
310                array('forum_id' => 6, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
311
312            )),
313            array('Move nested children down',
314                4, 7, true, array(
315                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
316                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
317                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
318
319                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
320
321                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
322                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
323                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
324                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => 'a:0:{}'),
325                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
326                array('forum_id' => 5, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => ''),
327                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
328            )),
329            array('Move single child to parent 0',
330                5, 0, true, array(
331                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
332                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
333                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
334
335                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
336                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
337
338                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => 'a:0:{}'),
339                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
340                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
341                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
342                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
343
344                array('forum_id' => 6, 'parent_id' => 0, 'left_id' => 21, 'right_id' => 22, 'forum_parents' => ''),
345            )),
346            array('Move nested children to parent 0',
347                4, 0, true, array(
348                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
349                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
350                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
351
352                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
353
354                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
355                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
356                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
357                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => 'a:0:{}'),
358                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
359
360                array('forum_id' => 5, 'parent_id' => 0, 'left_id' => 19, 'right_id' => 22, 'forum_parents' => ''),
361                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
362            )),
363        );
364    }
365
366    /**
367    * @dataProvider move_children_data
368    */
369    public function test_move_children($explain, $forum_id, $target_id, $expected_moved, $expected)
370    {
371        $this->assertEquals($expected_moved, $this->set->move_children($forum_id, $target_id));
372
373        $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
374            FROM phpbb_forums
375            ORDER BY left_id, forum_id ASC");
376        $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
377    }
378
379    public static function move_children_throws_item_data()
380    {
381        return array(
382            array('Item 0 does not exist', 0, 5),
383            array('Item does not exist', 200, 5),
384        );
385    }
386
387    /**
388    * @dataProvider move_children_throws_item_data
389    */
390    public function test_move_children_throws_item($explain, $forum_id, $target_id)
391    {
392        $this->expectException('OutOfBoundsException');
393        $this->expectExceptionMessage('FORUM_NESTEDSET_INVALID_ITEM');
394        $this->set->move_children($forum_id, $target_id);
395    }
396
397    public static function move_children_throws_parent_data()
398    {
399        return array(
400            array('New parent is child', 4, 5),
401            array('New parent is child 2', 7, 9),
402            array('New parent does not exist', 1, 200),
403        );
404    }
405
406    /**
407    * @dataProvider move_children_throws_parent_data
408    */
409    public function test_move_children_throws_parent($explain, $forum_id, $target_id)
410    {
411        $this->expectException('OutOfBoundsException');
412        $this->expectExceptionMessage('FORUM_NESTEDSET_INVALID_PARENT');
413        $this->set->move_children($forum_id, $target_id);
414    }
415
416    public static function change_parent_data()
417    {
418        return array(
419            array('Move single child up',
420                6, 1, true, array(
421                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
422                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
423                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
424                array('forum_id' => 6, 'parent_id' => 1, 'left_id' => 6, 'right_id' => 7, 'forum_parents' => ''),
425
426                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
427                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
428
429                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
430                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
431                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
432                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
433                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
434            )),
435            array('Move nested children up',
436                5, 1, true, array(
437                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
438                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
439                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
440                array('forum_id' => 5, 'parent_id' => 1, 'left_id' => 6, 'right_id' => 9, 'forum_parents' => ''),
441                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => ''),
442
443                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 12, 'forum_parents' => 'a:0:{}'),
444
445                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 13, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
446                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
447                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
448                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 17, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
449                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => 'a:0:{}'),
450            )),
451            array('Move single child down',
452                6, 7, true, array(
453                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
454                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
455                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
456
457                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
458                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
459
460                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
461                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
462                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
463                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
464                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
465                array('forum_id' => 6, 'parent_id' => 7, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
466            )),
467            array('Move nested children down',
468                5, 7, true, array(
469                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
470                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
471                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
472
473                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
474
475                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 22, 'forum_parents' => 'a:0:{}'),
476                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
477                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
478                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => 'a:0:{}'),
479                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
480                array('forum_id' => 5, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 21, 'forum_parents' => ''),
481                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 19, 'right_id' => 20, 'forum_parents' => ''),
482            )),
483            array('Move single child to parent 0',
484                6, 0, true, array(
485                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
486                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
487                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
488
489                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 10, 'forum_parents' => 'a:0:{}'),
490                array('forum_id' => 5, 'parent_id' => 4, 'left_id' => 8, 'right_id' => 9, 'forum_parents' => 'a:0:{}'),
491
492                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 11, 'right_id' => 20, 'forum_parents' => 'a:0:{}'),
493                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 13, 'forum_parents' => 'a:0:{}'),
494                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 14, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
495                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 15, 'right_id' => 16, 'forum_parents' => 'a:0:{}'),
496                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 18, 'right_id' => 19, 'forum_parents' => 'a:0:{}'),
497
498                array('forum_id' => 6, 'parent_id' => 0, 'left_id' => 21, 'right_id' => 22, 'forum_parents' => ''),
499            )),
500            array('Move nested children to parent 0',
501                5, 0, true, array(
502                array('forum_id' => 1, 'parent_id' => 0, 'left_id' => 1, 'right_id' => 6, 'forum_parents' => 'a:0:{}'),
503                array('forum_id' => 2, 'parent_id' => 1, 'left_id' => 2, 'right_id' => 3, 'forum_parents' => 'a:0:{}'),
504                array('forum_id' => 3, 'parent_id' => 1, 'left_id' => 4, 'right_id' => 5, 'forum_parents' => 'a:0:{}'),
505
506                array('forum_id' => 4, 'parent_id' => 0, 'left_id' => 7, 'right_id' => 8, 'forum_parents' => 'a:0:{}'),
507
508                array('forum_id' => 7, 'parent_id' => 0, 'left_id' => 9, 'right_id' => 18, 'forum_parents' => 'a:0:{}'),
509                array('forum_id' => 8, 'parent_id' => 7, 'left_id' => 10, 'right_id' => 11, 'forum_parents' => 'a:0:{}'),
510                array('forum_id' => 9, 'parent_id' => 7, 'left_id' => 12, 'right_id' => 15, 'forum_parents' => 'a:0:{}'),
511                array('forum_id' => 10, 'parent_id' => 9, 'left_id' => 13, 'right_id' => 14, 'forum_parents' => 'a:0:{}'),
512                array('forum_id' => 11, 'parent_id' => 7, 'left_id' => 16, 'right_id' => 17, 'forum_parents' => 'a:0:{}'),
513
514                array('forum_id' => 5, 'parent_id' => 0, 'left_id' => 19, 'right_id' => 22, 'forum_parents' => ''),
515                array('forum_id' => 6, 'parent_id' => 5, 'left_id' => 20, 'right_id' => 21, 'forum_parents' => ''),
516            )),
517        );
518    }
519
520    /**
521    * @dataProvider change_parent_data
522    */
523    public function test_change_parent($explain, $forum_id, $target_id, $expected_moved, $expected)
524    {
525        $this->assertEquals($expected_moved, $this->set->change_parent($forum_id, $target_id));
526
527        $result = $this->db->sql_query("SELECT forum_id, parent_id, left_id, right_id, forum_parents
528            FROM phpbb_forums
529            ORDER BY left_id, forum_id ASC");
530        $this->assertEquals($expected, $this->db->sql_fetchrowset($result));
531    }
532
533    public static function change_parent_throws_item_data()
534    {
535        return array(
536            array('Item 0 does not exist', 0, 5),
537            array('Item does not exist', 200, 5),
538        );
539    }
540
541    /**
542    * @dataProvider change_parent_throws_item_data
543    */
544    public function test_change_parent_throws_item($explain, $forum_id, $target_id)
545    {
546        $this->expectException('OutOfBoundsException');
547        $this->expectExceptionMessage('FORUM_NESTEDSET_INVALID_ITEM');
548        $this->set->change_parent($forum_id, $target_id);
549    }
550
551    public static function change_parent_throws_parent_data()
552    {
553        return array(
554            array('New parent is child', 4, 5),
555            array('New parent is child 2', 7, 9),
556            array('New parent does not exist', 1, 200),
557        );
558    }
559
560    /**
561    * @dataProvider change_parent_throws_parent_data
562    */
563    public function test_change_parent_throws_parent($explain, $forum_id, $target_id)
564    {
565        $this->expectException('OutOfBoundsException');
566        $this->expectExceptionMessage('FORUM_NESTEDSET_INVALID_PARENT');
567        $this->set->change_parent($forum_id, $target_id);
568    }
569}