Add join opt merge tests
[dbsrgits/DBIx-Class.git] / t / 91merge_joinpref_attr.t
CommitLineData
1d78a406 1use strict;
8273e845 2use warnings;
1d78a406 3
4use Test::More;
84163bb8 5use Test::Exception;
1d78a406 6use lib qw(t/lib);
7use DBICTest;
1d78a406 8
84163bb8 9# temporary reassign for easier test debug
10# not adding dependency either - just delete this
11# block once everything works
12use Test::Differences;
13BEGIN {
14 no warnings 'redefine';
15 *is_deeply = \&Test::Differences::eq_or_diff;
16}
1d78a406 17
18my $schema = DBICTest->init_schema();
19my $rs = $schema->resultset( 'CD' );
20
21{
84163bb8 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 );
27}
28
29{
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 );
35}
36
37{
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 );
43}
44
45# no conflicting options
46{
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/;
51}
52
53{
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/;
58}
59
60{
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/;
65}
66
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
72{
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/;
77}
78
79{
1d78a406 80 my $a = 'artist';
81 my $b = 'cd';
82 my $expected = [ 'artist', 'cd' ];
37aafa2e 83 my $result = $rs->_merge_joinpref_attr($a, $b);
1d78a406 84 is_deeply( $result, $expected );
85}
86
87{
84163bb8 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 );
93}
94
95{
1d78a406 96 my $a = [ 'artist' ];
97 my $b = [ 'cd' ];
98 my $expected = [ 'artist', 'cd' ];
37aafa2e 99 my $result = $rs->_merge_joinpref_attr($a, $b);
1d78a406 100 is_deeply( $result, $expected );
101}
102
103{
104 my $a = [ 'artist', 'cd' ];
105 my $b = [ 'cd' ];
106 my $expected = [ 'artist', 'cd' ];
37aafa2e 107 my $result = $rs->_merge_joinpref_attr($a, $b);
1d78a406 108 is_deeply( $result, $expected );
109}
110
111{
84163bb8 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 );
117}
118
119{
1d78a406 120 my $a = [ 'artist', 'artist' ];
121 my $b = [ 'artist', 'cd' ];
122 my $expected = [ 'artist', 'artist', 'cd' ];
37aafa2e 123 my $result = $rs->_merge_joinpref_attr($a, $b);
1d78a406 124 is_deeply( $result, $expected );
125}
126
127{
84163bb8 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 );
133}
134
135{
1d78a406 136 my $a = [ 'artist', 'cd' ];
137 my $b = [ 'artist', 'artist' ];
138 my $expected = [ 'artist', 'cd', 'artist' ];
37aafa2e 139 my $result = $rs->_merge_joinpref_attr($a, $b);
1d78a406 140 is_deeply( $result, $expected );
141}
142
143{
84163bb8 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 );
149}
150
151{
aab9e887 152 my $a = [ 'twokeys' ];
153 my $b = [ 'cds', 'cds' ];
154 my $expected = [ 'twokeys', 'cds', 'cds' ];
37aafa2e 155 my $result = $rs->_merge_joinpref_attr($a, $b);
aab9e887 156 is_deeply( $result, $expected );
157}
158
159{
84163bb8 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 );
165}
166
167{
1d78a406 168 my $a = [ 'artist', 'cd', { 'artist' => 'manager' } ];
169 my $b = 'artist';
170 my $expected = [ 'artist', 'cd', { 'artist' => 'manager' } ];
37aafa2e 171 my $result = $rs->_merge_joinpref_attr($a, $b);
1d78a406 172 is_deeply( $result, $expected );
173}
174
175{
84163bb8 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 );
181}
182
183{
1d78a406 184 my $a = [ 'artist', 'cd', { 'artist' => 'manager' } ];
185 my $b = [ 'artist', 'cd' ];
186 my $expected = [ 'artist', 'cd', { 'artist' => 'manager' } ];
37aafa2e 187 my $result = $rs->_merge_joinpref_attr($a, $b);
1d78a406 188 is_deeply( $result, $expected );
189}
190
191{
84163bb8 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 );
197}
198
199{
1d78a406 200 my $a = [ 'artist', 'cd', { 'artist' => 'manager' } ];
201 my $b = { 'artist' => 'manager' };
202 my $expected = [ 'artist', 'cd', { 'artist' => [ 'manager' ] } ];
37aafa2e 203 my $result = $rs->_merge_joinpref_attr($a, $b);
1d78a406 204 is_deeply( $result, $expected );
205}
206
207{
208 my $a = [ 'artist', 'cd', { 'artist' => 'manager' } ];
209 my $b = { 'artist' => 'agent' };
210 my $expected = [ { 'artist' => 'agent' }, 'cd', { 'artist' => 'manager' } ];
37aafa2e 211 my $result = $rs->_merge_joinpref_attr($a, $b);
1d78a406 212 is_deeply( $result, $expected );
213}
214
215{
84163bb8 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 );
221}
222
223{
1d78a406 224 my $a = [ 'artist', 'cd', { 'artist' => 'manager' } ];
225 my $b = { 'artist' => { 'manager' => 'artist' } };
226 my $expected = [ 'artist', 'cd', { 'artist' => [ { 'manager' => 'artist' } ] } ];
37aafa2e 227 my $result = $rs->_merge_joinpref_attr($a, $b);
1d78a406 228 is_deeply( $result, $expected );
229}
230
231{
84163bb8 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 );
237}
238
239{
1d78a406 240 my $a = [ 'artist', 'cd', { 'artist' => 'manager' } ];
241 my $b = { 'artist' => { 'manager' => [ 'artist', 'label' ] } };
242 my $expected = [ 'artist', 'cd', { 'artist' => [ { 'manager' => [ 'artist', 'label' ] } ] } ];
37aafa2e 243 my $result = $rs->_merge_joinpref_attr($a, $b);
1d78a406 244 is_deeply( $result, $expected );
245}
246
247{
84163bb8 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 );
253}
254
255{
1d78a406 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' } ];
37aafa2e 259 my $result = $rs->_merge_joinpref_attr($a, $b);
1d78a406 260 is_deeply( $result, $expected );
261}
262
263{
84163bb8 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 );
269}
270
271{
1d78a406 272 my $a = [ 'artist', 'cd' ];
273 my $b = { 'artist' => { 'tour_manager' => [ 'venue', 'roadie' ] } };
274 my $expected = [ { 'artist' => { 'tour_manager' => [ 'venue', 'roadie' ] } }, 'cd' ];
37aafa2e 275 my $result = $rs->_merge_joinpref_attr($a, $b);
1d78a406 276 is_deeply( $result, $expected );
277}
278
279{
84163bb8 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 );
285}
286
287{
1d78a406 288 my $a = [ { 'artist' => 'manager' }, 'cd' ];
289 my $b = [ 'artist', { 'artist' => 'manager' } ];
290 my $expected = [ { 'artist' => 'manager' }, 'cd', { 'artist' => 'manager' } ];
37aafa2e 291 my $result = $rs->_merge_joinpref_attr($a, $b);
1d78a406 292 is_deeply( $result, $expected );
293}
294
84163bb8 295{
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 );
301}
1d78a406 302
84163bb8 303done_testing;