release 0.63
[catagits/Catalyst-Model-DBIC-Schema.git] / t / 08helper.t
CommitLineData
4cbe63e7 1use strict;
2use warnings;
3
4use FindBin '$Bin';
5use lib "$Bin/lib";
6
2a969b06 7use Test::More;
4cbe63e7 8use Test::Exception;
9use Catalyst::Helper::Model::DBIC::Schema;
4cbe63e7 10use Storable 'dclone';
d71aa889 11use Data::Dumper;
632e5da3 12use Test::Requires qw(Catalyst::Helper DBIx::Class::Schema::Loader);
4cbe63e7 13
14my $helper = Catalyst::Helper->new;
15$helper->{base} = $Bin;
16my $static = 'create=static';
17my $dynamic = 'create=dynamic';
18my $sqlite = 'dbi:SQLite:myapp.db';
19my $pg = 'dbi:Pg:dbname=foo';
20my $on_connect_do = 'on_connect_do=["select 1", "select 2"]';
21my $quote_char = 'quote_char="';
22my $name_sep = 'name_sep=.';
23my $i;
24
25$i = instance(schema_class => 'ASchemaClass');
26is $i->old_schema, 1, '->load_classes detected correctly';
27
a4803ca6 28throws_ok { $i = instance(args => [$static, 'DbI:SQLite:myapp.db']) }
29 qr/case matters/i, "wrong case for 'dbi:' DSN part";
30
c34bcab6 31$i = instance(args => ['traits=Caching']);
32is_deeply $i->traits, ['Caching'], 'one trait';
33is $i->helper->{traits}, "['Caching']", 'one trait as string';
4cbe63e7 34
c34bcab6 35$i = instance(args => ['traits=Caching,Replicated']);
36is_deeply $i->traits, ['Caching', 'Replicated'], 'two traits';
37is $i->helper->{traits}, "['Caching','Replicated']", 'two traits as string';
4cbe63e7 38
39$i = instance(args => [$static]);
40is $i->create, 'static', 'create=static';
41
42$i = instance(args => [$static,
43 q{moniker_map={ authors => "AUTHORS", books => "BOOKS" }}]
44);
45is_deeply $i->loader_args->{moniker_map},
46 { authors => 'AUTHORS', books => 'BOOKS' },
47 'loader hash arg';
48is $i->helper->{loader_args}{moniker_map},
49 q{{authors => "AUTHORS",books => "BOOKS"}},
50 'loader hash arg as string';
51
52$i = instance(args => [$static, q{foo=["bar","baz"]}]);
53is_deeply $i->loader_args->{foo}, ['bar', 'baz'], 'loader array arg';
54is $i->helper->{loader_args}{foo},
55 q{["bar","baz"]},
56 'loader array arg as string';
57
58$i = instance(args => [$static, q{components=TimeStamp}]);
59is_deeply $i->components, ['InflateColumn::DateTime', 'TimeStamp'],
60 'extra component';
61is $i->helper->{loader_args}{components},
62 q{["InflateColumn::DateTime","TimeStamp"]},
63 'components as string';
64
65$i = instance(
66 schema_class => 'ASchemaClass',
67 args => [$static, q{components=TimeStamp}]
68);
69is_deeply $i->components, ['TimeStamp'],
70 'extra component with ->load_classes';
71
72$i = instance(args => [$static, q{components=TimeStamp,Foo}]);
73is_deeply $i->components, ['InflateColumn::DateTime', 'TimeStamp', 'Foo'],
74 'two extra components';
75
d71aa889 76# Different versions of perl and Data::Dumper serialise regexes differently
77my ($flagstart, $flagend, $postflag) = Dumper(qr//) =~ m{qr/(.*?)(\)?)/([a-z]*)};
4cbe63e7 78$i = instance(args => [$static, q{constraint=^(foo|bar)$}]);
79is $i->loader_args->{constraint}, qr/^(foo|bar)$/,
80 'constraint loader arg';
81is $i->helper->{loader_args}{constraint},
d71aa889 82 qq{qr/$flagstart^(foo|bar)\$$flagend/$postflag},
4cbe63e7 83 'constraint loader arg as string';
84
85$i = instance(args => [$static, q{exclude=^(foo|bar)$}]);
86is $i->loader_args->{exclude}, qr/^(foo|bar)$/,
87 'exclude loader arg';
88
5f9a34d7 89$i = instance(args => [$static, q{db_schema=foo;bar::baz/quux}]);
90is $i->loader_args->{db_schema}, q{foo;bar::baz/quux},
91 'simple value loader arg';
92
4cbe63e7 93$i = instance(args => [
94 $static, 'components=TimeStamp', $sqlite, $on_connect_do,
95 $quote_char, $name_sep
96]);
97
98is_deeply $i->components, ['InflateColumn::DateTime', 'TimeStamp'],
99 'extra component';
100
101is $i->connect_info->{dsn}, $sqlite, 'connect_info dsn';
102is $i->connect_info->{user}, '', 'sqlite omitted user';
103is $i->connect_info->{password}, '', 'sqlite omitted password';
104
105is_deeply $i->connect_info->{on_connect_do},
106 ['select 1', 'select 2'], 'connect_info data struct';
107
108is $i->helper->{connect_info}{on_connect_do},
109 q{["select 1", "select 2"]}, 'connect_info data struct as string';
110
111is $i->connect_info->{quote_char}, '"', 'connect_info quote_char';
112
113is $i->helper->{connect_info}{quote_char}, 'q{"}',
114 'connect_info quote_char as string';
115
116is $i->connect_info->{name_sep}, '.', 'connect_info name_sep';
117
118is $i->helper->{connect_info}{name_sep}, 'q{.}',
119 'connect_info name_sep as string';
120
121$i = instance(args => [
51062974 122 $static, $sqlite, 'on_connect_do=PRAGMA foreign_keys = ON'
123]);
124
125is $i->connect_info->{on_connect_do},
126 'PRAGMA foreign_keys = ON', 'on_connect_do string';
127
128is $i->helper->{connect_info}{on_connect_do},
129 'q{PRAGMA foreign_keys = ON}', 'on_connect_do string as string';
130
131$i = instance(args => [
4cbe63e7 132 $static, 'components=TimeStamp', $sqlite, '', $on_connect_do,
133 $quote_char, $name_sep
134]);
135
136is $i->connect_info->{dsn}, $sqlite, 'connect_info dsn';
137is $i->connect_info->{user}, '', 'sqlite user';
138is $i->connect_info->{password}, '', 'sqlite omitted password';
139
140$i = instance(args => [
141 $static, 'components=TimeStamp', $pg, 'user', 'pass', $on_connect_do,
142 $quote_char, $name_sep
143]);
144
145is $i->connect_info->{dsn}, $pg, 'connect_info dsn';
146is $i->connect_info->{user}, 'user', 'user';
147is $i->connect_info->{password}, 'pass', 'password';
148
149$i = instance(args => [
c34bcab6 150 $static, $pg, 'user', 'pass', 'quote_char=[]', $name_sep
151]);
152
153is_deeply $i->connect_info->{quote_char}, ['[', ']'],
154 '2 character quote_char';
155is $i->helper->{connect_info}{quote_char}, '["[","]"]',
156 '2 character quote_char as string';
157
158$i = instance(args => [
4cbe63e7 159 $static, 'components=TimeStamp', $sqlite, $on_connect_do,
160 $quote_char, $name_sep, '{ auto_savepoint => 1, AutoCommit => 0 }'
161]);
162
163is $i->connect_info->{auto_savepoint}, 1, 'connect_info arg from extra hash';
164is $i->connect_info->{AutoCommit}, 0, 'connect_info arg from extra hash';
165is $i->helper->{connect_info}{auto_savepoint}, 'q{1}',
166 'connect_info arg from extra hash as string';
167is $i->helper->{connect_info}{AutoCommit}, 'q{0}',
168 'connect_info arg from extra hash as string';
169
f1b4a8fd 170$i = instance(args => [
171 $static, 'components=TimeStamp', $sqlite, $on_connect_do,
172 $quote_char, $name_sep, 'auto_savepoint=1', 'AutoCommit=0',
173 'db_schema=myschema',
174]);
175
176is $i->loader_args->{db_schema}, 'myschema',
177 'loader arg after connect_info';
178
7dd1b1e9 179ok ((not exists $i->helper->{connect_info}{db_schema}),
180 'loader args removed from connect_info');
181
51062974 182done_testing;
183
4cbe63e7 184sub instance {
185 Catalyst::Helper::Model::DBIC::Schema->new(
186 schema_class => 'AnotherSchemaClass',
187 helper => dclone($helper),
188 args => ['create=static'],
189 @_
190 )
191}