Commit | Line | Data |
71130750 |
1 | use warnings; |
605fcea8 |
2 | use strict; |
ff746964 |
3 | |
71130750 |
4 | use File::Temp (); |
5 | use Test::More; |
605fcea8 |
6 | |
71130750 |
7 | use lib qw(t/lib); |
8 | use dbixcsl_dumper_tests; |
9 | my $t = 'dbixcsl_dumper_tests'; |
a4187fdf |
10 | |
71130750 |
11 | $t->cleanup; |
a4187fdf |
12 | |
6dde4613 |
13 | # test loading external content |
71130750 |
14 | $t->dump_test( |
15 | classname => 'DBICTest::Schema::_no_skip_load_external', |
71130750 |
16 | regexes => { |
17 | Foo => [ |
18 | qr/package DBICTest::Schema::_no_skip_load_external::Foo;\nour \$skip_me = "bad mojo";\n1;/ |
6dde4613 |
19 | ], |
71130750 |
20 | }, |
6dde4613 |
21 | ); |
22 | |
23 | # test skipping external content |
71130750 |
24 | $t->dump_test( |
25 | classname => 'DBICTest::Schema::_skip_load_external', |
26 | options => { |
900195eb |
27 | skip_load_external => 1, |
71130750 |
28 | }, |
71130750 |
29 | neg_regexes => { |
30 | Foo => [ |
31 | qr/package DBICTest::Schema::_skip_load_external::Foo;\nour \$skip_me = "bad mojo";\n1;/ |
6dde4613 |
32 | ], |
71130750 |
33 | }, |
6dde4613 |
34 | ); |
35 | |
71130750 |
36 | $t->cleanup; |
73099af4 |
37 | # test config_file |
71130750 |
38 | { |
39 | my $config_file = File::Temp->new (UNLINK => 1); |
73099af4 |
40 | |
71130750 |
41 | print $config_file "{ skip_relationships => 1 }\n"; |
42 | close $config_file; |
73099af4 |
43 | |
71130750 |
44 | $t->dump_test( |
1a8fd949 |
45 | classname => 'DBICTest::Schema::_config_file', |
71130750 |
46 | options => { config_file => "$config_file" }, |
73099af4 |
47 | neg_regexes => { |
71130750 |
48 | Foo => [ |
49 | qr/has_many/, |
50 | ], |
73099af4 |
51 | }, |
71130750 |
52 | ); |
53 | } |
c9cf9b4d |
54 | |
71130750 |
55 | # proper exception |
56 | $t->dump_test( |
1a8fd949 |
57 | classname => 'DBICTest::Schema::_clashing_monikers', |
71130750 |
58 | test_db_class => 'make_dbictest_db_clashing_monikers', |
59 | error => qr/tables 'bar', 'bars' reduced to the same source moniker 'Bar'/, |
c9cf9b4d |
60 | ); |
61 | |
c9cf9b4d |
62 | |
71130750 |
63 | $t->cleanup; |
c9cf9b4d |
64 | |
c0a0986f |
65 | # test naming => { column_accessors => 'preserve' } |
8007f3a7 |
66 | # also test POD for unique constraint |
c0a0986f |
67 | $t->dump_test( |
68 | classname => 'DBICTest::Schema::_preserve_column_accessors', |
69 | test_db_class => 'make_dbictest_db_with_unique', |
70 | options => { naming => { column_accessors => 'preserve' } }, |
c0a0986f |
71 | neg_regexes => { |
72 | RouteChange => [ |
73 | qr/\baccessor\b/, |
74 | ], |
75 | }, |
8007f3a7 |
76 | regexes => { |
77 | Baz => [ |
78 | qr/\n\n=head1 UNIQUE CONSTRAINTS\n\n=head2 C<baz_num_unique>\n\n=over 4\n\n=item \* L<\/baz_num>\n\n=back\n\n=cut\n\n__PACKAGE__->add_unique_constraint\("baz_num_unique"\, \["baz_num"\]\);\n\n/, |
79 | ], |
80 | } |
c0a0986f |
81 | ); |
82 | |
83 | $t->cleanup; |
84 | |
b33d5949 |
85 | # test that rels are sorted |
86 | $t->dump_test( |
87 | classname => 'DBICTest::Schema::_sorted_rels', |
88 | test_db_class => 'make_dbictest_db_with_unique', |
b33d5949 |
89 | regexes => { |
90 | Baz => [ |
91 | qr/->might_have\(\n "quux".*->belongs_to\(\n "station_visited"/s, |
92 | ], |
93 | } |
94 | ); |
95 | |
96 | $t->cleanup; |
97 | |
c0a0986f |
98 | # test naming => { monikers => 'plural' } |
99 | $t->dump_test( |
100 | classname => 'DBICTest::Schema::_plural_monikers', |
101 | options => { naming => { monikers => 'plural' } }, |
c0a0986f |
102 | regexes => { |
103 | Foos => [ |
104 | qr/\n=head1 NAME\n\nDBICTest::Schema::_plural_monikers::Foos\n\n=cut\n\n/, |
105 | ], |
106 | Bars => [ |
107 | qr/\n=head1 NAME\n\nDBICTest::Schema::_plural_monikers::Bars\n\n=cut\n\n/, |
108 | ], |
109 | }, |
110 | ); |
111 | |
112 | $t->cleanup; |
113 | |
114 | # test naming => { monikers => 'singular' } |
115 | $t->dump_test( |
116 | classname => 'DBICTest::Schema::_singular_monikers', |
117 | test_db_class => 'make_dbictest_db_plural_tables', |
118 | options => { naming => { monikers => 'singular' } }, |
c0a0986f |
119 | regexes => { |
120 | Foo => [ |
121 | qr/\n=head1 NAME\n\nDBICTest::Schema::_singular_monikers::Foo\n\n=cut\n\n/, |
122 | ], |
123 | Bar => [ |
124 | qr/\n=head1 NAME\n\nDBICTest::Schema::_singular_monikers::Bar\n\n=cut\n\n/, |
125 | ], |
126 | }, |
127 | ); |
128 | |
129 | $t->cleanup; |
130 | |
131 | # test naming => { monikers => 'preserve' } |
132 | $t->dump_test( |
133 | classname => 'DBICTest::Schema::_preserve_monikers', |
134 | test_db_class => 'make_dbictest_db_plural_tables', |
135 | options => { naming => { monikers => 'preserve' } }, |
c0a0986f |
136 | regexes => { |
137 | Foos => [ |
138 | qr/\n=head1 NAME\n\nDBICTest::Schema::_preserve_monikers::Foos\n\n=cut\n\n/, |
139 | ], |
140 | Bars => [ |
141 | qr/\n=head1 NAME\n\nDBICTest::Schema::_preserve_monikers::Bars\n\n=cut\n\n/, |
142 | ], |
143 | }, |
144 | ); |
145 | |
146 | $t->cleanup; |
147 | |
71130750 |
148 | # test out the POD |
149 | $t->dump_test( |
150 | classname => 'DBICTest::DumpMore::1', |
151 | options => { |
152 | custom_column_info => sub { |
153 | my ($table, $col, $info) = @_; |
154 | return +{ extra => { is_footext => 1 } } if $col eq 'footext'; |
06e06245 |
155 | }, |
a8acb698 |
156 | result_base_class => 'My::ResultBaseClass', |
06e06245 |
157 | additional_classes => 'TestAdditional', |
158 | additional_base_classes => 'TestAdditionalBase', |
159 | left_base_classes => 'TestLeftBase', |
160 | components => [ 'TestComponent', '+TestComponentFQN' ], |
71130750 |
161 | }, |
71130750 |
162 | regexes => { |
163 | schema => [ |
164 | qr/package DBICTest::DumpMore::1;/, |
165 | qr/->load_classes/, |
c9cf9b4d |
166 | ], |
71130750 |
167 | Foo => [ |
168 | qr/package DBICTest::DumpMore::1::Foo;/, |
61c8fd6d |
169 | qr/\n=head1 NAME\n\nDBICTest::DumpMore::1::Foo\n\n=cut\n\nuse strict;\nuse warnings;\n\n/, |
170 | qr/\n=head1 BASE CLASS: L<My::ResultBaseClass>\n\n=cut\n\nuse base 'My::ResultBaseClass';\n\n/, |
017d9734 |
171 | qr/\n=head1 ADDITIONAL CLASSES USED\n\n=over 4\n\n=item \* L<TestAdditional>\n\n=back\n\n=cut\n\n/, |
172 | qr/\n=head1 ADDITIONAL BASE CLASSES\n\n=over 4\n\n=item \* L<TestAdditionalBase>\n\n=back\n\n=cut\n\n/, |
173 | qr/\n=head1 LEFT BASE CLASSES\n\n=over 4\n\n=item \* L<TestLeftBase>\n\n=back\n\n=cut\n\n/, |
174 | qr/\n=head1 COMPONENTS LOADED\n\n=over 4\n\n=item \* L<DBIx::Class::TestComponent>\n\n=item \* L<TestComponentFQN>\n\n=back\n\n=cut\n\n/, |
8007f3a7 |
175 | qr/\n=head1 TABLE: C<foo>\n\n=cut\n\n__PACKAGE__->table\("foo"\);\n\n/, |
06e06245 |
176 | qr/\n=head1 ACCESSORS\n\n/, |
177 | qr/\n=head2 fooid\n\n data_type: 'integer'\n is_auto_increment: 1\n is_nullable: 0\n\n/, |
178 | qr/\n=head2 footext\n\n data_type: 'text'\n default_value: 'footext'\n extra: {is_footext => 1}\n is_nullable: 1\n\n/, |
8007f3a7 |
179 | qr/\n=head1 PRIMARY KEY\n\n=over 4\n\n=item \* L<\/fooid>\n\n=back\n\n=cut\n\n__PACKAGE__->set_primary_key\("fooid"\);\n/, |
06e06245 |
180 | qr/\n=head1 RELATIONS\n\n/, |
181 | qr/\n=head2 bars\n\nType: has_many\n\nRelated object: L<DBICTest::DumpMore::1::Bar>\n\n=cut\n\n/, |
71130750 |
182 | qr/1;\n$/, |
c9cf9b4d |
183 | ], |
71130750 |
184 | Bar => [ |
185 | qr/package DBICTest::DumpMore::1::Bar;/, |
61c8fd6d |
186 | qr/\n=head1 NAME\n\nDBICTest::DumpMore::1::Bar\n\n=cut\n\nuse strict;\nuse warnings;\n\n/, |
187 | qr/\n=head1 BASE CLASS: L<My::ResultBaseClass>\n\n=cut\n\nuse base 'My::ResultBaseClass';\n\n/, |
017d9734 |
188 | qr/\n=head1 ADDITIONAL CLASSES USED\n\n=over 4\n\n=item \* L<TestAdditional>\n\n=back\n\n=cut\n\n/, |
189 | qr/\n=head1 ADDITIONAL BASE CLASSES\n\n=over 4\n\n=item \* L<TestAdditionalBase>\n\n=back\n\n=cut\n\n/, |
190 | qr/\n=head1 LEFT BASE CLASSES\n\n=over 4\n\n=item \* L<TestLeftBase>\n\n=back\n\n=cut\n\n/, |
191 | qr/\n=head1 COMPONENTS LOADED\n\n=over 4\n\n=item \* L<DBIx::Class::TestComponent>\n\n=item \* L<TestComponentFQN>\n\n=back\n\n=cut\n\n/, |
8007f3a7 |
192 | qr/\n=head1 TABLE: C<bar>\n\n=cut\n\n__PACKAGE__->table\("bar"\);\n\n/, |
06e06245 |
193 | qr/\n=head1 ACCESSORS\n\n/, |
194 | qr/\n=head2 barid\n\n data_type: 'integer'\n is_auto_increment: 1\n is_nullable: 0\n\n/, |
195 | qr/\n=head2 fooref\n\n data_type: 'integer'\n is_foreign_key: 1\n is_nullable: 1\n\n/, |
8007f3a7 |
196 | qr/\n=head1 PRIMARY KEY\n\n=over 4\n\n=item \* L<\/barid>\n\n=back\n\n=cut\n\n__PACKAGE__->set_primary_key\("barid"\);\n/, |
06e06245 |
197 | qr/\n=head1 RELATIONS\n\n/, |
198 | qr/\n=head2 fooref\n\nType: belongs_to\n\nRelated object: L<DBICTest::DumpMore::1::Foo>\n\n=cut\n\n/, |
199 | qr/\n1;\n$/, |
c9cf9b4d |
200 | ], |
71130750 |
201 | }, |
c9cf9b4d |
202 | ); |
203 | |
71130750 |
204 | $t->append_to_class('DBICTest::DumpMore::1::Foo',q{# XXX This is my custom content XXX}); |
f812ef60 |
205 | |
9de8c789 |
206 | |
71130750 |
207 | $t->dump_test( |
208 | classname => 'DBICTest::DumpMore::1', |
71130750 |
209 | regexes => { |
210 | schema => [ |
211 | qr/package DBICTest::DumpMore::1;/, |
212 | qr/->load_classes/, |
a4187fdf |
213 | ], |
71130750 |
214 | Foo => [ |
215 | qr/package DBICTest::DumpMore::1::Foo;/, |
216 | qr/->set_primary_key/, |
217 | qr/1;\n# XXX This is my custom content XXX/, |
218 | ], |
219 | Bar => [ |
220 | qr/package DBICTest::DumpMore::1::Bar;/, |
221 | qr/->set_primary_key/, |
222 | qr/1;\n$/, |
223 | ], |
224 | }, |
a4187fdf |
225 | ); |
226 | |
a4187fdf |
227 | |
71130750 |
228 | $t->dump_test( |
229 | classname => 'DBICTest::DumpMore::1', |
230 | options => { |
231 | really_erase_my_files => 1 |
232 | }, |
71130750 |
233 | regexes => { |
234 | schema => [ |
235 | qr/package DBICTest::DumpMore::1;/, |
236 | qr/->load_classes/, |
a4187fdf |
237 | ], |
71130750 |
238 | Foo => [ |
239 | qr/package DBICTest::DumpMore::1::Foo;/, |
240 | qr/->set_primary_key/, |
241 | qr/1;\n$/, |
a4187fdf |
242 | ], |
71130750 |
243 | Bar => [ |
244 | qr/package DBICTest::DumpMore::1::Bar;/, |
245 | qr/->set_primary_key/, |
246 | qr/1;\n$/, |
247 | ], |
248 | }, |
249 | neg_regexes => { |
250 | Foo => [ |
251 | qr/# XXX This is my custom content XXX/, |
252 | ], |
253 | }, |
492dce8d |
254 | ); |
255 | |
eac5494b |
256 | |
71130750 |
257 | $t->cleanup; |
258 | |
259 | # test namespaces |
260 | $t->dump_test( |
261 | classname => 'DBICTest::DumpMore::1', |
262 | options => { |
263 | use_namespaces => 1, |
264 | generate_pod => 0 |
265 | }, |
71130750 |
266 | neg_regexes => { |
267 | 'Result/Foo' => [ |
268 | qr/^=/m, |
492dce8d |
269 | ], |
71130750 |
270 | }, |
a4187fdf |
271 | ); |
605fcea8 |
272 | |
eac5494b |
273 | |
71130750 |
274 | $t->dump_test( |
275 | classname => 'DBICTest::DumpMore::1', |
276 | options => { |
277 | db_schema => 'foo_schema', |
278 | qualify_objects => 1, |
279 | use_namespaces => 1 |
280 | }, |
71130750 |
281 | regexes => { |
282 | 'Result/Foo' => [ |
283 | qr/^\Q__PACKAGE__->table("foo_schema.foo");\E/m, |
284 | # the has_many relname should not have the schema in it! |
285 | qr/^__PACKAGE__->has_many\(\n "bars"/m, |
69219349 |
286 | ], |
71130750 |
287 | }, |
69219349 |
288 | ); |
289 | |
71130750 |
290 | $t->dump_test( |
291 | classname => 'DBICTest::DumpMore::1', |
292 | options => { |
293 | use_namespaces => 1 |
294 | }, |
71130750 |
295 | regexes => { |
296 | schema => [ |
297 | qr/package DBICTest::DumpMore::1;/, |
298 | qr/->load_namespaces/, |
f44ecc2f |
299 | ], |
71130750 |
300 | 'Result/Foo' => [ |
301 | qr/package DBICTest::DumpMore::1::Result::Foo;/, |
302 | qr/->set_primary_key/, |
303 | qr/1;\n$/, |
304 | ], |
305 | 'Result/Bar' => [ |
306 | qr/package DBICTest::DumpMore::1::Result::Bar;/, |
307 | qr/->set_primary_key/, |
308 | qr/1;\n$/, |
309 | ], |
310 | }, |
f44ecc2f |
311 | ); |
312 | |
eac5494b |
313 | |
71130750 |
314 | $t->dump_test( |
315 | classname => 'DBICTest::DumpMore::1', |
316 | options => { |
317 | use_namespaces => 1, |
318 | result_namespace => 'Res', |
319 | resultset_namespace => 'RSet', |
320 | default_resultset_class => 'RSetBase', |
321 | }, |
71130750 |
322 | regexes => { |
323 | schema => [ |
324 | qr/package DBICTest::DumpMore::1;/, |
325 | qr/->load_namespaces/, |
eb28f95b |
326 | qr/result_namespace => "Res"/, |
327 | qr/resultset_namespace => "RSet"/, |
328 | qr/default_resultset_class => "RSetBase"/, |
f44ecc2f |
329 | ], |
71130750 |
330 | 'Res/Foo' => [ |
331 | qr/package DBICTest::DumpMore::1::Res::Foo;/, |
332 | qr/->set_primary_key/, |
333 | qr/1;\n$/, |
334 | ], |
335 | 'Res/Bar' => [ |
336 | qr/package DBICTest::DumpMore::1::Res::Bar;/, |
337 | qr/->set_primary_key/, |
338 | qr/1;\n$/, |
339 | ], |
340 | }, |
f44ecc2f |
341 | ); |
342 | |
eac5494b |
343 | |
71130750 |
344 | $t->dump_test( |
345 | classname => 'DBICTest::DumpMore::1', |
346 | options => { |
347 | use_namespaces => 1, |
348 | result_namespace => '+DBICTest::DumpMore::1::Res', |
349 | resultset_namespace => 'RSet', |
350 | default_resultset_class => 'RSetBase', |
351 | result_base_class => 'My::ResultBaseClass', |
352 | schema_base_class => 'My::SchemaBaseClass', |
353 | }, |
71130750 |
354 | regexes => { |
355 | schema => [ |
356 | qr/package DBICTest::DumpMore::1;/, |
357 | qr/->load_namespaces/, |
eb28f95b |
358 | qr/result_namespace => "\+DBICTest::DumpMore::1::Res"/, |
359 | qr/resultset_namespace => "RSet"/, |
360 | qr/default_resultset_class => "RSetBase"/, |
71130750 |
361 | qr/use base 'My::SchemaBaseClass'/, |
f44ecc2f |
362 | ], |
71130750 |
363 | 'Res/Foo' => [ |
364 | qr/package DBICTest::DumpMore::1::Res::Foo;/, |
365 | qr/use base 'My::ResultBaseClass'/, |
366 | qr/->set_primary_key/, |
367 | qr/1;\n$/, |
368 | ], |
369 | 'Res/Bar' => [ |
370 | qr/package DBICTest::DumpMore::1::Res::Bar;/, |
371 | qr/use base 'My::ResultBaseClass'/, |
372 | qr/->set_primary_key/, |
373 | qr/1;\n$/, |
374 | ], |
375 | }, |
f44ecc2f |
376 | ); |
c634fde9 |
377 | |
71130750 |
378 | $t->dump_test( |
379 | classname => 'DBICTest::DumpMore::1', |
380 | options => { |
381 | use_namespaces => 1, |
382 | result_base_class => 'My::MissingResultBaseClass', |
383 | }, |
384 | error => qr/My::MissingResultBaseClass.*is not installed/, |
8048320c |
385 | ); |
f44ecc2f |
386 | |
667f1a0b |
387 | # test quote_char in connect_info for dbicdump |
388 | $t->dump_test( |
389 | classname => 'DBICTest::DumpMore::1', |
390 | extra_connect_info => [ |
391 | '', |
392 | '', |
393 | { quote_char => '"' }, |
394 | ], |
667f1a0b |
395 | ); |
396 | |
d27f2b7b |
397 | done_testing; |
c0a0986f |
398 | # vim:et sts=4 sw=4 tw=0: |