Massive cleanup of DateTime test dependencies, other interim
[dbsrgits/DBIx-Class.git] / t / inflate / datetime_informix.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5 use Test::Exception;
6 use lib qw(t/lib);
7 use DBICTest;
8 use Scope::Guard ();
9
10 my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_INFORMIX_${_}" } qw/DSN USER PASS/};
11
12 if (not $dsn) {
13   plan skip_all => <<'EOF';
14 Set $ENV{DBICTEST_INFORMIX_DSN} _USER and _PASS to run this test'.
15 Warning: This test drops and creates a table called 'event'";
16 EOF
17 }
18
19 plan skip_all => 'Test needs ' . DBIx::Class::Optional::Dependencies->req_missing_for ('test_dt')
20   unless DBIx::Class::Optional::Dependencies->req_ok_for ('test_dt');
21
22 my $schema;
23
24 {
25   $schema = DBICTest::Schema->connect($dsn, $user, $pass, {
26     on_connect_call => [ 'datetime_setup' ],
27   });
28
29   my $sg = Scope::Guard->new(\&cleanup);
30
31   eval { $schema->storage->dbh->do('DROP TABLE event') };
32   $schema->storage->dbh->do(<<'SQL');
33   CREATE TABLE event (
34     id INT PRIMARY KEY,
35     starts_at DATE,
36     created_on DATETIME YEAR TO FRACTION(5)
37   );
38 SQL
39   my $rs = $schema->resultset('Event');
40
41   my $dt = DateTime->now;
42   $dt->set_nanosecond(555640000);
43
44   my $date_only = DateTime->new(
45     year => $dt->year, month => $dt->month, day => $dt->day
46   );
47
48   my $row;
49   ok( $row = $rs->create({
50     id => 1,
51     starts_at => $date_only, 
52     created_on => $dt,
53   }));
54   ok( $row = $rs->search({ id => 1 }, { select => [qw/starts_at created_on/] })
55     ->first
56   );
57   is $row->created_on, $dt, 'TIMESTAMP as DateTime roundtrip';
58
59   cmp_ok $row->created_on->nanosecond, '==', $dt->nanosecond,
60     'fractional part of a second survived';
61
62   is $row->starts_at, $date_only, 'DATE as DateTime roundtrip';
63 }
64
65 done_testing;
66
67 # clean up our mess
68 sub cleanup {
69   my $dbh; 
70   eval {
71     $dbh = $schema->storage->dbh;
72   };
73   return unless $dbh;
74
75   eval { $dbh->do(qq{DROP TABLE $_}) } for qw/event/;
76 }