typo
[dbsrgits/DBIx-Class-ResultSet-HashRef.git] / t / 10-hashref.t
CommitLineData
8d028daa 1use strict;
2use warnings;
3
4use Test::More;
5
6BEGIN {
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
16use lib 't/lib';
17use TestSchema;
8d028daa 18
19# setup
fae12c80 20my $schema = TestSchema->connect( "dbi:SQLite:dbname=:memory:", undef, undef );
8d028daa 21$schema->deploy;
22
23my @users = qw/root toor daemon operator bin tty/;
24my @roles = qw/admin superuser user/;
25
26@users = $schema->populate( 'User' => [ ['login'] => ( map { [$_] } @users ) ] );
27@roles = $schema->populate( 'Role' => [ ['name'] => ( map { [$_] } @roles ) ] );
28
29my $u = 1;
30my @user_roles = ();
31foreach 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}