Understand Postgres enumerated types
[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     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 MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::SchemaBaseClass';\n\n/,
90       qr/\n__PACKAGE__->meta->make_immutable;\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     ],
96     Bar => [
97       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
98       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
99     ],
100   },
101 );
102
103 $t->cleanup;
104
105 # check with a fresh non-moose schema that Moose custom content added to unapgraded schema, and make sure it is not repeated
106 $t->dump_test(
107   classname => 'DBICTest::DumpMore::1',
108   options => {
109     result_base_class => 'My::ResultBaseClass',
110     schema_base_class => 'My::SchemaBaseClass',
111   },
112   warnings => [
113     qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
114     qr/Schema dump completed/,
115   ],
116   regexes => {
117     schema => [
118       qr/\nuse base 'My::SchemaBaseClass';\n/,
119     ],
120     Foo => [
121       qr/\nuse base 'My::ResultBaseClass';\n/,
122     ],
123     Bar => [
124       qr/\nuse base 'My::ResultBaseClass';\n/,
125     ],
126   },
127 );
128
129 # add Moose custom content then check it is not repeated
130 # after that regen again *without* the use_moose flag, make
131 # sure moose isn't stripped away
132 $t->append_to_class('DBICTest::DumpMore::1::Foo', qq{__PACKAGE__->meta->make_immutable;\n1;\n});
133
134 for my $supply_use_moose (1, 0) {
135   $t->dump_test(
136     classname => 'DBICTest::DumpMore::1',
137     options => {
138       $supply_use_moose ? (use_moose => 1) : (),
139       result_base_class => 'My::ResultBaseClass',
140       schema_base_class => 'My::SchemaBaseClass',
141     },
142     warnings => [
143       qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
144       qr/Schema dump completed/,
145     ],
146     regexes => {
147       schema => [
148         qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::SchemaBaseClass';\n\n/,
149         qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
150       ],
151       Foo => [
152         qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
153         qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
154       ],
155       Bar => [
156         qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
157         qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
158       ],
159     },
160     neg_regexes => {
161       Foo => [
162         qr/\n__PACKAGE__->meta->make_immutable;\n.*\n__PACKAGE__->meta->make_immutable;/s,
163       ],
164     },
165   );
166 }
167
168 # check that a moose schema can *not* be downgraded
169
170 $t->dump_test (
171   classname => 'DBICTest::DumpMore::1',
172   options => {
173     use_moose => 0,
174     result_base_class => 'My::ResultBaseClass',
175     schema_base_class => 'My::SchemaBaseClass',
176   },
177   warnings => [
178     qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
179   ],
180   error => qr/\QIt is not possible to "downgrade" a schema that was loaded with use_moose => 1\E/,
181 );
182
183 done_testing;