#!perl -w
use strict;
use warnings;

BEGIN {
    use lib 't/lib';
    use Handel::Test tests => 20;

    use_ok('Handel::Constraints', qw(:all));
    use_ok('Handel::Checkout');
    use_ok('Handel::Constants', qw(:checkout));
    use_ok('Handel::Exception', qw(:try));
};

ok(!constraint_checkout_phase('junk.foo'), 'alpha gibberish type');
ok(!constraint_checkout_phase(-14), 'negative number type');
ok(!constraint_checkout_phase(23), 'out of range type');
ok(!constraint_checkout_phase(undef), 'value is undefined');
ok(!constraint_checkout_phase(''), 'value is empty string');
ok(constraint_checkout_phase(CHECKOUT_PHASE_INITIALIZE), 'checkout initialize phase');
ok(constraint_checkout_phase(CHECKOUT_PHASE_VALIDATE), 'checkout validation phase');
ok(constraint_checkout_phase(CHECKOUT_PHASE_AUTHORIZE), 'checkout authorization phase');
ok(constraint_checkout_phase(CHECKOUT_PHASE_FINALIZE), 'checkout finalization phase');
ok(constraint_checkout_phase(CHECKOUT_PHASE_DELIVER), 'checkout delivery phase');


## Added a new checkout phase
{
    Handel::Checkout->add_phase('CUSTOM_CHECKOUT_PHASE', 99, 1);
    can_ok('Handel::Constants', 'CUSTOM_CHECKOUT_PHASE');
    can_ok('main', 'CUSTOM_CHECKOUT_PHASE');
    ok(constraint_checkout_phase(Handel::Constants->CUSTOM_CHECKOUT_PHASE), 'custom checkout phase');
    ok(constraint_checkout_phase(&CUSTOM_CHECKOUT_PHASE), 'custom checkout phase');
    is(Handel::Constants->CUSTOM_CHECKOUT_PHASE, 99, 'custom phase value returned as a method');
    is(&CUSTOM_CHECKOUT_PHASE, 99, 'custom phase value returned as a constant');
};