Commit | Line | Data |
7b1fe8c2 |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use FindBin '$Bin'; |
5 | use lib "$Bin/lib"; |
6 | |
7 | use Test::More; |
8 | use Test::Exception; |
9 | use Catalyst::Model::DBIC::Schema; |
10 | use ASchemaClass; |
11 | |
12 | # execise the connect_info coercion |
13 | |
14 | my @tests = ( |
15 | ['dbi:SQLite:foo.db', '', ''], |
16 | { dsn => 'dbi:SQLite:foo.db', user => '', password => '' }, |
17 | |
18 | ['dbi:SQLite:foo.db', ''], |
19 | { dsn => 'dbi:SQLite:foo.db', user => '', password => '' }, |
20 | |
21 | ['dbi:SQLite:foo.db'], |
22 | { dsn => 'dbi:SQLite:foo.db', user => '', password => '' }, |
23 | |
24 | 'dbi:SQLite:foo.db', |
25 | { dsn => 'dbi:SQLite:foo.db', user => '', password => '' }, |
26 | |
27 | ['dbi:Pg:dbname=foo', 'user', 'pass', |
28 | { pg_enable_utf8 => 1, auto_savepoint => 1 }], |
29 | { dsn => 'dbi:Pg:dbname=foo', user => 'user', password => 'pass', |
30 | pg_enable_utf8 => 1, auto_savepoint => 1 }, |
31 | |
32 | ['dbi:Pg:dbname=foo', 'user', 'pass', |
33 | { pg_enable_utf8 => 1 }, { auto_savepoint => 1 }], |
34 | { dsn => 'dbi:Pg:dbname=foo', user => 'user', password => 'pass', |
35 | pg_enable_utf8 => 1, auto_savepoint => 1 }, |
36 | |
37 | [ { dsn => 'dbi:Pg:dbname=foo', user => 'user', password => 'pass', |
38 | pg_enable_utf8 => 1, auto_savepoint => 1 } ], |
39 | { dsn => 'dbi:Pg:dbname=foo', user => 'user', password => 'pass', |
40 | pg_enable_utf8 => 1, auto_savepoint => 1 }, |
41 | ); |
42 | |
43 | my @invalid = ( |
44 | { foo => 'bar' }, |
45 | [ { foo => 'bar' } ], |
46 | ['dbi:Pg:dbname=foo', 'user', 'pass', |
47 | { pg_enable_utf8 => 1 }, { AutoCommit => 1 }, { auto_savepoint => 1 }], |
48 | ); |
49 | |
50 | plan tests => @tests / 2 + @invalid + 1; |
51 | |
52 | # ignore redefined warnings, and uninitialized warnings from old |
53 | # ::Storage::DBI::Replicated |
54 | local $SIG{__WARN__} = sub { |
55 | $_[0] !~ /(?:redefined|uninitialized)/i && warn @_ |
56 | }; |
57 | |
58 | for (my $i = 0; $i < @tests; $i += 2) { |
59 | my $m = instance( |
60 | connect_info => $tests[$i] |
61 | ); |
62 | |
63 | is_deeply $m->connect_info, $tests[$i+1], |
64 | 'connect_info coerced correctly'; |
65 | } |
66 | |
67 | throws_ok { instance(connect_info => $_) } qr/valid connect_info/i, |
68 | 'invalid connect_info throws exception' |
69 | for @invalid; |
70 | |
71 | # try as ConnectInfos (e.g.: replicants) |
72 | my @replicants = map $tests[$_], grep $_ % 2 == 0, 0..$#tests; |
73 | |
74 | { |
75 | package TryConnectInfos; |
76 | |
77 | use Moose; |
78 | use Catalyst::Model::DBIC::Schema::Types 'ConnectInfos'; |
79 | |
80 | has replicants => (is => 'ro', isa => ConnectInfos, coerce => 1); |
81 | } |
82 | |
83 | my $m = TryConnectInfos->new( |
84 | replicants => \@replicants |
85 | ); |
86 | |
87 | is_deeply $m->replicants, [ |
88 | map $tests[$_], grep $_ % 2, 0 .. $#tests |
89 | ], 'replicant connect_infos coerced correctly'; |
90 | |
91 | sub instance { |
92 | Catalyst::Model::DBIC::Schema->new({ |
93 | schema_class => 'ASchemaClass', |
94 | @_ |
95 | }) |
96 | } |