13104551ebb8c0689b04b1619c2f0ce5f6cf0842
[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 # after that regen again *without* the use_moose flag, make
130 # sure moose isn't stripped away
131 $t->append_to_class('DBICTest::DumpMore::1::Foo', qq{__PACKAGE__->meta->make_immutable;\n1;\n});
132
133 for my $supply_use_moose (1, 0) {
134   $t->dump_test(
135     classname => 'DBICTest::DumpMore::1',
136     options => {
137       $supply_use_moose ? (use_moose => 1) : (),
138       result_base_class => 'My::ResultBaseClass',
139       schema_base_class => 'My::SchemaBaseClass',
140     },
141     warnings => [
142       qr/Dumping manual schema for DBICTest::DumpMore::1 to directory /,
143       qr/Schema dump completed/,
144     ],
145     regexes => {
146       schema => [
147         qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::SchemaBaseClass';\n\n/,
148         qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
149       ],
150       Foo => [
151         qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
152         qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
153       ],
154       Bar => [
155         qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
156         qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
157       ],
158     },
159     neg_regexes => {
160       Foo => [
161         qr/\n__PACKAGE__->meta->make_immutable;\n.*\n__PACKAGE__->meta->make_immutable;/s,
162       ],
163     },
164   );
165 }
166
167 done_testing;