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