webgui/t/Asset/Event.t

259 lines
9.4 KiB
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
#-------------------------------------------------------------------
use FindBin;
use strict;
use lib "$FindBin::Bin/../lib";
use WebGUI::Test;
use Test::More; # increment this value for each test you create
use Test::Deep;
plan tests => 31;
use WebGUI::Session;
use WebGUI::Storage;
use WebGUI::Asset::Event;
my $session = WebGUI::Test->session;
my $versionTag = WebGUI::VersionTag->getWorking($session);
$versionTag->set({name=>"Adding Calendar for Event Asset Test"});
WebGUI::Test->addToCleanup($versionTag);
my $defaultAsset = WebGUI::Asset->getDefault($session);
my $cal = $defaultAsset->addChild({className=>'WebGUI::Asset::Wobject::Calendar'});
$versionTag->commit;
my $properties = {
# '1234567890123456789012'
id => 'EventAssetTest00000001',
title => 'Birthday of WebGUI',
className => 'WebGUI::Asset::Event',
url => 'event-asset-test1',
startDate => '2000-08-16', ##Times and dates have to be entered in UTC
startTime => '23:00:00',
endDate => '2000-08-17',
endTime => '03:00:00',
timeZone => 'America/Chicago',
location => 'Madison, Wisconsin',
};
my $event = $cal->addChild($properties, $properties->{id});
is($event->isAllDay, 0, 'isAllDay is zero since it has a start and end time');
cmp_ok($event->getDateTimeEnd, '>', $event->getDateTimeEndNI, 'getDateTimeEndNI is less than getDateTimeEnd');
my %templateVars = $event->getTemplateVars();
is($templateVars{isOneDay}, 1, 'getTemplateVars: isOneDay with start times');
is($templateVars{dateSpan}, 'Wednesday, August 16 6:00 PM – 10:00 PM', 'getTemplateVars: dateSpan bridges times on a single day');
$properties->{startDate} = '2000-08-16';
$properties->{endDate} = '2000-08-16';
$properties->{startTime} = undef;
$properties->{endTime} = undef;
$properties->{id} = 'EventAssetTest00000002';
$properties->{url} = 'event-asset-test2';
my $event2 = $cal->addChild($properties, $properties->{id});
is($event2->isAllDay, 1, 'isAllDay is zero since it has no start or end time');
cmp_ok($event2->getDateTimeEnd, '==', $event2->getDateTimeEndNI, 'getDateTimeEndNI is the same as getDateTimeEnd, due to no end time');
%templateVars = $event2->getTemplateVars();
is($templateVars{dateSpan}, 'Wednesday, August 16', 'getTemplateVars: dateSpan with no times');
is($templateVars{isOneDay}, 1, 'getTemplateVars: isOneDay with start times');
$properties->{startDate} = '2000-08-16';
$properties->{endDate} = '2000-08-17';
$properties->{startTime} = undef;
$properties->{endTime} = undef;
$properties->{id} = 'EventAssetTest00000003';
$properties->{url} = 'event-asset-test3';
my $event3 = $cal->addChild($properties, $properties->{id});
is($event3->isAllDay, 1, 'isAllDay is zero since it has no start or end time, even on different days');
%templateVars = $event3->getTemplateVars();
is($templateVars{dateSpan}, 'Wednesday, August 16 • Thursday, August 17 ', 'getTemplateVars: dateSpan with no times, across two days');
is($templateVars{isOneDay}, 0, 'getTemplateVars: isOneDay with different start and end dates');
cmp_ok($event3->getDateTimeEnd, '==', $event3->getDateTimeEndNI, 'getDateTimeEndNI is the same as getDateTimeEnd');
$properties->{startDate} = '2000-08-30';
$properties->{endDate} = '2000-08-31';
$properties->{startTime} = '00:00:00';
$properties->{endTime} = '00:00:00';
$properties->{id} = 'EventAssetTest00000004';
$properties->{url} = 'event-asset-test4';
my $event4 = $cal->addChild($properties, $properties->{id});
cmp_ok($event4->getDateTimeEnd, '>', $event4->getDateTimeEndNI, 'getDateTimeEndNI is less than getDateTimeEnd');
is($event4->getIcalEnd, '20000831T000000Z', 'getIcalEnd, with defined time');
my $properties2 = {};
$properties2->{startDate} = '2000-08-31';
$properties2->{endDate} = '2000-08-31';
$properties2->{id} = 'EventAssetTest00000005';
$properties2->{url} = 'event-asset-test5';
$properties2->{className} = 'WebGUI::Asset::Event';
my $event5 = $cal->addChild($properties2, $properties2->{id});
is($event5->getIcalStart, '20000831', 'getIcalStart, with no start time');
is($event5->getIcalEnd, '20000901', 'getIcalEnd, with no end time, day incremented');
my $properties3 = {};
$properties3->{startDate} = '2000-08-31';
$properties3->{endDate} = '2000-08-31';
$properties3->{id} = 'EventAssetTestStorage6';
$properties3->{url} = 'event-asset-test6';
$properties3->{className} = 'WebGUI::Asset::Event';
my $eventStorage = WebGUI::Storage->create($session);
WebGUI::Test->addToCleanup($eventStorage);
$properties3->{storageId} = $eventStorage->getId;
my $event6 = $cal->addChild($properties3, $properties3->{id}, time()-5);
my $event6a = $event6->addRevision({ title => 'Event with storage', }, undef, { skipAutoCommitWorkflows => 1, });
ok($session->id->valid($event6a->get('storageId')), 'addRevision gives the new revision a valid storageId');
isnt($event6a->get('storageId'), $event6->get('storageId'), '... and it is different from the previous revision');
my $versionTag2 = WebGUI::VersionTag->getWorking($session);
WebGUI::Test->addToCleanup($versionTag2);
my $event7 = $cal->addChild({
className => 'WebGUI::Asset::Event',
startDate => '2000-08-31',
startTime => '24:00:00',
endDate => '2000-09-01',
endTime => '24:00:00',
});
is ($event7->get('startTime'), '00:00:00', 'startTime set to 00:00:00 if the hour is more than 23');
is ($event7->get('startDate'), '2000-09-01', 'startDate bumped by 1 day');
is ($event7->get('endTime'), '00:00:00', 'endTime set to 00:00:00 if the hour is more than 23');
is ($event7->get('endDate'), '2000-09-02', 'endDate bumped by 1 day');
#############################################################################
# Valid dates
$session->request->setup_body({ startDate => '0000-00-01', endDate => '1000-00-01' });
my $event = $cal->addChild({ className => 'WebGUI::Asset::Event' }, undef, time()+10);
my $output = $event->processPropertiesFromFormPost;
is( ref $output, 'ARRAY', 'ppffp returns error array' );
is( scalar @$output, 2, 'has two errors' );
#######################################
#
# setRelatedLinks, getRelatedLinks
#
#######################################
$event6->setRelatedLinks([
{
new_event => 1,
sequenceNumber => 1,
linkurl => 'http://www.nowhere.com',
linktext => 'Great link',
groupIdView => '7',
eventlinkId => '27',
},
{
new_event => 1,
sequenceNumber => 2,
linkurl => 'http://www.somewhere.com',
linktext => 'Another great link',
groupIdView => '2',
eventlinkId => '28',
},
]);
$session->user({userId => 3}); # admin can see all the links
cmp_deeply(
$event6->getRelatedLinks(),
[{
sequenceNumber => 1,
linkURL => 'http://www.nowhere.com',
linktext => 'Great link',
groupIdView => '7',
eventlinkId => '27',
assetId => $event6->getId,
},
{
sequenceNumber => 2,
linkURL => 'http://www.somewhere.com',
linktext => 'Another great link',
groupIdView => '2',
eventlinkId => '28',
assetId => $event6->getId,
}],
'related links stored in the database correctly'
);
$session->user({userId => 1}); # visitor can only see one link
cmp_deeply(
$event6->getRelatedLinks(),
[{
sequenceNumber => 1,
linkURL => 'http://www.nowhere.com',
linktext => 'Great link',
groupIdView => '7',
eventlinkId => '27',
assetId => $event6->getId,
}],
'related links:user access restriction works'
);
#######################################
#
# duplicate
#
#######################################
my $event6b = $event6->duplicate();
ok($session->id->valid($event6b->get('storageId')), 'duplicated event got a valid storageId');
isnt($event6b->get('storageId'), $event6->get('storageId'), 'duplicating an asset creates a new storage location');
$session->user({userId => 3}); # admin can see all the links
cmp_deeply(
$event6b->getRelatedLinks(),
[{
sequenceNumber => 1,
linkURL => 'http://www.nowhere.com',
linktext => 'Great link',
groupIdView => '7',
eventlinkId => ignore(),
assetId => $event6b->getId,
},
{
sequenceNumber => 2,
linkURL => 'http://www.somewhere.com',
linktext => 'Another great link',
groupIdView => '2',
eventlinkId => ignore(),
assetId => $event6b->getId,
}],
'duplicated event has relatedLinks'
);
$session->user({userId => 1}); # run remaining tests as visitor
#######################################
#
# purge
#
#######################################
{
my $storage = $event6b->getStorageLocation;
my $assetId = $event6b->getId;
$event6b->purge;
my $count = $session->db->quickScalar('select count(*) from Event_relatedlink where assetId=?',[$assetId]);
is $count, 0, 'purge: related links cleaned up in the database';
ok ! -d $storage->getPath(), '... storage location removed, too';
}