Commit | Line | Data |
726c8f65 |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use Test::More; |
5 | use Test::Exception; |
6 | use Scope::Guard (); |
7 | use Try::Tiny; |
199fbc45 |
8 | use DBIx::Class::Optional::Dependencies (); |
726c8f65 |
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 | |
199fbc45 |
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 | |
726c8f65 |
28 | plan skip_all => <<'EOF' unless $dsn || $dsn2; |
076bd599 |
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'. |
726c8f65 |
31 | EOF |
32 | |
726c8f65 |
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 | } |