Commit | Line | Data |
8d028daa |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use Test::More; |
5 | |
6 | BEGIN { |
7 | eval "use DBD::SQLite ();"; |
8 | plan skip_all => 'DBD::SQLite required to run this test' if $@; |
9 | |
10 | eval "use SQL::Translator ();"; |
11 | plan skip_all => 'SQL::Translator required to run this test' if $@; |
12 | |
698b98d0 |
13 | plan( tests => 11 ); |
8d028daa |
14 | } |
15 | |
16 | use lib 't/lib'; |
17 | use TestSchema; |
8d028daa |
18 | |
19 | # setup |
fae12c80 |
20 | my $schema = TestSchema->connect( "dbi:SQLite:dbname=:memory:", undef, undef ); |
8d028daa |
21 | $schema->deploy; |
22 | |
23 | my @users = qw/root toor daemon operator bin tty/; |
24 | my @roles = qw/admin superuser user/; |
25 | |
26 | @users = $schema->populate( 'User' => [ ['login'] => ( map { [$_] } @users ) ] ); |
27 | @roles = $schema->populate( 'Role' => [ ['name'] => ( map { [$_] } @roles ) ] ); |
28 | |
29 | my $u = 1; |
30 | my @user_roles = (); |
31 | foreach my $user (@users) { |
32 | my $r = 0; |
33 | foreach my $role (@roles) { |
34 | next if $r >= $u; |
35 | push @user_roles, [ $user->id, $role->id ]; |
36 | $r++; |
37 | } |
38 | $u++; |
39 | $u = 1 if $u > scalar @roles; |
40 | } |
41 | |
42 | @user_roles = $schema->populate( 'UserRole' => [ [qw/user_id role_id/] => @user_roles ] ); |
43 | |
44 | { |
45 | my $rs = $schema->resultset('User')->search( |
46 | {}, |
47 | { |
48 | prefetch => { user_role => [qw/role/] }, |
49 | order_by => 'me.id ASC' |
50 | } |
51 | )->hashref_array; |
52 | |
53 | is_deeply( |
54 | $rs, |
55 | [ |
56 | { |
57 | 'id' => '1', |
58 | 'login' => 'root', |
59 | 'user_role' => [ |
60 | { |
61 | 'role' => { |
62 | 'id' => '1', |
63 | 'name' => 'admin' |
64 | }, |
65 | 'role_id' => '1', |
66 | 'user_id' => '1' |
67 | } |
68 | ] |
69 | }, |
70 | { |
71 | 'id' => '2', |
72 | 'login' => 'toor', |
73 | 'user_role' => [ |
74 | { |
75 | 'role' => { |
76 | 'id' => '1', |
77 | 'name' => 'admin' |
78 | }, |
79 | 'role_id' => '1', |
80 | 'user_id' => '2' |
81 | }, |
82 | { |
83 | 'role' => { |
84 | 'id' => '2', |
85 | 'name' => 'superuser' |
86 | }, |
87 | 'role_id' => '2', |
88 | 'user_id' => '2' |
89 | } |
90 | ] |
91 | }, |
92 | { |
93 | 'id' => '3', |
94 | 'login' => 'daemon', |
95 | 'user_role' => [ |
96 | { |
97 | 'role' => { |
98 | 'id' => '1', |
99 | 'name' => 'admin' |
100 | }, |
101 | 'role_id' => '1', |
102 | 'user_id' => '3' |
103 | }, |
104 | { |
105 | 'role' => { |
106 | 'id' => '2', |
107 | 'name' => 'superuser' |
108 | }, |
109 | 'role_id' => '2', |
110 | 'user_id' => '3' |
111 | }, |
112 | { |
113 | 'role' => { |
114 | 'id' => '3', |
115 | 'name' => 'user' |
116 | }, |
117 | 'role_id' => '3', |
118 | 'user_id' => '3' |
119 | } |
120 | ] |
121 | }, |
122 | { |
123 | 'id' => '4', |
124 | 'login' => 'operator', |
125 | 'user_role' => [ |
126 | { |
127 | 'role' => { |
128 | 'id' => '1', |
129 | 'name' => 'admin' |
130 | }, |
131 | 'role_id' => '1', |
132 | 'user_id' => '4' |
133 | } |
134 | ] |
135 | }, |
136 | { |
137 | 'id' => '5', |
138 | 'login' => 'bin', |
139 | 'user_role' => [ |
140 | { |
141 | 'role' => { |
142 | 'id' => '1', |
143 | 'name' => 'admin' |
144 | }, |
145 | 'role_id' => '1', |
146 | 'user_id' => '5' |
147 | }, |
148 | { |
149 | 'role' => { |
150 | 'id' => '2', |
151 | 'name' => 'superuser' |
152 | }, |
153 | 'role_id' => '2', |
154 | 'user_id' => '5' |
155 | } |
156 | ] |
157 | }, |
158 | { |
159 | 'id' => '6', |
160 | 'login' => 'tty', |
161 | 'user_role' => [ |
162 | { |
163 | 'role' => { |
164 | 'id' => '1', |
165 | 'name' => 'admin' |
166 | }, |
167 | 'role_id' => '1', |
168 | 'user_id' => '6' |
169 | }, |
170 | { |
171 | 'role' => { |
172 | 'id' => '2', |
173 | 'name' => 'superuser' |
174 | }, |
175 | 'role_id' => '2', |
176 | 'user_id' => '6' |
177 | }, |
178 | { |
179 | 'role' => { |
180 | 'id' => '3', |
181 | 'name' => 'user' |
182 | }, |
183 | 'role_id' => '3', |
184 | 'user_id' => '6' |
185 | } |
186 | ] |
187 | } |
188 | ], |
189 | 'hashref_array' |
190 | ); |
191 | } |
192 | |
193 | { |
194 | my @rs = $schema->resultset('User')->search( {}, { order_by => 'me.id ASC' } )->hashref_array; |
195 | is_deeply( |
196 | \@rs, |
197 | [ |
198 | { |
199 | 'id' => '1', |
200 | 'login' => 'root' |
201 | }, |
202 | { |
203 | 'id' => '2', |
204 | 'login' => 'toor' |
205 | }, |
206 | { |
207 | 'id' => '3', |
208 | 'login' => 'daemon' |
209 | }, |
210 | { |
211 | 'id' => '4', |
212 | 'login' => 'operator' |
213 | }, |
214 | { |
215 | 'id' => '5', |
216 | 'login' => 'bin' |
217 | }, |
218 | { |
219 | 'id' => '6', |
220 | 'login' => 'tty' |
221 | } |
222 | ] |
223 | ); |
224 | } |
225 | |
226 | { |
227 | my $rs = $schema->resultset('User')->search( |
228 | {}, |
229 | { |
230 | prefetch => { user_role => [qw/role/] }, |
231 | order_by => 'me.id DESC' |
232 | } |
233 | )->hashref_rs->next; |
234 | is_deeply( |
235 | $rs, |
236 | { |
237 | 'id' => '6', |
238 | 'login' => 'tty', |
239 | 'user_role' => [ |
240 | { |
241 | 'role' => { |
242 | 'id' => '1', |
243 | 'name' => 'admin' |
244 | }, |
245 | 'role_id' => '1', |
246 | 'user_id' => '6' |
247 | }, |
248 | { |
249 | 'role' => { |
250 | 'id' => '2', |
251 | 'name' => 'superuser' |
252 | }, |
253 | 'role_id' => '2', |
254 | 'user_id' => '6' |
255 | }, |
256 | { |
257 | 'role' => { |
258 | 'id' => '3', |
259 | 'name' => 'user' |
260 | }, |
261 | 'role_id' => '3', |
262 | 'user_id' => '6' |
263 | } |
264 | ] |
265 | }, |
266 | 'hashref_rs->next' |
267 | ); |
268 | } |
269 | |
270 | { |
271 | my $expected_users = [ |
272 | { |
273 | 'id' => '1', |
274 | 'login' => 'root' |
275 | }, |
276 | { |
277 | 'id' => '2', |
278 | 'login' => 'toor' |
279 | }, |
280 | { |
281 | 'id' => '3', |
282 | 'login' => 'daemon' |
283 | }, |
284 | { |
285 | 'id' => '4', |
286 | 'login' => 'operator' |
287 | }, |
288 | { |
289 | 'id' => '5', |
290 | 'login' => 'bin' |
291 | }, |
292 | { |
293 | 'id' => '6', |
294 | 'login' => 'tty' |
295 | } |
296 | ]; |
297 | my $rs = $schema->resultset('User')->search( {}, { order_by => 'me.id ASC' } )->hashref_rs; |
298 | while ( my $row = $rs->next ) { |
299 | my $user = shift(@$expected_users); |
300 | is_deeply( $row, $user, "hashref_rs in while loop, user: " . $user->{login} ); |
301 | } |
302 | } |
303 | |
304 | { |
305 | my $first_row = $schema->resultset('User')->search( { login => 'root' } )->hashref_first; |
306 | is_deeply( |
307 | $first_row, |
308 | { |
309 | 'id' => '1', |
310 | 'login' => 'root' |
311 | }, |
312 | "hashref_first" |
313 | ); |
314 | } |
698b98d0 |
315 | |
316 | { |
317 | my $hashref = $schema->resultset('User')->search( {}, { order_by => 'me.id ASC' } )->hashref_pk; |
318 | is_deeply( |
319 | $hashref, |
320 | { |
321 | 1 => { |
322 | 'id' => '1', |
323 | 'login' => 'root' |
324 | }, |
325 | 2 => { |
326 | 'id' => '2', |
327 | 'login' => 'toor' |
328 | }, |
329 | 3 => { |
330 | 'id' => '3', |
331 | 'login' => 'daemon' |
332 | }, |
333 | 4 => { |
334 | 'id' => '4', |
335 | 'login' => 'operator' |
336 | }, |
337 | 5 => { |
338 | 'id' => '5', |
339 | 'login' => 'bin' |
340 | }, |
341 | 6 => { |
342 | 'id' => '6', |
343 | 'login' => 'tty' |
344 | } |
345 | }, |
346 | 'hashref_pk' |
347 | ); |
348 | } |