From: Rafael Kitover Date: Wed, 15 Jul 2009 22:41:45 +0000 (+0000) Subject: add IC::DT tests for odbc/mssql X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=43e06a679829e454e999b89bced59114a7a3e7fb;p=dbsrgits%2FDBIx-Class-Historic.git add IC::DT tests for odbc/mssql --- diff --git a/t/inflate/datetime_mssql.t b/t/inflate/datetime_mssql.t new file mode 100644 index 0000000..5d4c5a5 --- /dev/null +++ b/t/inflate/datetime_mssql.t @@ -0,0 +1,80 @@ +use strict; +use warnings; + +use Test::More; +use Test::Exception; +use lib qw(t/lib); +use DBICTest; + +my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_MSSQL_ODBC_${_}" } qw/DSN USER PASS/}; + +if (not ($dsn && $user)) { + plan skip_all => + 'Set $ENV{DBICTEST_MSSQL_ODBC_DSN}, _USER and _PASS to run this test' . + "\nWarning: This test drops and creates a table called 'track'"; +} else { + eval "use DateTime; use DateTime::Format::Strptime;"; + if ($@) { + plan skip_all => 'needs DateTime and DateTime::Format::Strptime for testing'; + } + else { + plan tests => 4 * 2; # (tests * dt_types) + } +} + +my $schema = DBICTest::Schema->clone; + +$schema->connection($dsn, $user, $pass); +$schema->storage->ensure_connected; + +my @dt_types = ( + ['DATETIME', { + year => 2004, + month => 8, + day => 21, + hour => 14, + minute => 36, + second => 48, + nanosecond => 500000000, + }], + ['SMALLDATETIME', { # minute precision + year => 2004, + month => 8, + day => 21, + hour => 14, + minute => 36, + }], +); + +for my $dt_type (@dt_types) { + my ($type, $sample_dt) = @$dt_type; + + eval { $schema->storage->dbh->do("DROP TABLE track") }; + $schema->storage->dbh->do(<<"SQL"); +CREATE TABLE track ( + trackid INT IDENTITY PRIMARY KEY, + cd INT, + position INT, + last_updated_on $type, +) +SQL + ok(my $dt = DateTime->new($sample_dt)); + + my $row; + ok( $row = $schema->resultset('Track')->create({ + last_updated_on => $dt, + cd => 1, + })); + ok( $row = $schema->resultset('Track') + ->search({ trackid => $row->trackid }, { select => ['last_updated_on'] }) + ->first + ); + is( $row->updated_date, $dt, 'DateTime roundtrip' ); +} + +# clean up our mess +END { + if (my $dbh = eval { $schema->storage->_dbh }) { + $dbh->do('DROP TABLE track'); + } +}