# vim: set ft=perl :

use strict;
use warnings;

use Test::More tests => 17;

use_ok('Java::JCR');
use_ok('Java::JCR::Jackrabbit');

my $repository = Java::JCR::Jackrabbit->new;
ok($repository);

my $session = $repository->login(
    Java::JCR::SimpleCredentials->new('username', 'password'));
ok($session);

my $root = $session->get_root_node;
ok($root);

my $node = $root->add_node('dates', 'nt:unstructured');

my $has_datetime;
my $has_class_date;

SKIP: {
    eval 'use DateTime';
    skip 'DateTime is not installed.', 1 if $@;

    $has_datetime++;

    my $datetime = DateTime->new( year => 1978, month => 1, day => 10 );

    my $property = $node->set_property('datetime', $datetime);
    ok($property);
}

SKIP: {
    eval 'use Class::Date';
    skip 'Class::Date is not installed.', 1 if $@;

    $has_class_date++;

    my $class_date = Class::Date->new([ 1978, 1, 10 ]);

    my $property = $node->set_property('class_date', $class_date);
    ok($property);
}

$session->save;

$node = $root->get_node('dates');

SKIP: {
    skip 'DateTime is not installed.', 5 if !$has_datetime;

    my $property = $node->get_property('datetime');
    my $datetime = $property->get_date('DateTime');
    ok($datetime);
    isa_ok($datetime, 'DateTime');

    is($datetime->year, 1978);
    is($datetime->month, 1);
    is($datetime->day, 10);
}

SKIP: {
    skip 'Class::Date is not installed.', 5 if !$has_class_date;

    my $property = $node->get_property('class_date');
    my $class_date = $property->get_date('Class::Date');
    ok($class_date);
    isa_ok($class_date, 'Class::Date');

    is($class_date->year, 1978);
    is($class_date->month, 1);
    is($class_date->day, 10);
}

$node->remove;
$root->save;

$session->logout;