DBIx-Class-InflateColumn-DateTime-WithTimeZone

 view release on metacpan or  search on metacpan

t/10-conversion-sqlite.t  view on Meta::CPAN

use strict;
use Test::More;
use Test::Fatal;
use Test::Warn;

use DateTime;

use lib qw( t/lib );
use Test::Schema;

my $schema = Test::Schema->connect('dbi:SQLite:dbname=:memory:', '', '');
$schema->deploy;

my $resultset = $schema->resultset('Tz');

my $result_source = $resultset->result_source;

is( $result_source->column_info('dt')->{timezone},
    'UTC', 'timezone defaults to UTC' );

is( $result_source->column_info('dt_utc')->{timezone},
    'UTC', 'explicit UTC timezone correct' );

my $now = DateTime->now( time_zone => 'America/Chicago' );
my $now_utc = $now->clone->set_time_zone('UTC');

my $row = $resultset->create(
    {
        id     => 1,
        dt     => $now,
        dt_utc => $now,
    }
);

$row->discard_changes;

my $parser = $schema->storage->datetime_parser;

for my $col_name (qw{ dt dt_utc }) {
    my $val = $row->$col_name;
    my $info = $row->column_info($col_name);
    isa_ok( $val, 'DateTime', "$col_name column" );
    is( $val,                  $now . '',         '  DateTime corect' );
    is( $val->time_zone->name, 'America/Chicago', '  time zone correct' );

    my $raw_str;
    $schema->storage->dbh_do(
        sub {
            my ( $storage, $dbh ) = @_;
            my $vals =
              $dbh->selectcol_arrayref("SELECT $col_name FROM tz WHERE id = 1");
            $raw_str = $vals->[0];
        }
    );

    # all datetime values should be stored as UTC
    my $expected_dt = $parser->format_datetime($now_utc);

    is( $raw_str, $expected_dt, "$col_name column raw value correct" )
      or diag "database datetime: $raw_str";
}

my $dt_null;



( run in 1.171 second using v1.01-cache-2.11-cpan-54e63673c56 )