dbic helper - minor fixes for simple value detection
[catagits/Catalyst-Model-DBIC-Schema.git] / t / 07connect_info.t
CommitLineData
7b1fe8c2 1use strict;
2use warnings;
3
4use FindBin '$Bin';
5use lib "$Bin/lib";
6
7use Test::More;
8use Test::Exception;
9use Catalyst::Model::DBIC::Schema;
10use ASchemaClass;
11
12# execise the connect_info coercion
13
14my @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
43my @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
50plan tests => @tests / 2 + @invalid + 1;
51
52# ignore redefined warnings, and uninitialized warnings from old
53# ::Storage::DBI::Replicated
54local $SIG{__WARN__} = sub {
55 $_[0] !~ /(?:redefined|uninitialized)/i && warn @_
56};
57
58for (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
67throws_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)
72my @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
83my $m = TryConnectInfos->new(
84 replicants => \@replicants
85);
86
87is_deeply $m->replicants, [
88 map $tests[$_], grep $_ % 2, 0 .. $#tests
89], 'replicant connect_infos coerced correctly';
90
91sub instance {
92 Catalyst::Model::DBIC::Schema->new({
93 schema_class => 'ASchemaClass',
94 @_
95 })
96}