Remove requirement on Catalyst::Helper, and instead skip the test that fails
[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';
2a969b06 11eval "use Catalyst::Helper";
12plan skip_all => 'Catalyst::Helper required for tests' if $@;
13plan tests => 40;
4cbe63e7 14
15my $helper = Catalyst::Helper->new;
16$helper->{base} = $Bin;
17my $static = 'create=static';
18my $dynamic = 'create=dynamic';
19my $sqlite = 'dbi:SQLite:myapp.db';
20my $pg = 'dbi:Pg:dbname=foo';
21my $on_connect_do = 'on_connect_do=["select 1", "select 2"]';
22my $quote_char = 'quote_char="';
23my $name_sep = 'name_sep=.';
24my $i;
25
26$i = instance(schema_class => 'ASchemaClass');
27is $i->old_schema, 1, '->load_classes detected correctly';
28
c34bcab6 29$i = instance(args => ['traits=Caching']);
30is_deeply $i->traits, ['Caching'], 'one trait';
31is $i->helper->{traits}, "['Caching']", 'one trait as string';
4cbe63e7 32
c34bcab6 33$i = instance(args => ['traits=Caching,Replicated']);
34is_deeply $i->traits, ['Caching', 'Replicated'], 'two traits';
35is $i->helper->{traits}, "['Caching','Replicated']", 'two traits as string';
4cbe63e7 36
37$i = instance(args => [$static]);
38is $i->create, 'static', 'create=static';
39
40$i = instance(args => [$static,
41 q{moniker_map={ authors => "AUTHORS", books => "BOOKS" }}]
42);
43is_deeply $i->loader_args->{moniker_map},
44 { authors => 'AUTHORS', books => 'BOOKS' },
45 'loader hash arg';
46is $i->helper->{loader_args}{moniker_map},
47 q{{authors => "AUTHORS",books => "BOOKS"}},
48 'loader hash arg as string';
49
50$i = instance(args => [$static, q{foo=["bar","baz"]}]);
51is_deeply $i->loader_args->{foo}, ['bar', 'baz'], 'loader array arg';
52is $i->helper->{loader_args}{foo},
53 q{["bar","baz"]},
54 'loader array arg as string';
55
56$i = instance(args => [$static, q{components=TimeStamp}]);
57is_deeply $i->components, ['InflateColumn::DateTime', 'TimeStamp'],
58 'extra component';
59is $i->helper->{loader_args}{components},
60 q{["InflateColumn::DateTime","TimeStamp"]},
61 'components as string';
62
63$i = instance(
64 schema_class => 'ASchemaClass',
65 args => [$static, q{components=TimeStamp}]
66);
67is_deeply $i->components, ['TimeStamp'],
68 'extra component with ->load_classes';
69
70$i = instance(args => [$static, q{components=TimeStamp,Foo}]);
71is_deeply $i->components, ['InflateColumn::DateTime', 'TimeStamp', 'Foo'],
72 'two extra components';
73
74$i = instance(args => [$static, q{constraint=^(foo|bar)$}]);
75is $i->loader_args->{constraint}, qr/^(foo|bar)$/,
76 'constraint loader arg';
77is $i->helper->{loader_args}{constraint},
78 q{qr/(?-xism:^(foo|bar)$)/},
79 'constraint loader arg as string';
80
81$i = instance(args => [$static, q{exclude=^(foo|bar)$}]);
82is $i->loader_args->{exclude}, qr/^(foo|bar)$/,
83 'exclude loader arg';
84
5f9a34d7 85$i = instance(args => [$static, q{db_schema=foo;bar::baz/quux}]);
86is $i->loader_args->{db_schema}, q{foo;bar::baz/quux},
87 'simple value loader arg';
88
4cbe63e7 89$i = instance(args => [
90 $static, 'components=TimeStamp', $sqlite, $on_connect_do,
91 $quote_char, $name_sep
92]);
93
94is_deeply $i->components, ['InflateColumn::DateTime', 'TimeStamp'],
95 'extra component';
96
97is $i->connect_info->{dsn}, $sqlite, 'connect_info dsn';
98is $i->connect_info->{user}, '', 'sqlite omitted user';
99is $i->connect_info->{password}, '', 'sqlite omitted password';
100
101is_deeply $i->connect_info->{on_connect_do},
102 ['select 1', 'select 2'], 'connect_info data struct';
103
104is $i->helper->{connect_info}{on_connect_do},
105 q{["select 1", "select 2"]}, 'connect_info data struct as string';
106
107is $i->connect_info->{quote_char}, '"', 'connect_info quote_char';
108
109is $i->helper->{connect_info}{quote_char}, 'q{"}',
110 'connect_info quote_char as string';
111
112is $i->connect_info->{name_sep}, '.', 'connect_info name_sep';
113
114is $i->helper->{connect_info}{name_sep}, 'q{.}',
115 'connect_info name_sep as string';
116
117$i = instance(args => [
118 $static, 'components=TimeStamp', $sqlite, '', $on_connect_do,
119 $quote_char, $name_sep
120]);
121
122is $i->connect_info->{dsn}, $sqlite, 'connect_info dsn';
123is $i->connect_info->{user}, '', 'sqlite user';
124is $i->connect_info->{password}, '', 'sqlite omitted password';
125
126$i = instance(args => [
127 $static, 'components=TimeStamp', $pg, 'user', 'pass', $on_connect_do,
128 $quote_char, $name_sep
129]);
130
131is $i->connect_info->{dsn}, $pg, 'connect_info dsn';
132is $i->connect_info->{user}, 'user', 'user';
133is $i->connect_info->{password}, 'pass', 'password';
134
135$i = instance(args => [
c34bcab6 136 $static, $pg, 'user', 'pass', 'quote_char=[]', $name_sep
137]);
138
139is_deeply $i->connect_info->{quote_char}, ['[', ']'],
140 '2 character quote_char';
141is $i->helper->{connect_info}{quote_char}, '["[","]"]',
142 '2 character quote_char as string';
143
144$i = instance(args => [
4cbe63e7 145 $static, 'components=TimeStamp', $sqlite, $on_connect_do,
146 $quote_char, $name_sep, '{ auto_savepoint => 1, AutoCommit => 0 }'
147]);
148
149is $i->connect_info->{auto_savepoint}, 1, 'connect_info arg from extra hash';
150is $i->connect_info->{AutoCommit}, 0, 'connect_info arg from extra hash';
151is $i->helper->{connect_info}{auto_savepoint}, 'q{1}',
152 'connect_info arg from extra hash as string';
153is $i->helper->{connect_info}{AutoCommit}, 'q{0}',
154 'connect_info arg from extra hash as string';
155
156sub instance {
157 Catalyst::Helper::Model::DBIC::Schema->new(
158 schema_class => 'AnotherSchemaClass',
159 helper => dclone($helper),
160 args => ['create=static'],
161 @_
162 )
163}