#!perl -T
use strict;
use warnings;
use Test::More;
use File::Spec;
use Data::Dumper;
use DateTime;
use Log::Log4perl;


if ( not $ENV{TEST_AUTHOR_SUGAR}) {
    my $msg = 'Author test.  Set $ENV{TEST_AUTHOR_SUGAR} to a true value to run. Define it as DEBUG to see the debug messages';
    plan( skip_all => $msg );
}

if(!(Log::Log4perl->initialized()) && $ENV{TEST_AUTHOR_SUGAR} eq 'DEBUG') {
    Log::Log4perl->easy_init($Log::Log4perl::DEBUG);
}

my ($volume,$directories,$file) = File::Spec->splitpath($0);
push @INC, $directories;
my $defaults = File::Spec->catfile('lib', 'defaults.pl');
require $defaults;
use_ok('Net::SugarCRM');
{
    my $s;
    $s = Net::SugarCRM->new(url=>$Test::url, restuser=>$Test::login, restpasswd=> $Test::pass);
    is(ref $s, 'Net::SugarCRM', 'Check that we got a Net::SugarCRM package');
    my $sessionid = $s->login;
    ok($sessionid, 'We got a sessionid back after login');
    is($sessionid, $s->_sessionid, "Check that the sessionid is stored $sessionid");
    is($sessionid, $s->sessionid, "Check that the sessionid is stored $sessionid");
    $s->logout;
    ok(!defined($s->_sessionid), "Check that we have effectively logged out");
}
# Now try to implicitly log in and out
{
    my $s;
    $s = Net::SugarCRM->new(url=>$Test::url, restuser=>$Test::login, restpasswd=> $Test::pass);
    is(ref $s, 'Net::SugarCRM', 'Check that we got a Net::SugarCRM package');
    my $sessionid = $s->sessionid;
    is($sessionid, $s->_sessionid, "Check that the sessionid is stored $sessionid");
}
# logout a non logged in
{
    my $s;
    $s = Net::SugarCRM->new(url=>$Test::url, restuser=>$Test::login, restpasswd=> $Test::pass);
    is(ref $s, 'Net::SugarCRM', 'Check that we got a Net::SugarCRM package');
    $s->logout;
}
# Error in login
{
    my $s;
    $s = Net::SugarCRM->new(url=>$Test::url, restuser=>$Test::login, restpasswd=> "wrong pass");
    is(ref $s, 'Net::SugarCRM', 'Check that we got a Net::SugarCRM package');
    ok(!defined(eval {$s->sessionid; 1 }), "Error in login");
}

done_testing(11);
