The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# vim: set ft=perl :

use strict;
use lib qw( t/ );
use Test::More tests => 7;
use Log::Log4perl ':easy';

SKIP: {
	eval "require DateTime::Format::Strptime";
	if ($@) {
		skip "DateTime::Format::Strptime not installed.", 7;
	}

	Log::Log4perl->easy_init({ level => $WARN, file => "> spops_tests.log" });

	require_ok( 'SPOPS::Initialize' );

	my $strptime = DateTime::Format::Strptime->new(pattern => '%D %T');
	my %config = (
		test => {
			class           => 'StrptimeTest',
			isa             => [ 'SPOPS::Loopback' ],
			rules_from      => [ 'SPOPSx::Tool::DateTime' ],
			field           => [ qw( myid datetime_field ) ],
			id_field        => 'myid',
			datetime_format => {
				datetime_field => $strptime,
			},
		},
	);

	my $init_list_dt = eval { SPOPS::Initialize->process({ config => \%config }) };
	ok( ! $@, "Initialize process run $@" );
	is( $init_list_dt->[0], 'StrptimeTest',
		'SPOPSx::Tool::DateTime strptime class initialized' );

	my $now = DateTime->now;
	my $item_dt = StrptimeTest->new({ myid           => 88,
                                      datetime_field => $now });
	eval { $item_dt->save };
	ok( ! $@, 'Object with DateTime strptime field saved' );
	isa_ok( $item_dt->{datetime_field}, 'DateTime' );
	is( StrptimeTest->peek( 88, 'datetime_field' ), $strptime->format_datetime($now),
		'DateTime strptime field value saved' );

	my $new_item_dt = StrptimeTest->fetch( 88 );
	isa_ok( $new_item_dt->{datetime_field}, 'DateTime',
		'YAML field fetched as scalar' );
}