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', |
16 | warnings => [ |
17 | qr/Dumping manual schema for DBICTest::Schema::_no_skip_load_external to directory /, |
18 | qr/Schema dump completed/, |
19 | ], |
20 | regexes => { |
21 | Foo => [ |
22 | qr/package DBICTest::Schema::_no_skip_load_external::Foo;\nour \$skip_me = "bad mojo";\n1;/ |
6dde4613 |
23 | ], |
71130750 |
24 | }, |
6dde4613 |
25 | ); |
26 | |
27 | # test skipping external content |
71130750 |
28 | $t->dump_test( |
29 | classname => 'DBICTest::Schema::_skip_load_external', |
30 | options => { |
31 | skip_load_external => 1 |
32 | }, |
33 | warnings => [ |
34 | qr/Dumping manual schema for DBICTest::Schema::_skip_load_external to directory /, |
35 | qr/Schema dump completed/, |
36 | ], |
37 | neg_regexes => { |
38 | Foo => [ |
39 | qr/package DBICTest::Schema::_skip_load_external::Foo;\nour \$skip_me = "bad mojo";\n1;/ |
6dde4613 |
40 | ], |
71130750 |
41 | }, |
6dde4613 |
42 | ); |
43 | |
71130750 |
44 | $t->cleanup; |
73099af4 |
45 | # test config_file |
71130750 |
46 | { |
47 | my $config_file = File::Temp->new (UNLINK => 1); |
73099af4 |
48 | |
71130750 |
49 | print $config_file "{ skip_relationships => 1 }\n"; |
50 | close $config_file; |
73099af4 |
51 | |
71130750 |
52 | $t->dump_test( |
1a8fd949 |
53 | classname => 'DBICTest::Schema::_config_file', |
71130750 |
54 | options => { config_file => "$config_file" }, |
73099af4 |
55 | warnings => [ |
1a8fd949 |
56 | qr/Dumping manual schema for DBICTest::Schema::_config_file to directory /, |
71130750 |
57 | qr/Schema dump completed/, |
73099af4 |
58 | ], |
59 | neg_regexes => { |
71130750 |
60 | Foo => [ |
61 | qr/has_many/, |
62 | ], |
73099af4 |
63 | }, |
71130750 |
64 | ); |
65 | } |
c9cf9b4d |
66 | |
71130750 |
67 | # proper exception |
68 | $t->dump_test( |
1a8fd949 |
69 | classname => 'DBICTest::Schema::_clashing_monikers', |
71130750 |
70 | test_db_class => 'make_dbictest_db_clashing_monikers', |
71 | error => qr/tables 'bar', 'bars' reduced to the same source moniker 'Bar'/, |
c9cf9b4d |
72 | ); |
73 | |
c9cf9b4d |
74 | |
71130750 |
75 | $t->cleanup; |
c9cf9b4d |
76 | |
71130750 |
77 | # test out the POD |
78 | $t->dump_test( |
79 | classname => 'DBICTest::DumpMore::1', |
80 | options => { |
81 | custom_column_info => sub { |
82 | my ($table, $col, $info) = @_; |
83 | return +{ extra => { is_footext => 1 } } if $col eq 'footext'; |
84 | } |
85 | }, |
86 | warnings => [ |
87 | qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /, |
88 | qr/Schema dump completed/, |
89 | ], |
90 | regexes => { |
91 | schema => [ |
92 | qr/package DBICTest::DumpMore::1;/, |
93 | qr/->load_classes/, |
c9cf9b4d |
94 | ], |
71130750 |
95 | Foo => [ |
96 | qr/package DBICTest::DumpMore::1::Foo;/, |
97 | qr/=head1 NAME\n\nDBICTest::DumpMore::1::Foo\n\n=cut\n\n/, |
98 | qr/=head1 ACCESSORS\n\n/, |
99 | qr/=head2 fooid\n\n data_type: 'integer'\n is_auto_increment: 1\n is_nullable: 0\n\n/, |
100 | qr/=head2 footext\n\n data_type: 'text'\n default_value: 'footext'\n extra: {is_footext => 1}\n is_nullable: 1\n\n/, |
101 | qr/->set_primary_key/, |
102 | qr/=head1 RELATIONS\n\n/, |
103 | qr/=head2 bars\n\nType: has_many\n\nRelated object: L<DBICTest::DumpMore::1::Bar>\n\n=cut\n\n/, |
104 | qr/1;\n$/, |
c9cf9b4d |
105 | ], |
71130750 |
106 | Bar => [ |
107 | qr/package DBICTest::DumpMore::1::Bar;/, |
108 | qr/=head1 NAME\n\nDBICTest::DumpMore::1::Bar\n\n=cut\n\n/, |
109 | qr/=head1 ACCESSORS\n\n/, |
110 | qr/=head2 barid\n\n data_type: 'integer'\n is_auto_increment: 1\n is_nullable: 0\n\n/, |
111 | qr/=head2 fooref\n\n data_type: 'integer'\n is_foreign_key: 1\n is_nullable: 1\n\n/, |
112 | qr/->set_primary_key/, |
113 | qr/=head1 RELATIONS\n\n/, |
114 | qr/=head2 fooref\n\nType: belongs_to\n\nRelated object: L<DBICTest::DumpMore::1::Foo>\n\n=cut\n\n/, |
115 | qr/1;\n$/, |
c9cf9b4d |
116 | ], |
71130750 |
117 | }, |
c9cf9b4d |
118 | ); |
119 | |
120 | |
71130750 |
121 | $t->append_to_class('DBICTest::DumpMore::1::Foo',q{# XXX This is my custom content XXX}); |
f812ef60 |
122 | |
9de8c789 |
123 | |
71130750 |
124 | $t->dump_test( |
125 | classname => 'DBICTest::DumpMore::1', |
126 | warnings => [ |
127 | qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /, |
128 | qr/Schema dump completed/, |
129 | ], |
130 | regexes => { |
131 | schema => [ |
132 | qr/package DBICTest::DumpMore::1;/, |
133 | qr/->load_classes/, |
a4187fdf |
134 | ], |
71130750 |
135 | Foo => [ |
136 | qr/package DBICTest::DumpMore::1::Foo;/, |
137 | qr/->set_primary_key/, |
138 | qr/1;\n# XXX This is my custom content XXX/, |
139 | ], |
140 | Bar => [ |
141 | qr/package DBICTest::DumpMore::1::Bar;/, |
142 | qr/->set_primary_key/, |
143 | qr/1;\n$/, |
144 | ], |
145 | }, |
a4187fdf |
146 | ); |
147 | |
a4187fdf |
148 | |
71130750 |
149 | $t->dump_test( |
150 | classname => 'DBICTest::DumpMore::1', |
151 | options => { |
152 | really_erase_my_files => 1 |
153 | }, |
154 | warnings => [ |
155 | qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /, |
156 | qr/Deleting existing file /, |
157 | qr/Deleting existing file /, |
158 | qr/Deleting existing file /, |
159 | qr/Schema dump completed/, |
160 | ], |
161 | regexes => { |
162 | schema => [ |
163 | qr/package DBICTest::DumpMore::1;/, |
164 | qr/->load_classes/, |
a4187fdf |
165 | ], |
71130750 |
166 | Foo => [ |
167 | qr/package DBICTest::DumpMore::1::Foo;/, |
168 | qr/->set_primary_key/, |
169 | qr/1;\n$/, |
a4187fdf |
170 | ], |
71130750 |
171 | Bar => [ |
172 | qr/package DBICTest::DumpMore::1::Bar;/, |
173 | qr/->set_primary_key/, |
174 | qr/1;\n$/, |
175 | ], |
176 | }, |
177 | neg_regexes => { |
178 | Foo => [ |
179 | qr/# XXX This is my custom content XXX/, |
180 | ], |
181 | }, |
492dce8d |
182 | ); |
183 | |
eac5494b |
184 | |
71130750 |
185 | $t->cleanup; |
186 | |
187 | # test namespaces |
188 | $t->dump_test( |
189 | classname => 'DBICTest::DumpMore::1', |
190 | options => { |
191 | use_namespaces => 1, |
192 | generate_pod => 0 |
193 | }, |
194 | warnings => [ |
195 | qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /, |
196 | qr/Schema dump completed/, |
197 | ], |
198 | neg_regexes => { |
199 | 'Result/Foo' => [ |
200 | qr/^=/m, |
492dce8d |
201 | ], |
71130750 |
202 | }, |
a4187fdf |
203 | ); |
605fcea8 |
204 | |
eac5494b |
205 | |
71130750 |
206 | $t->dump_test( |
207 | classname => 'DBICTest::DumpMore::1', |
208 | options => { |
209 | db_schema => 'foo_schema', |
210 | qualify_objects => 1, |
211 | use_namespaces => 1 |
212 | }, |
213 | warnings => [ |
214 | qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /, |
215 | qr/Schema dump completed/, |
216 | ], |
217 | regexes => { |
218 | 'Result/Foo' => [ |
219 | qr/^\Q__PACKAGE__->table("foo_schema.foo");\E/m, |
220 | # the has_many relname should not have the schema in it! |
221 | qr/^__PACKAGE__->has_many\(\n "bars"/m, |
69219349 |
222 | ], |
71130750 |
223 | }, |
69219349 |
224 | ); |
225 | |
71130750 |
226 | $t->dump_test( |
227 | classname => 'DBICTest::DumpMore::1', |
228 | options => { |
229 | use_namespaces => 1 |
230 | }, |
231 | warnings => [ |
232 | qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /, |
233 | qr/Schema dump completed/, |
234 | ], |
235 | regexes => { |
236 | schema => [ |
237 | qr/package DBICTest::DumpMore::1;/, |
238 | qr/->load_namespaces/, |
f44ecc2f |
239 | ], |
71130750 |
240 | 'Result/Foo' => [ |
241 | qr/package DBICTest::DumpMore::1::Result::Foo;/, |
242 | qr/->set_primary_key/, |
243 | qr/1;\n$/, |
244 | ], |
245 | 'Result/Bar' => [ |
246 | qr/package DBICTest::DumpMore::1::Result::Bar;/, |
247 | qr/->set_primary_key/, |
248 | qr/1;\n$/, |
249 | ], |
250 | }, |
f44ecc2f |
251 | ); |
252 | |
eac5494b |
253 | |
71130750 |
254 | $t->dump_test( |
255 | classname => 'DBICTest::DumpMore::1', |
256 | options => { |
257 | use_namespaces => 1, |
258 | result_namespace => 'Res', |
259 | resultset_namespace => 'RSet', |
260 | default_resultset_class => 'RSetBase', |
261 | }, |
262 | warnings => [ |
263 | qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /, |
264 | qr/Schema dump completed/, |
265 | ], |
266 | regexes => { |
267 | schema => [ |
268 | qr/package DBICTest::DumpMore::1;/, |
269 | qr/->load_namespaces/, |
270 | qr/result_namespace => 'Res'/, |
271 | qr/resultset_namespace => 'RSet'/, |
272 | qr/default_resultset_class => 'RSetBase'/, |
f44ecc2f |
273 | ], |
71130750 |
274 | 'Res/Foo' => [ |
275 | qr/package DBICTest::DumpMore::1::Res::Foo;/, |
276 | qr/->set_primary_key/, |
277 | qr/1;\n$/, |
278 | ], |
279 | 'Res/Bar' => [ |
280 | qr/package DBICTest::DumpMore::1::Res::Bar;/, |
281 | qr/->set_primary_key/, |
282 | qr/1;\n$/, |
283 | ], |
284 | }, |
f44ecc2f |
285 | ); |
286 | |
eac5494b |
287 | |
71130750 |
288 | $t->dump_test( |
289 | classname => 'DBICTest::DumpMore::1', |
290 | options => { |
291 | use_namespaces => 1, |
292 | result_namespace => '+DBICTest::DumpMore::1::Res', |
293 | resultset_namespace => 'RSet', |
294 | default_resultset_class => 'RSetBase', |
295 | result_base_class => 'My::ResultBaseClass', |
296 | schema_base_class => 'My::SchemaBaseClass', |
297 | }, |
298 | warnings => [ |
299 | qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /, |
300 | qr/Schema dump completed/, |
301 | ], |
302 | regexes => { |
303 | schema => [ |
304 | qr/package DBICTest::DumpMore::1;/, |
305 | qr/->load_namespaces/, |
306 | qr/result_namespace => '\+DBICTest::DumpMore::1::Res'/, |
307 | qr/resultset_namespace => 'RSet'/, |
308 | qr/default_resultset_class => 'RSetBase'/, |
309 | qr/use base 'My::SchemaBaseClass'/, |
f44ecc2f |
310 | ], |
71130750 |
311 | 'Res/Foo' => [ |
312 | qr/package DBICTest::DumpMore::1::Res::Foo;/, |
313 | qr/use base 'My::ResultBaseClass'/, |
314 | qr/->set_primary_key/, |
315 | qr/1;\n$/, |
316 | ], |
317 | 'Res/Bar' => [ |
318 | qr/package DBICTest::DumpMore::1::Res::Bar;/, |
319 | qr/use base 'My::ResultBaseClass'/, |
320 | qr/->set_primary_key/, |
321 | qr/1;\n$/, |
322 | ], |
323 | }, |
f44ecc2f |
324 | ); |
c634fde9 |
325 | |
eac5494b |
326 | |
71130750 |
327 | $t->dump_test( |
328 | classname => 'DBICTest::DumpMore::1', |
329 | options => { |
330 | use_namespaces => 1, |
331 | result_base_class => 'My::MissingResultBaseClass', |
332 | }, |
333 | error => qr/My::MissingResultBaseClass.*is not installed/, |
8048320c |
334 | ); |
f44ecc2f |
335 | |
d27f2b7b |
336 | done_testing; |