DBIC::Schema - add tests for helper
[catagits/Catalyst-Model-DBIC-Schema.git] / t / 08helper.t
1 use strict;
2 use warnings;
3
4 use FindBin '$Bin';
5 use lib "$Bin/lib";
6
7 use Test::More tests => 37;
8 use Test::Exception;
9 use Catalyst::Helper::Model::DBIC::Schema;
10 use Catalyst::Helper;
11 use Storable 'dclone';
12
13 my $helper      = Catalyst::Helper->new;
14 $helper->{base} = $Bin;
15 my $static      = 'create=static';
16 my $dynamic     = 'create=dynamic';
17 my $sqlite      = 'dbi:SQLite:myapp.db';
18 my $pg          = 'dbi:Pg:dbname=foo';
19 my $on_connect_do = 'on_connect_do=["select 1", "select 2"]';
20 my $quote_char  = 'quote_char="';
21 my $name_sep    = 'name_sep=.';
22 my $i;
23
24 $i = instance(schema_class => 'ASchemaClass');
25 is $i->old_schema, 1, '->load_classes detected correctly';
26
27 $i = instance(args => ['roles=Caching']);
28 is_deeply $i->roles, ['Caching'], 'one role';
29 is $i->helper->{roles}, "['Caching']", 'one role as string';
30
31 $i = instance(args => ['roles=Caching,Replicated']);
32 is_deeply $i->roles, ['Caching', 'Replicated'], 'two roles';
33 is $i->helper->{roles}, "['Caching','Replicated']", 'two roles as string';
34
35 $i = instance(args => [$static]);
36 is $i->create, 'static', 'create=static';
37
38 $i = instance(args => [$static,
39     q{moniker_map={ authors => "AUTHORS", books => "BOOKS" }}]
40 );
41 is_deeply $i->loader_args->{moniker_map},
42     { authors => 'AUTHORS', books => 'BOOKS' },
43     'loader hash arg';
44 is $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"]}]);
49 is_deeply $i->loader_args->{foo}, ['bar', 'baz'], 'loader array arg';
50 is $i->helper->{loader_args}{foo},
51     q{["bar","baz"]},
52     'loader array arg as string';
53
54 $i = instance(args => [$static, q{components=TimeStamp}]);
55 is_deeply $i->components, ['InflateColumn::DateTime', 'TimeStamp'],
56     'extra component';
57 is $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 );
65 is_deeply $i->components, ['TimeStamp'],
66     'extra component with ->load_classes';
67
68 $i = instance(args => [$static, q{components=TimeStamp,Foo}]);
69 is_deeply $i->components, ['InflateColumn::DateTime', 'TimeStamp', 'Foo'],
70     'two extra components';
71
72 $i = instance(args => [$static, q{constraint=^(foo|bar)$}]);
73 is $i->loader_args->{constraint}, qr/^(foo|bar)$/,
74     'constraint loader arg';
75 is $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)$}]);
80 is $i->loader_args->{exclude}, qr/^(foo|bar)$/,
81     'exclude loader arg';
82
83 $i = instance(args => [
84     $static, 'components=TimeStamp', $sqlite, $on_connect_do,
85     $quote_char, $name_sep
86 ]);
87
88 is_deeply $i->components, ['InflateColumn::DateTime', 'TimeStamp'],
89     'extra component';
90
91 is $i->connect_info->{dsn}, $sqlite, 'connect_info dsn';
92 is $i->connect_info->{user}, '', 'sqlite omitted user';
93 is $i->connect_info->{password}, '', 'sqlite omitted password';
94
95 is_deeply $i->connect_info->{on_connect_do},
96     ['select 1', 'select 2'], 'connect_info data struct';
97
98 is $i->helper->{connect_info}{on_connect_do},
99     q{["select 1", "select 2"]}, 'connect_info data struct as string';
100
101 is $i->connect_info->{quote_char}, '"', 'connect_info quote_char';
102
103 is $i->helper->{connect_info}{quote_char}, 'q{"}',
104     'connect_info quote_char as string';
105
106 is $i->connect_info->{name_sep}, '.', 'connect_info name_sep';
107
108 is $i->helper->{connect_info}{name_sep}, 'q{.}',
109     'connect_info name_sep as string';
110
111 $i = instance(args => [
112     $static, 'components=TimeStamp', $sqlite, '', $on_connect_do,
113     $quote_char, $name_sep
114 ]);
115
116 is $i->connect_info->{dsn}, $sqlite, 'connect_info dsn';
117 is $i->connect_info->{user}, '', 'sqlite user';
118 is $i->connect_info->{password}, '', 'sqlite omitted password';
119
120 $i = instance(args => [
121     $static, 'components=TimeStamp', $pg, 'user', 'pass', $on_connect_do,
122     $quote_char, $name_sep
123 ]);
124
125 is $i->connect_info->{dsn}, $pg, 'connect_info dsn';
126 is $i->connect_info->{user}, 'user', 'user';
127 is $i->connect_info->{password}, 'pass', 'password';
128
129 $i = instance(args => [
130     $static, 'components=TimeStamp', $sqlite, $on_connect_do,
131     $quote_char, $name_sep, '{ auto_savepoint => 1, AutoCommit => 0 }'
132 ]);
133
134 is $i->connect_info->{auto_savepoint}, 1, 'connect_info arg from extra hash';
135 is $i->connect_info->{AutoCommit}, 0, 'connect_info arg from extra hash';
136 is $i->helper->{connect_info}{auto_savepoint}, 'q{1}',
137     'connect_info arg from extra hash as string';
138 is $i->helper->{connect_info}{AutoCommit}, 'q{0}',
139     'connect_info arg from extra hash as string';
140
141 sub instance {
142     Catalyst::Helper::Model::DBIC::Schema->new(
143         schema_class => 'AnotherSchemaClass',
144         helper => dclone($helper),
145         args => ['create=static'],
146         @_
147     )
148 }