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