Factor out the dumper-test machinery, separate the use_moose dump
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 26dump_use_moose.t
1 use warnings;
2 use strict;
3
4 use Test::More;
5 use DBIx::Class::Schema::Loader::Optional::Dependencies ();
6 BEGIN {
7   use DBIx::Class::Schema::Loader::Optional::Dependencies ();
8   plan skip_all => 'Tests needs ' . DBIx::Class::Schema::Loader::Optional::Dependencies->req_missing_for('use_moose')
9     unless (DBIx::Class::Schema::Loader::Optional::Dependencies->req_ok_for('use_moose'));
10 }
11
12 use lib qw(t/lib);
13 use dbixcsl_dumper_tests;
14 my $t = 'dbixcsl_dumper_tests';
15
16 $t->cleanup;
17
18 # first dump a fresh use_moose=1 schema
19 $t->dump_test(
20   classname => 'DBICTest::DumpMore::1',
21   options => {
22     use_moose => 1,
23     result_base_class => 'My::ResultBaseClass',
24     schema_base_class => 'My::SchemaBaseClass',
25   },
26   warnings => [
27     qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
28     qr/Schema dump completed/,
29   ],
30   regexes => {
31     schema => [
32       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::SchemaBaseClass';\n\n/,
33       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
34     ],
35     Foo => [
36       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
37       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
38     ],
39     Bar => [
40       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
41       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
42     ],
43   },
44 );
45
46 $t->cleanup;
47
48 # now upgrade a fresh non-moose schema to use_moose=1
49 $t->dump_test(
50   classname => 'DBICTest::DumpMore::1',
51   options => {
52     result_base_class => 'My::ResultBaseClass',
53     schema_base_class => 'My::SchemaBaseClass',
54   },
55   warnings => [
56     qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
57     qr/Schema dump completed/,
58   ],
59   regexes => {
60     schema => [
61       qr/\nuse base 'My::SchemaBaseClass';\n/,
62     ],
63     Foo => [
64       qr/\nuse base 'My::ResultBaseClass';\n/,
65     ],
66     Bar => [
67       qr/\nuse base 'My::ResultBaseClass';\n/,
68     ],
69   },
70 );
71
72 # check that changed custom content is upgraded for Moose bits
73 $t->append_to_class('DBICTest::DumpMore::1::Foo', q{# XXX This is my custom content XXX});
74
75 $t->dump_test(
76   classname => 'DBICTest::DumpMore::1',
77   options => {
78     use_moose => 1,
79     result_base_class => 'My::ResultBaseClass',
80     schema_base_class => 'My::SchemaBaseClass',
81   },
82   warnings => [
83     qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
84     qr/Schema dump completed/,
85   ],
86   regexes => {
87     schema => [
88       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::SchemaBaseClass';\n\n/,
89       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
90     ],
91     Foo => [
92       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
93       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
94     ],
95     Bar => [
96       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
97       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
98     ],
99   },
100 );
101
102 $t->cleanup;
103
104 # now add the Moose custom content to unapgraded schema, and make sure it is not repeated
105 $t->dump_test(
106   classname => 'DBICTest::DumpMore::1',
107   options => {
108     result_base_class => 'My::ResultBaseClass',
109     schema_base_class => 'My::SchemaBaseClass',
110   },
111   warnings => [
112     qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
113     qr/Schema dump completed/,
114   ],
115   regexes => {
116     schema => [
117       qr/\nuse base 'My::SchemaBaseClass';\n/,
118     ],
119     Foo => [
120       qr/\nuse base 'My::ResultBaseClass';\n/,
121     ],
122     Bar => [
123       qr/\nuse base 'My::ResultBaseClass';\n/,
124     ],
125   },
126 );
127
128 # add Moose custom content then check it is not repeated
129
130 $t->append_to_class('DBICTest::DumpMore::1::Foo', qq{__PACKAGE__->meta->make_immutable;\n1;\n});
131
132 $t->dump_test(
133   classname => 'DBICTest::DumpMore::1',
134   options => {
135     use_moose => 1,
136     result_base_class => 'My::ResultBaseClass',
137     schema_base_class => 'My::SchemaBaseClass',
138   },
139   warnings => [
140     qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
141     qr/Schema dump completed/,
142   ],
143   regexes => {
144     schema => [
145       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::SchemaBaseClass';\n\n/,
146       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
147     ],
148     Foo => [
149       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
150       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
151     ],
152     Bar => [
153       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
154       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
155     ],
156   },
157   neg_regexes => {
158     Foo => [
159       qr/\n__PACKAGE__->meta->make_immutable;\n.*\n__PACKAGE__->meta->make_immutable;/s,
160     ],
161   },
162 );
163
164 done_testing;