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