Commit | Line | Data |
1d78a406 |
1 | use strict; |
8273e845 |
2 | use warnings; |
1d78a406 |
3 | |
4 | use Test::More; |
84163bb8 |
5 | use Test::Exception; |
1d78a406 |
6 | use lib qw(t/lib); |
7 | use DBICTest; |
1d78a406 |
8 | |
84163bb8 |
9 | # temporary reassign for easier test debug |
10 | # not adding dependency either - just delete this |
11 | # block once everything works |
12 | use Test::Differences; |
13 | BEGIN { |
14 | no warnings 'redefine'; |
15 | *is_deeply = \&Test::Differences::eq_or_diff; |
16 | } |
1d78a406 |
17 | |
18 | my $schema = DBICTest->init_schema(); |
19 | my $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 |
303 | done_testing; |