306 lines
9.9 KiB
Perl
306 lines
9.9 KiB
Perl
# vim:syntax=perl
|
|
#-------------------------------------------------------------------
|
|
# WebGUI is Copyright 2001-2009 Plain Black Corporation.
|
|
#-------------------------------------------------------------------
|
|
# Please read the legal notices (docs/legal.txt) and the license
|
|
# (docs/license.txt) that came with this distribution before using
|
|
# this software.
|
|
#------------------------------------------------------------------
|
|
# http://www.plainblack.com info@plainblack.com
|
|
#------------------------------------------------------------------
|
|
|
|
# Write a little about what this script tests.
|
|
#
|
|
#
|
|
|
|
use FindBin;
|
|
use strict;
|
|
use lib "$FindBin::Bin/../lib";
|
|
use Test::More;
|
|
use Test::Deep;
|
|
use JSON;
|
|
use HTML::Form;
|
|
|
|
use WebGUI::Test; # Must use this before any other WebGUI modules
|
|
use WebGUI::Session;
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Init
|
|
my $session = WebGUI::Test->session;
|
|
|
|
#----------------------------------------------------------------------------
|
|
# Tests
|
|
|
|
plan tests => 49;
|
|
|
|
#----------------------------------------------------------------------------
|
|
# put your tests here
|
|
|
|
my $loaded = use_ok('WebGUI::Shop::Vendor');
|
|
|
|
my ($vendor, $guard, $numberOfVendors);
|
|
my ($fence, $fenceCopy);
|
|
my $fenceUser = WebGUI::User->new($session, 'new');
|
|
$fenceUser->username('fence');
|
|
my $guardUser = WebGUI::User->new($session, 'new');
|
|
$guardUser->username('guard');
|
|
WebGUI::Test->addToCleanup($fenceUser, $guardUser);
|
|
|
|
$numberOfVendors = scalar @{ WebGUI::Shop::Vendor->getVendors($session) };
|
|
|
|
#######################################################################
|
|
#
|
|
# new
|
|
#
|
|
#######################################################################
|
|
|
|
my $e;
|
|
|
|
eval { $vendor = WebGUI::Shop::Vendor->new(); };
|
|
$e = Exception::Class->caught();
|
|
isa_ok($e, 'WebGUI::Error::InvalidObject', 'new takes an exception to not giving it a session variable');
|
|
cmp_deeply(
|
|
$e,
|
|
methods(
|
|
error => 'Need a session.',
|
|
got => '',
|
|
expected => 'WebGUI::Session',
|
|
),
|
|
'new: requires a session variable',
|
|
);
|
|
|
|
eval { $vendor = WebGUI::Shop::Vendor->new($session); };
|
|
$e = Exception::Class->caught();
|
|
isa_ok($e, 'WebGUI::Error::InvalidParam', 'new takes an exception to not giving it a vendor id to instanciate');
|
|
cmp_deeply(
|
|
$e,
|
|
methods(
|
|
error => 'Need a vendorId.',
|
|
),
|
|
'new: requires a vendorId',
|
|
);
|
|
|
|
eval { $vendor = WebGUI::Shop::Vendor->new($session, 'notAVendorId'); };
|
|
$e = Exception::Class->caught();
|
|
isa_ok($e, 'WebGUI::Error::ObjectNotFound', 'new takes an exception to not giving it a vendor id that is not in the db');
|
|
cmp_deeply(
|
|
$e,
|
|
methods(
|
|
error => 'Vendor not found.',
|
|
id => 'notAVendorId',
|
|
),
|
|
'new: requires a valid vendorId',
|
|
);
|
|
|
|
eval { $vendor = WebGUI::Shop::Vendor->new($session, 'defaultvendor000000000'); };
|
|
$e = Exception::Class->caught();
|
|
ok(!$e, 'No exception thrown');
|
|
isa_ok($vendor, 'WebGUI::Shop::Vendor', 'new returns correct type of object');
|
|
|
|
isa_ok($vendor->session, 'WebGUI::Session', 'session method returns a session object');
|
|
|
|
is($session->getId, $vendor->session->getId, 'session method returns OUR session object');
|
|
|
|
is($vendor->getId, 'defaultvendor000000000', 'new returned the correct vendor');
|
|
|
|
#######################################################################
|
|
#
|
|
# create
|
|
#
|
|
#######################################################################
|
|
|
|
eval { $fence = WebGUI::Shop::Vendor->create(); };
|
|
$e = Exception::Class->caught();
|
|
isa_ok($e, 'WebGUI::Error::InvalidObject', 'new takes an exception to not giving it a session variable');
|
|
cmp_deeply(
|
|
$e,
|
|
methods(
|
|
error => 'Need a session.',
|
|
got => '',
|
|
expected => 'WebGUI::Session',
|
|
),
|
|
'create: requires a session variable',
|
|
);
|
|
|
|
my $now = time();
|
|
|
|
eval { $fence = WebGUI::Shop::Vendor->create($session, { userId => $fenceUser->userId, }); };
|
|
WebGUI::Test->addToCleanup($fence);
|
|
$e = Exception::Class->caught();
|
|
ok(!$e, 'No exception thrown by create');
|
|
isa_ok($vendor, 'WebGUI::Shop::Vendor', 'create returns correct type of object');
|
|
|
|
ok($fence->get('dateCreated'), 'dateCreated is not null');
|
|
my $deltaDC = $fence->get('dateCreated') - $now;
|
|
cmp_ok( $deltaDC, '<=', 2, 'dateCreated is set properly');
|
|
|
|
#######################################################################
|
|
#
|
|
# get, update
|
|
#
|
|
#######################################################################
|
|
|
|
ok($session->id->valid($fence->get('vendorId')), 'get: vendorId is a valid guid');
|
|
is($fence->getId, $fence->get('vendorId'), 'get: getId is an alias for get vendorId');
|
|
is($fence->get('userId'), $fenceUser->userId, 'get: userId');
|
|
is($fence->get('name'), undef, 'get: by default, no name is set');
|
|
|
|
$fence->update({name => 'Bogs Diamond'});
|
|
is($fence->get('name'), 'Bogs Diamond', 'get: get name');
|
|
is($fence->get('userId'), $fenceUser->userId, 'get: updating name did not affect userId');
|
|
|
|
my $newProps = {
|
|
name => 'Warden Norton',
|
|
url => 'http://www.shawshank.com',
|
|
};
|
|
|
|
$fence->update($newProps);
|
|
is($fence->get('name'), 'Warden Norton', 'get: get name');
|
|
is($fence->get('url'), 'http://www.shawshank.com', 'get: updating name did not affect userId');
|
|
|
|
$newProps->{name} = 'Officer Hadley';
|
|
is($fence->get('name'), 'Warden Norton', 'get: No leakage in passing hashref to get');
|
|
|
|
my $currentProps = $fence->get();
|
|
|
|
cmp_deeply(
|
|
$currentProps,
|
|
{
|
|
paymentInformation => ignore(),
|
|
vendorId => ignore(),
|
|
preferredPaymentType => ignore(),
|
|
paymentAddressId => ignore(),
|
|
dateCreated => ignore(),
|
|
url => 'http://www.shawshank.com',
|
|
userId => $fenceUser->userId,
|
|
name => 'Warden Norton',
|
|
},
|
|
'get: returns all properties'
|
|
);
|
|
|
|
$currentProps->{name} = 'Jake the Raven';
|
|
is($fence->get('name'), 'Warden Norton', 'get: No leakage returned hashref');
|
|
$fence->update({name => 'Bogs Diamond', });
|
|
|
|
#######################################################################
|
|
#
|
|
# newByUserId
|
|
#
|
|
#######################################################################
|
|
|
|
eval { $fenceCopy = WebGUI::Shop::Vendor->newByUserId(); };
|
|
$e = Exception::Class->caught();
|
|
isa_ok($e, 'WebGUI::Error::InvalidObject', 'newByUserId takes an exception to not giving it a session variable');
|
|
cmp_deeply(
|
|
$e,
|
|
methods(
|
|
error => 'Need a session.',
|
|
got => '',
|
|
expected => 'WebGUI::Session',
|
|
),
|
|
'create: requires a session variable',
|
|
);
|
|
|
|
eval { $fenceCopy = WebGUI::Shop::Vendor->newByUserId($session, 'neverAUserId'); };
|
|
$e = Exception::Class->caught();
|
|
isa_ok($e, 'WebGUI::Error::InvalidParam', 'newByUserId->new takes an exception to not giving it a bad user id that is in the db');
|
|
cmp_deeply(
|
|
$e,
|
|
methods(
|
|
error => 'Need a vendorId.',
|
|
),
|
|
'create: requires a session variable',
|
|
);
|
|
|
|
eval { $fenceCopy = WebGUI::Shop::Vendor->newByUserId($session, '1'); };
|
|
$e = Exception::Class->caught();
|
|
isa_ok($e, 'WebGUI::Error::InvalidParam', 'newByUserId->new takes an exception to not giving it a valid user id that is in the db');
|
|
cmp_deeply(
|
|
$e,
|
|
methods(
|
|
error => 'Need a vendorId.',
|
|
),
|
|
'create: requires a session variable',
|
|
);
|
|
|
|
eval { $fenceCopy = WebGUI::Shop::Vendor->newByUserId($session, $fenceUser->userId); };
|
|
$e = Exception::Class->caught();
|
|
ok(!$e, 'newByUserId: No exception thrown with explicit, valid data');
|
|
isa_ok($fenceCopy, 'WebGUI::Shop::Vendor', 'newByUserId returns correct type of object');
|
|
is($fenceCopy->getId, $fence->getId, 'newByUserId returned the correct object');
|
|
|
|
$session->user({user => $fenceUser});
|
|
|
|
eval { $fenceCopy = WebGUI::Shop::Vendor->newByUserId($session); };
|
|
$e = Exception::Class->caught();
|
|
ok(!$e, 'newByUserId: No exception thrown with implicit user data');
|
|
isa_ok($fenceCopy, 'WebGUI::Shop::Vendor', 'newByUserId returns correct type of object using session user');
|
|
is($fenceCopy->getId, $fence->getId, 'newByUserId returned the correct object using session user');
|
|
|
|
my $defaultVendor = WebGUI::Shop::Vendor->newByUserId($session, 3);
|
|
|
|
#######################################################################
|
|
#
|
|
# getVendors
|
|
#
|
|
#######################################################################
|
|
|
|
$guard = WebGUI::Shop::Vendor->create($session, { userId => $guardUser->userId, name => q|Warden Norton|});
|
|
WebGUI::Test->addToCleanup($guard);
|
|
my $vendorsList = WebGUI::Shop::Vendor->getVendors($session);
|
|
cmp_deeply(
|
|
$vendorsList,
|
|
[ $guard, $fence, $defaultVendor, ],
|
|
'getVendors returns all 3 vendors as an array ref'
|
|
);
|
|
|
|
my $vendorsHash = WebGUI::Shop::Vendor->getVendors($session, { asHashRef => 1 });
|
|
cmp_deeply(
|
|
$vendorsHash,
|
|
{
|
|
$guard->getId => $guard->get('name'),
|
|
$fence->getId => $fence->get('name'),
|
|
$defaultVendor->getId => $defaultVendor->get('name'),
|
|
},
|
|
'getVendors returns all 3 vendors as an hash ref, when requested'
|
|
);
|
|
|
|
|
|
#######################################################################
|
|
#
|
|
# delete
|
|
#
|
|
#######################################################################
|
|
|
|
$guard->delete();
|
|
$vendorsList = WebGUI::Shop::Vendor->getVendors($session);
|
|
cmp_deeply(
|
|
$vendorsList,
|
|
[ $fence, $defaultVendor, ],
|
|
'delete removed the correct vendor'
|
|
);
|
|
|
|
#######################################################################
|
|
#
|
|
# isVendorInfoComplete
|
|
#
|
|
#######################################################################
|
|
|
|
my %completeProps = (
|
|
name => 'Esquerita',
|
|
userId => $fenceUser->userId,
|
|
preferredPaymentType => 'PayPal',
|
|
paymentInformation => 'esquerita@example.com',
|
|
);
|
|
$fence->update( { %completeProps } );
|
|
is( $fence->isVendorInfoComplete, 1, 'Vendor information is complete' );
|
|
|
|
foreach (keys %completeProps ) {
|
|
$fence->update( { %completeProps, $_ => undef } );
|
|
ok( !$fence->isVendorInfoComplete, "Vendor information is not complete without $_" );
|
|
}
|
|
|
|
|
|
undef $guard;
|
|
|
|
#vim:ft=perl
|