check database driver dependencies for tests
[dbsrgits/DBIx-Class.git] / t / inflate / datetime_msaccess.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5 use Test::Exception;
6 use Scope::Guard ();
7 use Try::Tiny;
8 use DBIx::Class::Optional::Dependencies ();
9 use lib qw(t/lib);
10 use DBICTest;
11
12 my ($dsn,  $user,  $pass)  = @ENV{map { "DBICTEST_MSACCESS_ODBC_${_}" } qw/DSN USER PASS/};
13 my ($dsn2, $user2, $pass2) = @ENV{map { "DBICTEST_MSACCESS_ADO_${_}" }  qw/DSN USER PASS/};
14
15 plan skip_all => 'Test needs ' .
16   (join ' and ', map { $_ ? $_ : () }
17     DBIx::Class::Optional::Dependencies->req_missing_for('test_dt'),
18     (join ' or ', map { $_ ? $_ : () }
19       DBIx::Class::Optional::Dependencies->req_missing_for('test_rdbms_msaccess_odbc'),
20       DBIx::Class::Optional::Dependencies->req_missing_for('test_rdbms_msaccess_ado')))
21   unless
22     DBIx::Class::Optional::Dependencies->req_ok_for ('test_dt') && (
23     $dsn && DBIx::Class::Optional::Dependencies->req_ok_for('test_rdbms_msaccess_odbc')
24     or
25     $dsn2 && DBIx::Class::Optional::Dependencies->req_ok_for('test_rdbms_msaccess_ado'))
26       or (not $dsn || $dsn2);
27
28 plan skip_all => <<'EOF' unless $dsn || $dsn2;
29 Set $ENV{DBICTEST_MSACCESS_ODBC_DSN} and/or $ENV{DBICTEST_MSACCESS_ADO_DSN} (and optionally _USER and _PASS) to run these tests.
30 Warning: this test drops and creates the table 'track'.
31 EOF
32
33 my @connect_info = (
34   [ $dsn,  $user  || '', $pass  || '' ],
35   [ $dsn2, $user2 || '', $pass2 || '' ],
36 );
37
38 my $schema;
39
40 for my $connect_info (@connect_info) {
41   my ($dsn, $user, $pass) = @$connect_info;
42
43   next unless $dsn;
44
45   $schema = DBICTest::Schema->connect($dsn, $user, $pass, {
46     on_connect_call => 'datetime_setup',
47     quote_names => 1,
48   });
49
50   my $guard = Scope::Guard->new(\&cleanup);
51
52   try { local $^W = 0; $schema->storage->dbh->do('DROP TABLE track') };
53   $schema->storage->dbh->do(<<"SQL");
54 CREATE TABLE track (
55   trackid AUTOINCREMENT PRIMARY KEY,
56   cd INT,
57   [position] INT,
58   last_updated_at DATETIME
59 )
60 SQL
61
62   ok(my $dt = DateTime->new({
63     year => 2004,
64     month => 8,
65     day => 21,
66     hour => 14,
67     minute => 36,
68     second => 48,
69   }));
70
71   ok(my $row = $schema->resultset('Track')->create({
72     last_updated_at => $dt,
73     cd => 1
74   }));
75   ok($row = $schema->resultset('Track')
76     ->search({ trackid => $row->trackid }, { select => ['last_updated_at'] })
77     ->first
78   );
79   is($row->last_updated_at, $dt, "DATETIME roundtrip" );
80 }
81
82 done_testing;
83
84 # clean up our mess
85 sub cleanup {
86   # have to reconnect to drop a table that's in use
87   if (my $storage = eval { $schema->storage }) {
88     local $^W = 0;
89     $storage->disconnect;
90     $storage->dbh->do('DROP TABLE track');
91   }
92 }