238 lines
8.6 KiB
Perl
238 lines
8.6 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 WebGUI::Session;
|
|
use WebGUI::Utility;
|
|
use WebGUI::Workflow::Activity::CalendarUpdateFeeds;
|
|
|
|
use Test::More;
|
|
use Test::Deep;
|
|
use Test::LongString;
|
|
use WebGUI::Asset::Wobject::Calendar;
|
|
|
|
plan skip_all => 'set WEBGUI_LIVE to enable this test'
|
|
unless $ENV{WEBGUI_LIVE};
|
|
|
|
plan tests => 27; # increment this value for each test you create
|
|
|
|
my $session = WebGUI::Test->session;
|
|
|
|
my $home = WebGUI::Asset->getDefault($session);
|
|
my $sender = $home->addChild({
|
|
className => 'WebGUI::Asset::Wobject::Calendar',
|
|
title => 'Sending Calendar',
|
|
});
|
|
my $receiver = $home->addChild({
|
|
className => 'WebGUI::Asset::Wobject::Calendar',
|
|
title => 'Receiving Calendar',
|
|
});
|
|
|
|
my $feedId = $receiver->addFeed({
|
|
url => $session->url->getSiteURL.$session->url->gateway($sender->getUrl('func=ical')),
|
|
lastUpdated => 'never',
|
|
});
|
|
|
|
my $dt = WebGUI::DateTime->new($session, time());
|
|
$dt->add(days => 1);
|
|
|
|
my $party = $sender->addChild({
|
|
className => 'WebGUI::Asset::Event',
|
|
title => 'WebGUI 100th Anniversary',
|
|
menuTitle => 'Anniversary',
|
|
description => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum', ##Set at longer than 72 characters to test for line wrapping, and character escaping
|
|
url => 'webgui_anniversary',
|
|
startDate => $dt->toDatabaseDate, ##Times and dates have to be entered in UTC
|
|
endDate => $dt->toDatabaseDate,
|
|
timeZone => 'America/Chicago',
|
|
location => 'Madison, Wisconsin',
|
|
groupIdView => 7,
|
|
groupIdEdit => 12,
|
|
ownerUserId => 3,
|
|
}, undef, undef, {skipAutoCommitWorkflows => 1});
|
|
|
|
my $ical_feed = <<"EOICAL";
|
|
BEGIN:VCALENDAR
|
|
PRODID:-//Oregon State University//NONSGML Web Calendar//EN
|
|
VERSION:2.0
|
|
BEGIN:VEVENT
|
|
UID:20110426T010000Z-51795\@calendar.oregonstate.edu
|
|
CLASS:PUBLIC
|
|
SUMMARY:CPR/AED for the Professional Rescuer
|
|
DESCRIPTION:This class is designed for any individual who has a duty to res
|
|
pond to emergencies. It combines lectures and video with hands-on sk
|
|
ill training and it incorporates real-life rescue scenarios and lessons th
|
|
at reinforce decision-making skills. This class covers Adult/Child A
|
|
ED & CPR and Infant CPR; two-person CPR; use of a bag-valve mask; a
|
|
nd introduction to Emergency Medical Services and bloodbourne pathogens.**
|
|
This course meets Level C CPR requirements. It is the pre-requisite
|
|
for most nursing and EMT programs. ** Course continues Tuesday \
|
|
;April 26, 6:00pm - 10:00pm Dixon Upper Classroom.
|
|
DTSTART:20110426T010000Z
|
|
DTEND:20110426T050000Z
|
|
LAST-MODIFIED:20110301T215024Z
|
|
CREATED:20110301T215024Z
|
|
DTSTAMP:20110301T215024Z
|
|
CONTACT:Recreation Services
|
|
END:VEVENT
|
|
END:VCALENDAR
|
|
EOICAL
|
|
|
|
my $snippet_feed = $home->addChild({
|
|
className => 'WebGUI::Asset::Snippet',
|
|
url => 'icalFeed.ics',
|
|
snippet => $ical_feed,
|
|
mimeType => 'text/calendar',
|
|
});
|
|
|
|
my $tag = WebGUI::VersionTag->getWorking($session);
|
|
$tag->commit;
|
|
WebGUI::Test->addToCleanup($tag);
|
|
|
|
$snippet_feed = $snippet_feed->cloneFromDb;
|
|
|
|
my $workflow = WebGUI::Workflow->create($session,
|
|
{
|
|
enabled => 1,
|
|
objectType => 'None',
|
|
mode => 'realtime',
|
|
},
|
|
);
|
|
WebGUI::Test->addToCleanup($workflow);
|
|
my $icalFetch = $workflow->addActivity('WebGUI::Workflow::Activity::CalendarUpdateFeeds');
|
|
|
|
my $instance1 = WebGUI::Workflow::Instance->create($session,
|
|
{
|
|
workflowId => $workflow->getId,
|
|
skipSpectreNotification => 1,
|
|
}
|
|
);
|
|
|
|
my $oldEvents = $receiver->getLineage(['children'], { returnObjects => 1, });
|
|
is(scalar @{ $oldEvents }, 0, 'receiving calendar has no events');
|
|
|
|
my $retVal;
|
|
|
|
$retVal = $instance1->run();
|
|
is($retVal, 'complete', 'cleanup: activity complete');
|
|
$retVal = $instance1->run();
|
|
is($retVal, 'done', 'cleanup: activity is done');
|
|
$instance1->delete;
|
|
|
|
my $newEvents = $receiver->getLineage(['children'], { returnObjects => 1, });
|
|
|
|
my $got_anniversary = is(scalar @{ $newEvents }, 1, 'ical import of 1 event');
|
|
|
|
SKIP: {
|
|
skip "No event recieved", 15 unless $got_anniversary;
|
|
my $anniversary = pop @{ $newEvents };
|
|
|
|
is($anniversary->get('title'), $party->get('title'), 'transferred title');
|
|
is($anniversary->get('menuTitle'), $party->get('menuTitle'), '... menuTitle');
|
|
is($anniversary->get('groupIdView'), $party->get('groupIdView'), '... groupIdView');
|
|
is($anniversary->get('groupIdEdit'), $party->get('groupIdEdit'), '... groupIdEdit');
|
|
is($anniversary->get('url'), $party->get('url').'2', '... url (accounting for duplicate)');
|
|
is($anniversary->get('timeZone'), $party->get('timeZone'), '... timeZone');
|
|
is($anniversary->get('startDate'), $party->get('startDate'), '... startDate');
|
|
is($anniversary->get('startTime'), $party->get('startTime'), '... startTime');
|
|
is($anniversary->get('endDate'), $party->get('endDate'), '... endDate');
|
|
is($anniversary->get('endTime'), $party->get('endTime'), '... endTime');
|
|
is_string($anniversary->get('description'), $party->get('description'), '... description, checks for line wrapping');
|
|
|
|
$party->update({description => "one line\nsecond line"});
|
|
|
|
my $instance2 = WebGUI::Workflow::Instance->create($session,
|
|
{
|
|
workflowId => $workflow->getId,
|
|
skipSpectreNotification => 1,
|
|
}
|
|
);
|
|
|
|
$retVal = $instance2->run();
|
|
is($retVal, 'complete', 'cleanup: 2nd activity complete');
|
|
$retVal = $instance2->run();
|
|
is($retVal, 'done', 'cleanup: 2nd activity is done');
|
|
|
|
$newEvents = $receiver->getLineage(['children'], { returnObjects => 1, });
|
|
|
|
is(scalar @{ $newEvents }, 1, 'reimport does not create new children');
|
|
$anniversary = pop @{ $newEvents };
|
|
is($anniversary->get('description'), $party->get('description'), '... description, checks for line unwrapping');
|
|
$anniversary->purge;
|
|
}
|
|
|
|
##Add an ical feed to check time zone processing
|
|
|
|
$receiver->deleteFeed($feedId);
|
|
$feedId = $receiver->addFeed({
|
|
url => $session->url->getSiteURL.$snippet_feed->getUrl,
|
|
lastUpdated => 'never',
|
|
});
|
|
|
|
$oldEvents = $receiver->getLineage(['children'], { returnObjects => 1, });
|
|
is(scalar @{ $oldEvents }, 0, 'receiving calendar has no events');
|
|
|
|
$instance1->delete('skipNotify');
|
|
$instance1 = WebGUI::Workflow::Instance->create($session,
|
|
{
|
|
workflowId => $workflow->getId,
|
|
skipSpectreNotification => 1,
|
|
}
|
|
);
|
|
|
|
my $retVal;
|
|
|
|
$retVal = $instance1->run();
|
|
is($retVal, 'complete', 'cleanup: activity complete');
|
|
$retVal = $instance1->run();
|
|
is($retVal, 'done', 'cleanup: activity is done');
|
|
$instance1->delete;
|
|
|
|
$newEvents = $receiver->getLineage(['children'], { returnObjects => 1, });
|
|
|
|
my $got_cpr = is(scalar @{ $newEvents }, 1, 'ical import of 1 event');
|
|
|
|
##Add a feed that will fail, to test that feeds are not modified
|
|
$receiver->deleteFeed($feedId);
|
|
my $feedUrl = $session->url->getSiteURL.'do_not_hack_my_url';
|
|
$feedId = $receiver->addFeed({
|
|
url => $feedUrl,
|
|
lastUpdated => 'never',
|
|
});
|
|
|
|
$instance1->delete('skipNotify');
|
|
$instance1 = WebGUI::Workflow::Instance->create($session,
|
|
{
|
|
workflowId => $workflow->getId,
|
|
skipSpectreNotification => 1,
|
|
}
|
|
);
|
|
|
|
my $retVal;
|
|
|
|
$retVal = $instance1->run();
|
|
is($retVal, 'complete', 'cleanup: activity complete');
|
|
$retVal = $instance1->run();
|
|
is($retVal, 'done', 'cleanup: activity is done');
|
|
$instance1->delete;
|
|
|
|
$receiver = $receiver->cloneFromDb;
|
|
my $feed = $receiver->getFeed($feedId);
|
|
|
|
##Note, cannot use Test::Deep in here because Asset/Event.pm use Test::Deep::NoTest
|
|
|
|
is $feed->{lastResult}, 'Error parsing iCal feed', 'After fetching a bad feed it updated the lastResult';
|
|
is $feed->{url}, $feedUrl, '... nothing added to feed URL';
|
|
|
|
#vim:ft=perl
|