f68a7e35569f053204b78eca66b5acbc8df13cce
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 14ora_common.t
1 use strict;
2 use lib qw(t/lib);
3 use dbixcsl_common_tests;
4 use Test::More;
5 use Test::Exception;
6
7 my $dsn      = $ENV{DBICTEST_ORA_DSN} || '';
8 my $user     = $ENV{DBICTEST_ORA_USER} || '';
9 my $password = $ENV{DBICTEST_ORA_PASS} || '';
10
11 my $tester = dbixcsl_common_tests->new(
12     vendor      => 'Oracle',
13     auto_inc_pk => 'INTEGER NOT NULL PRIMARY KEY',
14     auto_inc_cb => sub {
15         my ($table, $col) = @_;
16         return (
17             qq{ CREATE SEQUENCE ${table}_${col}_seq START WITH 1 INCREMENT BY 1},
18             qq{ 
19                 CREATE OR REPLACE TRIGGER ${table}_${col}_trigger
20                 BEFORE INSERT ON ${table}
21                 FOR EACH ROW
22                 BEGIN
23                     SELECT ${table}_${col}_seq.nextval INTO :NEW.${col} FROM dual;
24                 END;
25             }
26         );
27     },
28     auto_inc_drop_cb => sub {
29         my ($table, $col) = @_;
30         return qq{ DROP SEQUENCE ${table}_${col}_seq };
31     },
32     dsn         => $dsn,
33     user        => $user,
34     password    => $password,
35     extra       => {
36         create => [
37             q{
38                 CREATE TABLE oracle_loader_test1 (
39                     id INTEGER PRIMARY KEY,
40                     a_varchar VARCHAR2(100) DEFAULT 'foo',
41                     an_int INTEGER DEFAULT 42,
42                     a_double DOUBLE PRECISION DEFAULT 10.555,
43                     a_date DATE DEFAULT sysdate
44                 )
45             },
46         ],
47         drop   => [ qw/ oracle_loader_test1 / ],
48         count  => 5,
49         run    => sub {
50             my ($schema, $monikers, $classes) = @_;
51
52             my $rsrc = $schema->resultset($monikers->{oracle_loader_test1})
53                 ->result_source;
54
55             is $rsrc->column_info('a_varchar')->{default_value},
56                 'foo',
57                 'constant character default';
58
59             is $rsrc->column_info('an_int')->{default_value},
60                 42,
61                 'constant integer default';
62
63             is $rsrc->column_info('a_double')->{default_value},
64                 10.555,
65                 'constant numeric default';
66
67             my $function_default =
68                 $rsrc->column_info('a_date')->{default_value};
69
70             ok ((ref $function_default eq 'SCALAR'),
71                 'default_value for function default is a scalar ref')
72             or diag "default_value is: ", $function_default
73             ;
74
75             eval { is $$function_default,
76                 'sysdate',
77                 'default_value for function default is correct' };
78         },
79     },
80 );
81
82 if( !$dsn || !$user ) {
83     $tester->skip_tests('You need to set the DBICTEST_ORA_DSN, _USER, and _PASS environment variables');
84 }
85 else {
86     $tester->run_tests();
87 }