test for connecting through schema_base_class
[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     result_roles => ['TestRole', 'TestRole2'],
26   },
27   regexes => {
28     schema => [
29       qr/\nuse Moose;\nuse namespace::autoclean;\nextends 'My::SchemaBaseClass';\n\n/,
30       qr/\n__PACKAGE__->meta->make_immutable\(inline_constructor => 0\);\n1;(?!\n1;\n)\n.*/,
31     ],
32     Foo => [
33       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
34       qr/=head1 L<Moose> ROLES APPLIED\n\n=over 4\n\n=item \* L<TestRole>\n\n=item \* L<TestRole2>\n\n=back\n\n=cut\n\n/,
35       qr/\nwith 'TestRole', 'TestRole2';\n\n/,
36       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
37     ],
38     Bar => [
39       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
40       qr/=head1 L<Moose> ROLES APPLIED\n\n=over 4\n\n=item \* L<TestRole>\n\n=item \* L<TestRole2>\n\n=back\n\n=cut\n\n/,
41       qr/\nwith 'TestRole', 'TestRole2';\n\n/,
42       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
43     ],
44   },
45 );
46
47 $t->cleanup;
48
49 # now upgrade a fresh non-moose schema to use_moose=1
50 $t->dump_test(
51   classname => 'DBICTest::DumpMore::1',
52   options => {
53     use_moose => 0,
54     result_base_class => 'My::ResultBaseClass',
55     schema_base_class => 'My::SchemaBaseClass',
56   },
57   regexes => {
58     schema => [
59       qr/\nuse base 'My::SchemaBaseClass';\n/,
60     ],
61     Foo => [
62       qr/\nuse base 'My::ResultBaseClass';\n/,
63     ],
64     Bar => [
65       qr/\nuse base 'My::ResultBaseClass';\n/,
66     ],
67   },
68 );
69
70 # check that changed custom content is upgraded for Moose bits
71 $t->append_to_class('DBICTest::DumpMore::1::Foo', q{# XXX This is my custom content XXX});
72
73 $t->dump_test(
74   classname => 'DBICTest::DumpMore::1',
75   options => {
76     use_moose => 1,
77     result_base_class => 'My::ResultBaseClass',
78     schema_base_class => 'My::SchemaBaseClass',
79   },
80   regexes => {
81     schema => [
82       qr/\nuse Moose;\nuse namespace::autoclean;\nextends 'My::SchemaBaseClass';\n\n/,
83       qr/\n__PACKAGE__->meta->make_immutable\(inline_constructor => 0\);\n1;(?!\n1;\n)\n.*/,
84     ],
85     Foo => [
86       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
87       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
88       qr/# XXX This is my custom content XXX/,
89     ],
90     Bar => [
91       qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
92       qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
93     ],
94   },
95 );
96
97 $t->cleanup;
98
99 # check with a fresh non-moose schema that Moose custom content added to a use_moose=0 schema is not repeated
100 $t->dump_test(
101   classname => 'DBICTest::DumpMore::1',
102   options => {
103     result_base_class => 'My::ResultBaseClass',
104     schema_base_class => 'My::SchemaBaseClass',
105   },
106   regexes => {
107     schema => [
108       qr/\nuse base 'My::SchemaBaseClass';\n/,
109     ],
110     Foo => [
111       qr/\nuse base 'My::ResultBaseClass';\n/,
112     ],
113     Bar => [
114       qr/\nuse base 'My::ResultBaseClass';\n/,
115     ],
116   },
117 );
118
119 # add Moose custom content then check it is not repeated
120 # after that regen again *without* the use_moose flag, make
121 # sure moose isn't stripped away
122 $t->append_to_class('DBICTest::DumpMore::1::Foo', qq{use Moose;\n__PACKAGE__->meta->make_immutable;\n1;\n});
123
124 for my $supply_use_moose (1, 0) {
125   $t->dump_test(
126     classname => 'DBICTest::DumpMore::1',
127     options => {
128       $supply_use_moose ? (use_moose => 1) : (),
129       result_base_class => 'My::ResultBaseClass',
130       schema_base_class => 'My::SchemaBaseClass',
131     },
132     regexes => {
133       schema => [
134         qr/\nuse Moose;\nuse namespace::autoclean;\nextends 'My::SchemaBaseClass';\n\n/,
135         qr/\n__PACKAGE__->meta->make_immutable\(inline_constructor => 0\);\n1;(?!\n1;\n)\n.*/,
136       ],
137       Foo => [
138         qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
139         qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
140       ],
141       Bar => [
142         qr/\nuse Moose;\nuse MooseX::NonMoose;\nuse namespace::autoclean;\nextends 'My::ResultBaseClass';\n\n/,
143         qr/\n__PACKAGE__->meta->make_immutable;\n1;(?!\n1;\n)\n.*/,
144       ],
145     },
146     neg_regexes => {
147       Foo => [
148 #        qr/\nuse Moose;\n.*\nuse Moose;/s, # TODO
149         qr/\n__PACKAGE__->meta->make_immutable;\n.*\n__PACKAGE__->meta->make_immutable;/s,
150       ],
151     },
152   );
153 }
154
155 # check that a moose schema can *not* be downgraded
156
157 $t->dump_test (
158   classname => 'DBICTest::DumpMore::1',
159   options => {
160     use_moose => 0,
161     result_base_class => 'My::ResultBaseClass',
162     schema_base_class => 'My::SchemaBaseClass',
163   },
164   error => qr/\QIt is not possible to "downgrade" a schema that was loaded with use_moose => 1\E/,
165 );
166
167 done_testing;