remove MooseX::NonMoose from Schema files under use_moose=1
[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 namespace::autoclean;\nextends 'My::SchemaBaseClass';\n\n/,
33       qr/\n__PACKAGE__->meta->make_immutable\(inline_constructor => 0\);\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     use_moose => 0,
53     result_base_class => 'My::ResultBaseClass',
54     schema_base_class => 'My::SchemaBaseClass',
55   },
56   warnings => [
57     qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
58     qr/Schema dump completed/,
59   ],
60   regexes => {
61     schema => [
62       qr/\nuse base 'My::SchemaBaseClass';\n/,
63     ],
64     Foo => [
65       qr/\nuse base 'My::ResultBaseClass';\n/,
66     ],
67     Bar => [
68       qr/\nuse base 'My::ResultBaseClass';\n/,
69     ],
70   },
71 );
72
73 # check that changed custom content is upgraded for Moose bits
74 $t->append_to_class('DBICTest::DumpMore::1::Foo', q{# XXX This is my custom content XXX});
75
76 $t->dump_test(
77   classname => 'DBICTest::DumpMore::1',
78   options => {
79     use_moose => 1,
80     result_base_class => 'My::ResultBaseClass',
81     schema_base_class => 'My::SchemaBaseClass',
82   },
83   warnings => [
84     qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
85     qr/Schema dump completed/,
86   ],
87   regexes => {
88     schema => [
89       qr/\nuse Moose;\nuse namespace::autoclean;\nextends 'My::SchemaBaseClass';\n\n/,
90       qr/\n__PACKAGE__->meta->make_immutable\(inline_constructor => 0\);\n1;(?!\n1;\n)\n.*/,
91     ],
92     Foo => [
93       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
94       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
95       qr/# XXX This is my custom content XXX/,
96     ],
97     Bar => [
98       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
99       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
100     ],
101   },
102 );
103
104 $t->cleanup;
105
106 # check with a fresh non-moose schema that Moose custom content added to a use_moose=0 schema is not repeated
107 $t->dump_test(
108   classname => 'DBICTest::DumpMore::1',
109   options => {
110     result_base_class => 'My::ResultBaseClass',
111     schema_base_class => 'My::SchemaBaseClass',
112   },
113   warnings => [
114     qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
115     qr/Schema dump completed/,
116   ],
117   regexes => {
118     schema => [
119       qr/\nuse base 'My::SchemaBaseClass';\n/,
120     ],
121     Foo => [
122       qr/\nuse base 'My::ResultBaseClass';\n/,
123     ],
124     Bar => [
125       qr/\nuse base 'My::ResultBaseClass';\n/,
126     ],
127   },
128 );
129
130 # add Moose custom content then check it is not repeated
131 # after that regen again *without* the use_moose flag, make
132 # sure moose isn't stripped away
133 $t->append_to_class('DBICTest::DumpMore::1::Foo', qq{use Moose;\n__PACKAGE__->meta->make_immutable;\n1;\n});
134
135 for my $supply_use_moose (1, 0) {
136   $t->dump_test(
137     classname => 'DBICTest::DumpMore::1',
138     options => {
139       $supply_use_moose ? (use_moose => 1) : (),
140       result_base_class => 'My::ResultBaseClass',
141       schema_base_class => 'My::SchemaBaseClass',
142     },
143     warnings => [
144       qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
145       qr/Schema dump completed/,
146     ],
147     regexes => {
148       schema => [
149         qr/\nuse Moose;\nuse namespace::autoclean;\nextends 'My::SchemaBaseClass';\n\n/,
150         qr/\n__PACKAGE__->meta->make_immutable\(inline_constructor => 0\);\n1;(?!\n1;\n)\n.*/,
151       ],
152       Foo => [
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       Bar => [
157         qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
158         qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
159       ],
160     },
161     neg_regexes => {
162       Foo => [
163 #        qr/\nuse Moose;\n.*\nuse Moose;/s, # TODO
164         qr/\n__PACKAGE__->meta->make_immutable;\n.*\n__PACKAGE__->meta->make_immutable;/s,
165       ],
166     },
167   );
168 }
169
170 # check that a moose schema can *not* be downgraded
171
172 $t->dump_test (
173   classname => 'DBICTest::DumpMore::1',
174   options => {
175     use_moose => 0,
176     result_base_class => 'My::ResultBaseClass',
177     schema_base_class => 'My::SchemaBaseClass',
178   },
179   warnings => [
180     qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
181   ],
182   error => qr/\QIt is not possible to "downgrade" a schema that was loaded with use_moose => 1\E/,
183 );
184
185 done_testing;