Add optdep on CPAN::Uploader to get an effortless `make upload`
[dbsrgits/DBIx-Class.git] / t / inflate / hri_torture.t
CommitLineData
ce556881 1use strict;
2use warnings;
3
4use Test::More;
5use lib qw(t/lib);
6use DBICTest;
7
8# More tests like this in t/prefetch/manual.t
9
10my $schema = DBICTest->init_schema(no_populate => 1, quote_names => 1);
11$schema->resultset('Artist')->create({ name => 'JMJ', cds => [{
12 title => 'Magnetic Fields',
13 year => 1981,
14 genre => { name => 'electro' },
15 tracks => [
16 { title => 'm1' },
17 { title => 'm2' },
18 { title => 'm3' },
19 { title => 'm4' },
20 ],
21} ] });
22
23
24$schema->resultset('CD')->create({
25 title => 'Equinoxe',
26 year => 1978,
27 artist => { name => 'JMJ' },
28 genre => { name => 'electro' },
29 tracks => [
30 { title => 'e1' },
31 { title => 'e2' },
32 { title => 'e3' },
33 ],
34 single_track => {
35 title => 'o1',
36 cd => {
37 title => 'Oxygene',
38 year => 1976,
39 artist => { name => 'JMJ' },
40 tracks => [
41 { title => 'o2', position => 2}, # the position should not be needed here, bug in MC
42 ],
43 },
44 },
45});
46
47for (1,2) {
48 $schema->resultset('CD')->create({ artist => 1, year => 1977, title => "fuzzy_$_" });
49}
50
51my $rs = $schema->resultset('CD');
52
53is_deeply
54 $rs->search({}, {
55 columns => {
56 year => 'me.year',
57 'single_track.cd.artist.name' => 'artist.name',
58 },
59 join => { single_track => { cd => 'artist' } },
60 order_by => [qw/me.cdid artist.artistid/],
61 })->all_hri,
62 [
63 {
64 single_track => undef,
65 year => 1981
66 },
67 {
68 single_track => undef,
69 year => 1976
70 },
71 {
72 single_track => {
73 cd => {
74 artist => {
75 name => "JMJ"
76 }
77 }
78 },
79 year => 1978
80 },
81 {
82 single_track => undef,
83 year => 1977
84 },
85 {
86 single_track => undef,
87 year => 1977
88 },
89 ],
90 'plain 1:1 descending chain'
91;
92
93is_deeply
94 $rs->search({}, {
95 columns => {
96 'artist' => 'me.artist',
97 'title' => 'me.title',
98 'year' => 'me.year',
99 'single_track.cd.artist.artistid' => 'artist.artistid',
100 'single_track.cd.artist.cds.cdid' => 'cds.cdid',
101 'single_track.cd.artist.cds.tracks.title' => 'tracks.title',
102 },
103 join => { single_track => { cd => { artist => { cds => 'tracks' } } } },
104 order_by => [qw/me.cdid artist.artistid cds.cdid tracks.trackid/],
105 })->all_hri,
106 [
107 {
108 artist => 1,
109 single_track => undef,
110 title => "Magnetic Fields",
111 year => 1981
112 },
113 {
114 artist => 1,
115 single_track => undef,
116 title => "Oxygene",
117 year => 1976
118 },
119 {
120 artist => 1,
121 single_track => {
122 cd => {
123 artist => {
124 artistid => 1,
125 cds => {
126 cdid => 1,
127 tracks => {
128 title => "m1"
129 }
130 }
131 }
132 }
133 },
134 title => "Equinoxe",
135 year => 1978
136 },
137 {
138 artist => 1,
139 single_track => {
140 cd => {
141 artist => {
142 artistid => 1,
143 cds => {
144 cdid => 1,
145 tracks => {
146 title => "m2"
147 }
148 }
149 }
150 }
151 },
152 title => "Equinoxe",
153 year => 1978
154 },
155 {
156 artist => 1,
157 single_track => {
158 cd => {
159 artist => {
160 artistid => 1,
161 cds => {
162 cdid => 1,
163 tracks => {
164 title => "m3"
165 }
166 }
167 }
168 }
169 },
170 title => "Equinoxe",
171 year => 1978
172 },
173 {
174 artist => 1,
175 single_track => {
176 cd => {
177 artist => {
178 artistid => 1,
179 cds => {
180 cdid => 1,
181 tracks => {
182 title => "m4"
183 }
184 }
185 }
186 }
187 },
188 title => "Equinoxe",
189 year => 1978
190 },
191 {
192 artist => 1,
193 single_track => {
194 cd => {
195 artist => {
196 artistid => 1,
197 cds => {
198 cdid => 2,
199 tracks => {
200 title => "o2"
201 }
202 }
203 }
204 }
205 },
206 title => "Equinoxe",
207 year => 1978
208 },
209 {
210 artist => 1,
211 single_track => {
212 cd => {
213 artist => {
214 artistid => 1,
215 cds => {
216 cdid => 2,
217 tracks => {
218 title => "o1"
219 }
220 }
221 }
222 }
223 },
224 title => "Equinoxe",
225 year => 1978
226 },
227 {
228 artist => 1,
229 single_track => {
230 cd => {
231 artist => {
232 artistid => 1,
233 cds => {
234 cdid => 3,
235 tracks => {
236 title => "e1"
237 }
238 }
239 }
240 }
241 },
242 title => "Equinoxe",
243 year => 1978
244 },
245 {
246 artist => 1,
247 single_track => {
248 cd => {
249 artist => {
250 artistid => 1,
251 cds => {
252 cdid => 3,
253 tracks => {
254 title => "e2"
255 }
256 }
257 }
258 }
259 },
260 title => "Equinoxe",
261 year => 1978
262 },
263 {
264 artist => 1,
265 single_track => {
266 cd => {
267 artist => {
268 artistid => 1,
269 cds => {
270 cdid => 3,
271 tracks => {
272 title => "e3"
273 }
274 }
275 }
276 }
277 },
278 title => "Equinoxe",
279 year => 1978
280 },
281 {
282 artist => 1,
283 single_track => {
284 cd => {
285 artist => {
286 artistid => 1,
287 cds => {
288 cdid => 4,
289 tracks => undef
290 }
291 }
292 }
293 },
294 title => "Equinoxe",
295 year => 1978
296 },
297 {
298 artist => 1,
299 single_track => {
300 cd => {
301 artist => {
302 artistid => 1,
303 cds => {
304 cdid => 5,
305 tracks => undef
306 }
307 }
308 }
309 },
310 title => "Equinoxe",
311 year => 1978
312 },
313 {
314 artist => 1,
315 single_track => undef,
316 title => "fuzzy_1",
317 year => 1977
318 },
319 {
320 artist => 1,
321 single_track => undef,
322 title => "fuzzy_2",
323 year => 1977
324 }
325 ],
326 'non-collapsing 1:1:1:M:M chain',
327;
328
329is_deeply
330 $rs->search({}, {
331 columns => {
332 'artist' => 'me.artist',
333 'title' => 'me.title',
334 'year' => 'me.year',
335 'single_track.cd.artist.artistid' => 'artist.artistid',
336 'single_track.cd.artist.cds.cdid' => 'cds.cdid',
337 'single_track.cd.artist.cds.tracks.title' => 'tracks.title',
338 },
339 join => { single_track => { cd => { artist => { cds => 'tracks' } } } },
340 order_by => [qw/me.cdid artist.artistid cds.cdid tracks.trackid/],
341 collapse => {}, #hashref to keep older DBIC versions happy (doesn't actually work)
342 })->all_hri,
343 [
344 {
345 artist => 1,
346 single_track => undef,
347 title => "Magnetic Fields",
348 year => 1981
349 },
350 {
351 artist => 1,
352 single_track => undef,
353 title => "Oxygene",
354 year => 1976
355 },
356 {
357 artist => 1,
358 single_track => {
359 cd => {
360 artist => {
361 artistid => 1,
362 cds => [
363 {
364 cdid => 1,
365 tracks => [
366 {
367 title => "m1"
368 },
369 {
370 title => "m2"
371 },
372 {
373 title => "m3"
374 },
375 {
376 title => "m4"
377 }
378 ]
379 },
380 {
381 cdid => 2,
382 tracks => [
383 {
384 title => "o2"
385 },
386 {
387 title => "o1"
388 }
389 ]
390 },
391 {
392 cdid => 3,
393 tracks => [
394 {
395 title => "e1"
396 },
397 {
398 title => "e2"
399 },
400 {
401 title => "e3"
402 }
403 ]
404 },
405 {
406 cdid => 4,
407 tracks => []
408 },
409 {
410 cdid => 5,
411 tracks => []
412 }
413 ]
414 }
415 }
416 },
417 title => "Equinoxe",
418 year => 1978
419 },
420 {
421 artist => 1,
422 single_track => undef,
423 title => "fuzzy_1",
424 year => 1977
425 },
426 {
427 artist => 1,
428 single_track => undef,
429 title => "fuzzy_2",
430 year => 1977
431 }
432 ],
433 'collapsing 1:1:1:M:M chain',
434;
435
436done_testing;