9 # temporary reassign for easier test debug
10 # not adding dependency either - just delete this
11 # block once everything works
12 use Test::Differences;
14 no warnings 'redefine';
15 *is_deeply = \&Test::Differences::eq_or_diff;
18 my $schema = DBICTest->init_schema();
19 my $rs = $schema->resultset( 'CD' );
22 my $a = { artist => { -foo => 1 } };
23 my $b = { artist => { -foo => 1 } };
24 my $expected = [{ artist => { -foo => 1 } }];
25 my $result = $rs->_merge_joinpref_attr($a, $b);
26 is_deeply( $result, $expected );
30 my $a = [ { artist => { -foo => {} } } ];
31 my $b = [ { artist => { -foo => {} } } ];
32 my $expected = [ { artist => { -foo => {} } } ];
33 my $result = $rs->_merge_joinpref_attr($a, $b);
34 is_deeply( $result, $expected );
38 my $a = [ { artist => { -foo => 1 } } ];
39 my $b = [ { artist => { -foo => 1 } } ];
40 my $expected = [ { artist => { -foo => 1 } }];
41 my $result = $rs->_merge_joinpref_attr($a, $b);
42 is_deeply( $result, $expected );
45 # no conflicting options
47 my $a = { artist => { -foo => 1 } };
48 my $b = { artist => { -foo => 2 } };
49 throws_ok { $rs->_merge_joinpref_attr($a, $b) }
50 qr/.|Undetermined exception text/;
54 my $a = [ { artist => { -foo => 1 } } ];
55 my $b = [ { artist => { -foo => 2 } } ];
56 throws_ok { $rs->_merge_joinpref_attr($a, $b) }
57 qr/.|Undetermined exception text/;
61 my $a = [ { artist => { -foo => { a => 1 } } } ];
62 my $b = [ { artist => { -foo => { a => 2 } } } ];
63 throws_ok { $rs->_merge_joinpref_attr($a, $b) }
64 qr/.|Undetermined exception text/;
67 # also no option-bag conflicts (options can be specified
68 # only once due to potential problems with conflicting
69 # behaviors - one can only respecify the entire thing
70 # as in the first test above
71 # THIS TEST IS NOT SET IN STONE, BUT IS LIKELY CORRECT
73 my $a = { artist => { -foo => 1 } };
74 my $b = { artist => { -bar => 2 } };
75 throws_ok { $rs->_merge_joinpref_attr($a, $b) }
76 qr/.|Undetermined exception text/;
82 my $expected = [ 'artist', 'cd' ];
83 my $result = $rs->_merge_joinpref_attr($a, $b);
84 is_deeply( $result, $expected );
88 my $a = { artist => { -foo => 1 } };
89 my $b = { cd => { -bar => 2 } };
90 my $expected = [ { artist => { -foo => 1 } }, { cd => { -bar => 2 } } ];
91 my $result = $rs->_merge_joinpref_attr($a, $b);
92 is_deeply( $result, $expected );
98 my $expected = [ 'artist', 'cd' ];
99 my $result = $rs->_merge_joinpref_attr($a, $b);
100 is_deeply( $result, $expected );
104 my $a = [ 'artist', 'cd' ];
106 my $expected = [ 'artist', 'cd' ];
107 my $result = $rs->_merge_joinpref_attr($a, $b);
108 is_deeply( $result, $expected );
112 my $a = [ 'artist', { cd => { -foo => 1 } } ];
113 my $b = [ { cd => { -foo => 1 } } ];
114 my $expected = [ 'artist', { cd => { -foo => 1 } } ];
115 my $result = $rs->_merge_joinpref_attr($a, $b);
116 is_deeply( $result, $expected );
120 my $a = [ 'artist', 'artist' ];
121 my $b = [ 'artist', 'cd' ];
122 my $expected = [ 'artist', 'artist', 'cd' ];
123 my $result = $rs->_merge_joinpref_attr($a, $b);
124 is_deeply( $result, $expected );
128 my $a = [ { artist => { -foo => 1 } }, { artist => { -foo => 1 } } ];
129 my $b = [ { artist => { -foo => 1 } }, 'cd' ];
130 my $expected = [ { artist => { -foo => 1 } }, { artist => { -foo => 1 } }, 'cd' ];
131 my $result = $rs->_merge_joinpref_attr($a, $b);
132 is_deeply( $result, $expected );
136 my $a = [ 'artist', 'cd' ];
137 my $b = [ 'artist', 'artist' ];
138 my $expected = [ 'artist', 'cd', 'artist' ];
139 my $result = $rs->_merge_joinpref_attr($a, $b);
140 is_deeply( $result, $expected );
144 my $a = [ { artist => { -foo => 1 } }, 'cd' ];
145 my $b = [ { artist => { -foo => 1 } }, { artist => { -foo => 1 } } ];
146 my $expected = [ { artist => { -foo => 1 } }, 'cd', { artist => { -foo => 1 } } ];
147 my $result = $rs->_merge_joinpref_attr($a, $b);
148 is_deeply( $result, $expected );
152 my $a = [ 'twokeys' ];
153 my $b = [ 'cds', 'cds' ];
154 my $expected = [ 'twokeys', 'cds', 'cds' ];
155 my $result = $rs->_merge_joinpref_attr($a, $b);
156 is_deeply( $result, $expected );
160 my $a = [ 'twokeys' ];
161 my $b = [ { cds => { -bar => 1 } }, { cds => { -bar => 1 } }];
162 my $expected = [ 'twokeys', { cds => { -bar => 1 } }, { cds => { -bar => 1 } }];
163 my $result = $rs->_merge_joinpref_attr($a, $b);
164 is_deeply( $result, $expected );
168 my $a = [ 'artist', 'cd', { 'artist' => 'manager' } ];
170 my $expected = [ 'artist', 'cd', { 'artist' => 'manager' } ];
171 my $result = $rs->_merge_joinpref_attr($a, $b);
172 is_deeply( $result, $expected );
176 my $a = [ { artist => { -baz => 1 } }, 'cd', { 'artist' => 'manager' } ];
177 my $b = { artist => { -baz => 1 } };
178 my $expected = [ { artist => { -baz => 1 } }, 'cd', { 'artist' => 'manager' } ];
179 my $result = $rs->_merge_joinpref_attr($a, $b);
180 is_deeply( $result, $expected );
184 my $a = [ 'artist', 'cd', { 'artist' => 'manager' } ];
185 my $b = [ 'artist', 'cd' ];
186 my $expected = [ 'artist', 'cd', { 'artist' => 'manager' } ];
187 my $result = $rs->_merge_joinpref_attr($a, $b);
188 is_deeply( $result, $expected );
192 my $a = [ { artist => { -biff => 1 } }, { cd => { -bong => 2 } }, { 'artist' => 'manager' } ];
193 my $b = [ { artist => { -biff => 1 } }, { cd => { -bong => 2 } }];
194 my $expected = [ { artist => { -biff => 1 } }, { cd => { -bong => 2 } }, { 'artist' => 'manager' }];
195 my $result = $rs->_merge_joinpref_attr($a, $b);
196 is_deeply( $result, $expected );
200 my $a = [ 'artist', 'cd', { 'artist' => 'manager' } ];
201 my $b = { 'artist' => 'manager' };
202 my $expected = [ 'artist', 'cd', { 'artist' => [ 'manager' ] } ];
203 my $result = $rs->_merge_joinpref_attr($a, $b);
204 is_deeply( $result, $expected );
208 my $a = [ 'artist', 'cd', { 'artist' => 'manager' } ];
209 my $b = { 'artist' => 'agent' };
210 my $expected = [ { 'artist' => 'agent' }, 'cd', { 'artist' => 'manager' } ];
211 my $result = $rs->_merge_joinpref_attr($a, $b);
212 is_deeply( $result, $expected );
216 my $a = [{ artist => { -y => 'frew' } }, 'cd', { artist => { -y => 'frew', manager => 1 } } ];
217 my $b = { 'artist' => { -y => 'frew', agent => 1 } };
218 my $expected = [ { artist => { -y => 'frew', 'agent' => 1 } }, 'cd', { artist => { -y => 'frew', manager => 1 } } ];
219 my $result = $rs->_merge_joinpref_attr($a, $b);
220 is_deeply( $result, $expected );
224 my $a = [ 'artist', 'cd', { 'artist' => 'manager' } ];
225 my $b = { 'artist' => { 'manager' => 'artist' } };
226 my $expected = [ 'artist', 'cd', { 'artist' => [ { 'manager' => 'artist' } ] } ];
227 my $result = $rs->_merge_joinpref_attr($a, $b);
228 is_deeply( $result, $expected );
232 my $a = [{ artist => { -yo => 1 } }, 'cd', { artist => [{ -yo => 1 }, 'manager'] } ];
233 my $b = { artist => { -yo => 1, manager => { artist => { -yo => 1 } }} };
234 my $expected = [{ artist => { -yo => 1 } }, 'cd', { artist => [{ -yo => 1 }, { 'manager' => { artist => { -yo => 1 } }} ] } ];
235 my $result = $rs->_merge_joinpref_attr($a, $b);
236 is_deeply( $result, $expected );
240 my $a = [ 'artist', 'cd', { 'artist' => 'manager' } ];
241 my $b = { 'artist' => { 'manager' => [ 'artist', 'label' ] } };
242 my $expected = [ 'artist', 'cd', { 'artist' => [ { 'manager' => [ 'artist', 'label' ] } ] } ];
243 my $result = $rs->_merge_joinpref_attr($a, $b);
244 is_deeply( $result, $expected );
248 my $a = [{ artist => { -x => 1 } }, 'cd', { artist => [{ -x => 1 }, 'manager' ] }];
249 my $b = { artist => { -x => 1, 'manager' => [{ artist => { -x => 1 } }, 'label' ] } };
250 my $expected = [{ artist => { -x => 1 } }, 'cd', { artist => { -x => 1, { 'manager' => [{ artist => { -x => 1 } }, 'label' ] } } } ];
251 my $result = $rs->_merge_joinpref_attr($a, $b);
252 is_deeply( $result, $expected );
256 my $a = [ 'artist', 'cd', { 'artist' => 'manager' } ];
257 my $b = { 'artist' => { 'tour_manager' => [ 'venue', 'roadie' ] } };
258 my $expected = [ { 'artist' => { 'tour_manager' => [ 'venue', 'roadie' ] } }, 'cd', { 'artist' => 'manager' } ];
259 my $result = $rs->_merge_joinpref_attr($a, $b);
260 is_deeply( $result, $expected );
264 my $a = [ { artist => { -k => '' } }, 'cd', { artist => [{ -k => '' }, 'manager'] } ];
265 my $b = { artist => { -k => '', tour_manager => [ 'venue', 'roadie' ] } };
266 my $expected = [ { artist => { -k => '', tour_manager => [ 'venue', 'roadie' ] } }, 'cd', { artist => [{ -k => ''}, 'manager'] } ];
267 my $result = $rs->_merge_joinpref_attr($a, $b);
268 is_deeply( $result, $expected );
272 my $a = [ 'artist', 'cd' ];
273 my $b = { 'artist' => { 'tour_manager' => [ 'venue', 'roadie' ] } };
274 my $expected = [ { 'artist' => { 'tour_manager' => [ 'venue', 'roadie' ] } }, 'cd' ];
275 my $result = $rs->_merge_joinpref_attr($a, $b);
276 is_deeply( $result, $expected );
280 my $a = [{ artist => { -xyzzy => undef } }, 'cd' ];
281 my $b = { artist => { -xyzzy => undef, 'tour_manager' => [ 'venue', 'roadie' ] } };
282 my $expected = [ { artist => { -xyzzy => undef, 'tour_manager' => [ 'venue', 'roadie' ] } }, 'cd' ];
283 my $result = $rs->_merge_joinpref_attr($a, $b);
284 is_deeply( $result, $expected );
288 my $a = [ { 'artist' => 'manager' }, 'cd' ];
289 my $b = [ 'artist', { 'artist' => 'manager' } ];
290 my $expected = [ { 'artist' => 'manager' }, 'cd', { 'artist' => 'manager' } ];
291 my $result = $rs->_merge_joinpref_attr($a, $b);
292 is_deeply( $result, $expected );
296 my $a = [{ artist => [{ -join_type => 123 }, 'manager' ] }, 'cd' ];
297 my $b = [{ artist => { -join_type => 123 } }, { artist => [{ -join_type => 123 }, 'manager'] } ];
298 my $expected = [ { artist => [{ -join_type => 123 }, 'manager'] }, 'cd', { artist => [{ -join_type => 123 }, 'manager'] } ];
299 my $result = $rs->_merge_joinpref_attr($a, $b);
300 is_deeply( $result, $expected );