The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! perl -T
#
# Tests for Nitesi::Cart costs.

use strict;
use warnings;

use Test::More tests => 11;

use Nitesi::Cart;

my ($cart, $item, $ret);

$cart = Nitesi::Cart->new;

# fixed amount to empty cart
$cart->apply_cost(amount => 5, name => 'fee');

$ret = $cart->total;
ok($ret == 5, "Total: $ret");

# get cost by position
$ret = $cart->cost(0);
ok($ret == 5, "Total: $ret");

# get cost by name
$ret = $cart->cost('fee');
ok($ret == 5, "Total: $ret");

$cart->clear_cost();

# relative amount to empty cart
$cart->apply_cost(amount => 0.5, relative => 1);

$ret = $cart->total;
ok($ret == 0, "Total: $ret");

$cart->clear_cost;

# relative amount to cart with one item
$item = {sku => 'ABC', name => 'Foobar', price => 22};
$ret = $cart->add($item);
ok(ref($ret) eq 'HASH', $cart->error);

$cart->apply_cost(amount => 0.5, relative => 1, name => 'megatax');

$ret = $cart->total;
ok($ret == 33, "Total: $ret");

$ret = $cart->cost(0);
ok($ret == 11, "Cost: $ret");

$ret = $cart->cost('megatax');
ok($ret == 11, "Cost: $ret");

$cart->clear_cost;

# relative and inclusive amount to cart with one item
$cart->apply_cost(amount => 0.5, relative => 1, inclusive => 1,
		  name => 'megatax');

$ret = $cart->total;
ok($ret == 22, "Total: $ret");

$ret = $cart->cost(0);
ok($ret == 11, "Cost: $ret");

$ret = $cart->cost('megatax');
ok($ret == 11, "Cost: $ret");

$cart->clear_cost;