Fix RT 47449 by adding missing dep on Catalyst::Helper for tests.
[catagits/Catalyst-Model-DBIC-Schema.git] / t / 08helper.t
CommitLineData
4cbe63e7 1use strict;
2use warnings;
3
4use FindBin '$Bin';
5use lib "$Bin/lib";
6
c34bcab6 7use Test::More tests => 40;
4cbe63e7 8use Test::Exception;
9use Catalyst::Helper::Model::DBIC::Schema;
10use Catalyst::Helper;
11use Storable 'dclone';
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
c34bcab6 27$i = instance(args => ['traits=Caching']);
28is_deeply $i->traits, ['Caching'], 'one trait';
29is $i->helper->{traits}, "['Caching']", 'one trait as string';
4cbe63e7 30
c34bcab6 31$i = instance(args => ['traits=Caching,Replicated']);
32is_deeply $i->traits, ['Caching', 'Replicated'], 'two traits';
33is $i->helper->{traits}, "['Caching','Replicated']", 'two traits as string';
4cbe63e7 34
35$i = instance(args => [$static]);
36is $i->create, 'static', 'create=static';
37
38$i = instance(args => [$static,
39 q{moniker_map={ authors => "AUTHORS", books => "BOOKS" }}]
40);
41is_deeply $i->loader_args->{moniker_map},
42 { authors => 'AUTHORS', books => 'BOOKS' },
43 'loader hash arg';
44is $i->helper->{loader_args}{moniker_map},
45 q{{authors => "AUTHORS",books => "BOOKS"}},
46 'loader hash arg as string';
47
48$i = instance(args => [$static, q{foo=["bar","baz"]}]);
49is_deeply $i->loader_args->{foo}, ['bar', 'baz'], 'loader array arg';
50is $i->helper->{loader_args}{foo},
51 q{["bar","baz"]},
52 'loader array arg as string';
53
54$i = instance(args => [$static, q{components=TimeStamp}]);
55is_deeply $i->components, ['InflateColumn::DateTime', 'TimeStamp'],
56 'extra component';
57is $i->helper->{loader_args}{components},
58 q{["InflateColumn::DateTime","TimeStamp"]},
59 'components as string';
60
61$i = instance(
62 schema_class => 'ASchemaClass',
63 args => [$static, q{components=TimeStamp}]
64);
65is_deeply $i->components, ['TimeStamp'],
66 'extra component with ->load_classes';
67
68$i = instance(args => [$static, q{components=TimeStamp,Foo}]);
69is_deeply $i->components, ['InflateColumn::DateTime', 'TimeStamp', 'Foo'],
70 'two extra components';
71
72$i = instance(args => [$static, q{constraint=^(foo|bar)$}]);
73is $i->loader_args->{constraint}, qr/^(foo|bar)$/,
74 'constraint loader arg';
75is $i->helper->{loader_args}{constraint},
76 q{qr/(?-xism:^(foo|bar)$)/},
77 'constraint loader arg as string';
78
79$i = instance(args => [$static, q{exclude=^(foo|bar)$}]);
80is $i->loader_args->{exclude}, qr/^(foo|bar)$/,
81 'exclude loader arg';
82
5f9a34d7 83$i = instance(args => [$static, q{db_schema=foo;bar::baz/quux}]);
84is $i->loader_args->{db_schema}, q{foo;bar::baz/quux},
85 'simple value loader arg';
86
4cbe63e7 87$i = instance(args => [
88 $static, 'components=TimeStamp', $sqlite, $on_connect_do,
89 $quote_char, $name_sep
90]);
91
92is_deeply $i->components, ['InflateColumn::DateTime', 'TimeStamp'],
93 'extra component';
94
95is $i->connect_info->{dsn}, $sqlite, 'connect_info dsn';
96is $i->connect_info->{user}, '', 'sqlite omitted user';
97is $i->connect_info->{password}, '', 'sqlite omitted password';
98
99is_deeply $i->connect_info->{on_connect_do},
100 ['select 1', 'select 2'], 'connect_info data struct';
101
102is $i->helper->{connect_info}{on_connect_do},
103 q{["select 1", "select 2"]}, 'connect_info data struct as string';
104
105is $i->connect_info->{quote_char}, '"', 'connect_info quote_char';
106
107is $i->helper->{connect_info}{quote_char}, 'q{"}',
108 'connect_info quote_char as string';
109
110is $i->connect_info->{name_sep}, '.', 'connect_info name_sep';
111
112is $i->helper->{connect_info}{name_sep}, 'q{.}',
113 'connect_info name_sep as string';
114
115$i = instance(args => [
116 $static, 'components=TimeStamp', $sqlite, '', $on_connect_do,
117 $quote_char, $name_sep
118]);
119
120is $i->connect_info->{dsn}, $sqlite, 'connect_info dsn';
121is $i->connect_info->{user}, '', 'sqlite user';
122is $i->connect_info->{password}, '', 'sqlite omitted password';
123
124$i = instance(args => [
125 $static, 'components=TimeStamp', $pg, 'user', 'pass', $on_connect_do,
126 $quote_char, $name_sep
127]);
128
129is $i->connect_info->{dsn}, $pg, 'connect_info dsn';
130is $i->connect_info->{user}, 'user', 'user';
131is $i->connect_info->{password}, 'pass', 'password';
132
133$i = instance(args => [
c34bcab6 134 $static, $pg, 'user', 'pass', 'quote_char=[]', $name_sep
135]);
136
137is_deeply $i->connect_info->{quote_char}, ['[', ']'],
138 '2 character quote_char';
139is $i->helper->{connect_info}{quote_char}, '["[","]"]',
140 '2 character quote_char as string';
141
142$i = instance(args => [
4cbe63e7 143 $static, 'components=TimeStamp', $sqlite, $on_connect_do,
144 $quote_char, $name_sep, '{ auto_savepoint => 1, AutoCommit => 0 }'
145]);
146
147is $i->connect_info->{auto_savepoint}, 1, 'connect_info arg from extra hash';
148is $i->connect_info->{AutoCommit}, 0, 'connect_info arg from extra hash';
149is $i->helper->{connect_info}{auto_savepoint}, 'q{1}',
150 'connect_info arg from extra hash as string';
151is $i->helper->{connect_info}{AutoCommit}, 'q{0}',
152 'connect_info arg from extra hash as string';
153
154sub instance {
155 Catalyst::Helper::Model::DBIC::Schema->new(
156 schema_class => 'AnotherSchemaClass',
157 helper => dclone($helper),
158 args => ['create=static'],
159 @_
160 )
161}