0e0ed70e6264685f29de6d7e3573f2ae408b7341
[catagits/Catalyst-Model-DBIC-Schema.git] / t / 07connect_info.t
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 }