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