#!perl -wT
use strict;
use warnings;
BEGIN {
use lib 't/lib';
use Handel::Test;
eval 'require DBD::SQLite';
if($@) {
plan skip_all => 'DBD::SQLite not installed';
} else {
plan tests => 220;
};
use_ok('Handel::Checkout');
use_ok('Handel::Cart');
use_ok('Handel::Subclassing::Cart');
use_ok('Handel::Subclassing::CartOnly');
use_ok('Handel::Constants', qw(:order));
use_ok('Handel::Exception', ':try');
use_ok('Handel::Order');
};
## This is a hack, but it works. :-)
my $schema = Handel::Test->init_schema(no_populate => 1);
&run('Handel::Cart', 'Handel::Cart::Item', 1);
&run('Handel::Subclassing::CartOnly', 'Handel::Cart::Item', 2);
&run('Handel::Subclassing::Cart', 'Handel::Subclassing::CartItem', 3);
sub run {
my ($subclass, $itemclass, $dbsuffix) = @_;
Handel::Test->clear_schema($schema);
local $ENV{'HandelDBIDSN'} = $schema->dsn;
## do nothing with nothing
{
my $checkout = Handel::Checkout->new;
is($checkout->cart, undef, 'has no cart');
is($checkout->cart(0), undef, 'do nothing');
is($checkout->cart, undef, 'has no cart');
};
## test for Handel::Exception::Argument where first param is not a hashref
## now tests for order not found since constraint_uuid is gone for subclassing
{
try {
local $ENV{'LANGUAGE'} = 'en';
my $checkout = Handel::Checkout->new;
$checkout->cart('1234');
fail('no exception thrown');
} catch Handel::Exception::Order with {
pass('caught order exception');
like(shift, qr/not find a cart/i, 'not find a cart in message');
} otherwise {
fail('other exception thrown');
};
};
## test for Handel::Exception::Argument where cart option is not a hashref
## now tests for order not found since constraint_uuid is gone for subclassing
{
try {
local $ENV{'LANGUAGE'} = 'en';
my $checkout = Handel::Checkout->new({cart => '1234'});
fail('no exception thrown');
} catch Handel::Exception::Order with {
pass('caught order exception');
like(shift, qr/not find a cart/i, 'not find a cart in message');
} otherwise {
fail('other exception thrown');
};
};
## test for Handel::Exception::Argument where cart object is not a Handel::Cart object
{
try {
local $ENV{'LANGUAGE'} = 'en';
my $checkout = Handel::Checkout->new;
my $fake = bless {}, 'MyObject::Foo';
$checkout->cart($fake);
fail('no exception thrown');
} catch Handel::Exception::Argument with {
pass('caught argument exception');
like(shift, qr/not.*Handel::Cart/i, 'not cart object in message');
} otherwise {
fail('other exception thrown');
};
};
## test for Handel::Exception::Argument where cart option object is not a Handel::Cart object
{
try {
local $ENV{'LANGUAGE'} = 'en';
my $fake = bless {}, 'MyObject::Foo';
my $checkout = Handel::Checkout->new({cart => $fake});
fail('no exception thrown');
} catch Handel::Exception::Argument with {
pass('caught argument exception');
like(shift, qr/not.*Handel::Cart/i, 'not cart object in message');
} otherwise {
fail('other exception thrown');
};
};
{
## create and order from a cart id
my $cart = $subclass->create({
id=>'66BFFD29-8FAD-4200-A22F-E0D80979ADBF',
shopper=>'66BFFD29-8FAD-4200-A22F-E0D80979ADBF',
name=>'My First Cart'
});
my $item = $cart->add({
id => '5A8E0C3D-92C3-49b1-A988-585C792B7529',
sku => 'sku1',
quantity => 2,
price => 1.11,
description => 'My First Item'
});
my $checkout = Handel::Checkout->new;
$checkout->cart($cart->id);
my $order = $checkout->order;
isa_ok($order, 'Handel::Order');
is($order->count, $cart->count, 'has same item count');
is($order->subtotal, $cart->subtotal, 'has same subtotal');
my $orderitem = $order->items->first;
isa_ok($orderitem, 'Handel::Order::Item');
is($orderitem->sku, $item->sku, 'same sku');
is($orderitem->quantity, $item->quantity, 'same quantity');
is($orderitem->price, $item->price, 'same price');
is($orderitem->description, $item->description, 'same description');
is($orderitem->total, $item->total, 'same total');
is($orderitem->orderid, $order->id, 'same id');
};
{
## create and order from a cart id object as new option
my $cart = $subclass->create({
id=>'7B029717-08CC-414d-B3EA-680A5B8BC12C',
shopper=>'7B029717-08CC-414d-B3EA-680A5B8BC12C',
name=>'My First Cart'
});
my $item = $cart->add({
id => 'AF8F39D9-D958-4ddf-A688-433DB4B62835',
sku => 'sku1',
quantity => 2,
price => 1.11,
description => 'My First Item'
});
my $checkout = Handel::Checkout->new({cart => $cart->id});
my $order = $checkout->order;
isa_ok($order, 'Handel::Order');
is($order->count, $cart->count, 'same count');
is($order->subtotal, $cart->subtotal, 'same subtotal');
my $orderitem = $order->items->first;
isa_ok($orderitem, 'Handel::Order::Item');
is($orderitem->sku, $item->sku, 'same sku');
is($orderitem->quantity, $item->quantity, 'same quantity');
is($orderitem->price, $item->price, 'same price');
is($orderitem->description, $item->description, 'same description');
is($orderitem->total, $item->total, 'same total');
is($orderitem->orderid, $order->id, 'same id');
};
{
## create and order from a Handel::Cart object
my $cart = $subclass->create({
id=>'989935CD-5131-4f50-9D6A-F2192468A817',
shopper=>'989935CD-5131-4f50-9D6A-F2192468A817',
name=>'My First Cart'
});
my $item = $cart->add({
id => 'A262096F-E4A7-4c1b-8BAC-01114C68F8FA',
sku => 'sku1',
quantity => 2,
price => 1.11,
description => 'My First Item'
});
my $checkout = Handel::Checkout->new;
$checkout->cart($cart);
my $order = $checkout->order;
isa_ok($order, 'Handel::Order');
is($order->count, $cart->count, 'same count');
is($order->subtotal, $cart->subtotal, 'same subtotal');
my $orderitem = $order->items->first;
isa_ok($orderitem, 'Handel::Order::Item');
is($orderitem->sku, $item->sku, 'same sku');
is($orderitem->quantity, $item->quantity, 'same quantity');
is($orderitem->price, $item->price, 'same price');
is($orderitem->description, $item->description, 'same description');
is($orderitem->total, $item->total, 'same total');
is($orderitem->orderid, $order->id, 'same id');
};
{
## create and order from a Handel::Cart object as new option
my $cart = $subclass->create({
id=>'A16A5F16-840D-42d2-B414-39E745326552',
shopper=>'A16A5F16-840D-42d2-B414-39E745326552',
name=>'My First Cart'
});
my $item = $cart->add({
id => '91F44BE8-F4DD-47e5-859F-884160B96A0B',
sku => 'sku1',
quantity => 2,
price => 1.11,
description => 'My First Item'
});
my $checkout = Handel::Checkout->new({cart => $cart});
my $order = $checkout->order;
isa_ok($order, 'Handel::Order');
is($order->count, $cart->count, 'same count');
is($order->subtotal, $cart->subtotal, 'same subtotal');
my $orderitem = $order->items->first;
isa_ok($orderitem, 'Handel::Order::Item');
is($orderitem->sku, $item->sku, 'same sku');
is($orderitem->quantity, $item->quantity, 'same quantity');
is($orderitem->price, $item->price, 'same price');
is($orderitem->description, $item->description, 'same description');
is($orderitem->total, $item->total, 'same total');
is($orderitem->orderid, $order->id, 'same id');
};
{
## create and order from a HASH filter
my $cart = $subclass->create({
id=>'D8FD6757-4D8C-4b60-A1AA-AD9D4270480B',
shopper=>'D8FD6757-4D8C-4b60-A1AA-AD9D4270480B',
name=>'My First Cart'
});
my $item = $cart->add({
id => '67F4056F-8AC1-4810-96E2-57E1A5BE5DE3',
sku => 'sku1',
quantity => 2,
price => 1.11,
description => 'My First Item'
});
my $checkout = Handel::Checkout->new;
$checkout->cart({id=>'D8FD6757-4D8C-4b60-A1AA-AD9D4270480B', name=>'My First Cart'});
my $order = $checkout->order;
isa_ok($order, 'Handel::Order');
is($order->count, $cart->count, 'same count');
is($order->subtotal, $cart->subtotal, 'same subtotal');
my $orderitem = $order->items->first;
isa_ok($orderitem, 'Handel::Order::Item');
is($orderitem->sku, $item->sku, 'same sku');
is($orderitem->quantity, $item->quantity, 'same quantity');
is($orderitem->price, $item->price, 'same price');
is($orderitem->description, $item->description, 'same description');
is($orderitem->total, $item->total, 'same total');
is($orderitem->orderid, $order->id, 'same id');
};
{
## create and order from a HASH filter as a new option
my $cart = $subclass->create({
id=>'255EE4F0-8CB0-42ed-8853-94AB47BDF14E',
shopper=>'255EE4F0-8CB0-42ed-8853-94AB47BDF14E',
name=>'My First Cart'
});
my $item = $cart->add({
id => 'D399FE0A-87A0-4162-B552-6F161D671684',
sku => 'sku1',
quantity => 2,
price => 1.11,
description => 'My First Item'
});
my $checkout = Handel::Checkout->new({cart => {id=>'255EE4F0-8CB0-42ed-8853-94AB47BDF14E', name=>'My First Cart'}});
my $order = $checkout->order;
isa_ok($order, 'Handel::Order');
is($order->count, $cart->count, 'same count');
is($order->subtotal, $cart->subtotal, 'same subtotal');
my $orderitem = $order->items->first;
isa_ok($orderitem, 'Handel::Order::Item');
is($orderitem->sku, $item->sku, 'same sku');
is($orderitem->quantity, $item->quantity, 'same quantity');
is($orderitem->price, $item->price, 'same price');
is($orderitem->description, $item->description, 'same description');
is($orderitem->total, $item->total, 'same total');
is($orderitem->orderid, $order->id, 'same id');
};
};