Overhaul of test warning handling - mask off as little as possible
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 12pg_common.t
CommitLineData
a78e3fed 1use strict;
c2849787 2use lib qw(t/lib);
fbd83464 3use dbixcsl_common_tests;
fdd8ff16 4use Test::More;
9065de34 5use File::Slurp 'slurp';
a78e3fed 6
9e978a19 7my $dsn = $ENV{DBICTEST_PG_DSN} || '';
8my $user = $ENV{DBICTEST_PG_USER} || '';
9my $password = $ENV{DBICTEST_PG_PASS} || '';
a78e3fed 10
fbd83464 11my $tester = dbixcsl_common_tests->new(
a78e3fed 12 vendor => 'Pg',
13 auto_inc_pk => 'SERIAL NOT NULL PRIMARY KEY',
9e978a19 14 dsn => $dsn,
a78e3fed 15 user => $user,
16 password => $password,
c930f78b 17 loader_options => { preserve_case => 1 },
c38ec663 18 connect_info_opts => {
19 on_connect_do => [ 'SET client_min_messages=WARNING' ],
20 },
c930f78b 21 quote_char => '"',
ee07e280 22 data_types => {
760fd65c 23 # http://www.postgresql.org/docs/7.4/interactive/datatype.html
24 #
25 # Numeric Types
26 boolean => { data_type => 'boolean' },
27 bool => { data_type => 'boolean' },
45321eda 28 'bool default false'
29 => { data_type => 'boolean', default_value => \'false' },
760fd65c 30
31 bigint => { data_type => 'bigint' },
32 int8 => { data_type => 'bigint' },
33 bigserial => { data_type => 'bigint', is_auto_increment => 1 },
34 serial8 => { data_type => 'bigint', is_auto_increment => 1 },
5163dc4a 35 integer => { data_type => 'integer' },
36 int => { data_type => 'integer' },
37 int4 => { data_type => 'integer' },
5163dc4a 38 serial => { data_type => 'integer', is_auto_increment => 1 },
39 serial4 => { data_type => 'integer', is_auto_increment => 1 },
760fd65c 40 smallint => { data_type => 'smallint' },
41 int2 => { data_type => 'smallint' },
42
43 money => { data_type => 'money' },
44
45 'double precision' => { data_type => 'double precision' },
46 float8 => { data_type => 'double precision' },
47 real => { data_type => 'real' },
48 float4 => { data_type => 'real' },
49 'float(24)' => { data_type => 'real' },
50 'float(25)' => { data_type => 'double precision' },
51 'float(53)' => { data_type => 'double precision' },
52 float => { data_type => 'double precision' },
53
54 numeric => { data_type => 'numeric' },
55 decimal => { data_type => 'numeric' },
f80b0ea7 56 'numeric(6,3)' => { data_type => 'numeric', size => [6,3] },
57 'decimal(6,3)' => { data_type => 'numeric', size => [6,3] },
760fd65c 58
59 # Bit String Types
f80b0ea7 60 'bit varying(2)' => { data_type => 'varbit', size => 2 },
61 'varbit(2)' => { data_type => 'varbit', size => 2 },
62 'varbit' => { data_type => 'varbit' },
63 bit => { data_type => 'bit', size => 1 },
64 'bit(3)' => { data_type => 'bit', size => 3 },
760fd65c 65
66 # Network Types
67 inet => { data_type => 'inet' },
68 cidr => { data_type => 'cidr' },
69 macaddr => { data_type => 'macaddr' },
70
71 # Geometric Types
72 point => { data_type => 'point' },
73 line => { data_type => 'line' },
74 lseg => { data_type => 'lseg' },
75 box => { data_type => 'box' },
76 path => { data_type => 'path' },
77 polygon => { data_type => 'polygon' },
78 circle => { data_type => 'circle' },
79
80 # Character Types
f80b0ea7 81 'character varying(2)' => { data_type => 'varchar', size => 2 },
82 'varchar(2)' => { data_type => 'varchar', size => 2 },
83 'character(2)' => { data_type => 'char', size => 2 },
84 'char(2)' => { data_type => 'char', size => 2 },
85 'character' => { data_type => 'char', size => 1 },
86 'char' => { data_type => 'char', size => 1 },
760fd65c 87 text => { data_type => 'text' },
f80b0ea7 88 # varchar with no size has unlimited size, we rewrite to 'text'
8e030521 89 varchar => { data_type => 'text',
90 original => { data_type => 'varchar' } },
760fd65c 91
92 # Datetime Types
93 date => { data_type => 'date' },
94 interval => { data_type => 'interval' },
f80b0ea7 95 'interval(2)' => { data_type => 'interval', size => 2 },
8e030521 96 time => { data_type => 'time' },
97 'time(2)' => { data_type => 'time', size => 2 },
98 'time without time zone' => { data_type => 'time' },
99 'time(2) without time zone' => { data_type => 'time', size => 2 },
df956aad 100 'time with time zone' => { data_type => 'time with time zone' },
f80b0ea7 101 'time(2) with time zone' => { data_type => 'time with time zone', size => 2 },
102 timestamp => { data_type => 'timestamp' },
701cd3e3 103 'timestamp default now()'
104 => { data_type => 'timestamp', default_value => \'current_timestamp',
105 original => { default_value => \'now()' } },
f80b0ea7 106 'timestamp(2)' => { data_type => 'timestamp', size => 2 },
107 'timestamp without time zone' => { data_type => 'timestamp' },
108 'timestamp(2) without time zone' => { data_type => 'timestamp', size => 2 },
760fd65c 109
df956aad 110 'timestamp with time zone' => { data_type => 'timestamp with time zone' },
f80b0ea7 111 'timestamp(2) with time zone' => { data_type => 'timestamp with time zone', size => 2 },
760fd65c 112
113 # Blob Types
114 bytea => { data_type => 'bytea' },
ee07e280 115 },
fdd8ff16 116 extra => {
117 create => [
118 q{
7b868481 119 CREATE SCHEMA dbicsl_test
120 },
121 q{
122 CREATE SEQUENCE dbicsl_test.myseq
123 },
124 q{
fdd8ff16 125 CREATE TABLE pg_loader_test1 (
7b868481 126 id INTEGER NOT NULL DEFAULT nextval('dbicsl_test.myseq') PRIMARY KEY,
fdd8ff16 127 value VARCHAR(100)
128 )
129 },
fd97abca 130 qq{
131 COMMENT ON TABLE pg_loader_test1 IS 'The\15\12Table'
fdd8ff16 132 },
fd97abca 133 qq{
134 COMMENT ON COLUMN pg_loader_test1.value IS 'The\15\12Column'
fdd8ff16 135 },
4b9fb838 136 q{
137 CREATE TABLE pg_loader_test2 (
138 id SERIAL NOT NULL PRIMARY KEY,
139 value VARCHAR(100)
140 )
141 },
142 q{
143 COMMENT ON TABLE pg_loader_test2 IS 'very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long comment'
144 },
fdd8ff16 145 ],
7b868481 146 pre_drop_ddl => [
147 'DROP SCHEMA dbicsl_test CASCADE',
148 ],
9065de34 149 drop => [ qw/ pg_loader_test1 pg_loader_test2 / ],
7b868481 150 count => 4,
fdd8ff16 151 run => sub {
152 my ($schema, $monikers, $classes) = @_;
153
7b868481 154 is $schema->source($monikers->{pg_loader_test1})->column_info('id')->{sequence},
155 'dbicsl_test.myseq',
156 'qualified sequence detected';
157
fdd8ff16 158 my $class = $classes->{pg_loader_test1};
159 my $filename = $schema->_loader->_get_dump_filename($class);
160
9065de34 161 my $code = slurp $filename;
fdd8ff16 162
fd97abca 163 like $code, qr/^=head1 NAME\n\n^$class - The\nTable\n\n^=cut\n/m,
fdd8ff16 164 'table comment';
165
fd97abca 166 like $code, qr/^=head2 value\n\n(.+:.+\n)+\nThe\nColumn\n\n/m,
79a00530 167 'column comment and attrs';
baff904e 168
4b9fb838 169 $class = $classes->{pg_loader_test2};
170 $filename = $schema->_loader->_get_dump_filename($class);
171
9065de34 172 $code = slurp $filename;
4b9fb838 173
174 like $code, qr/^=head1 NAME\n\n^$class\n\n=head1 DESCRIPTION\n\n^very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long comment\n\n^=cut\n/m,
175 'long table comment is in DESCRIPTION';
fdd8ff16 176 },
177 },
a78e3fed 178);
179
9e978a19 180if( !$dsn || !$user ) {
181 $tester->skip_tests('You need to set the DBICTEST_PG_DSN, _USER, and _PASS environment variables');
a78e3fed 182}
183else {
184 $tester->run_tests();
185}
8e64075f 186# vim:et sw=4 sts=4 tw=0: