added WaitForUserConfirmation activity
This commit is contained in:
parent
4aeb70d323
commit
182fc16021
9 changed files with 526 additions and 3 deletions
110
t/Workflow/Activity/WaitForUserConfirmation.t
Normal file
110
t/Workflow/Activity/WaitForUserConfirmation.t
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
use warnings;
|
||||
use strict;
|
||||
|
||||
use FindBin;
|
||||
use lib "$FindBin::Bin/../../lib";
|
||||
use lib "$FindBin::Bin/../../t/lib";
|
||||
|
||||
use WebGUI::Test;
|
||||
use Test::More tests => 28;
|
||||
use Test::MockObject;
|
||||
use Test::MockObject::Extends;
|
||||
use WebGUI::Workflow::Activity;
|
||||
use Kwargs;
|
||||
use URI;
|
||||
|
||||
my $session = WebGUI::Test->session;
|
||||
|
||||
my $act = WebGUI::Workflow::Activity->newByPropertyHashRef(
|
||||
$session, {
|
||||
className => 'WebGUI::Workflow::Activity::WaitForUserConfirmation',
|
||||
activityId => 'test-activity',
|
||||
expireAfter => 60*60*24,
|
||||
waitBetween => 60*5,
|
||||
emailFrom => 3,
|
||||
emailSubject => 'Confirmation Email',
|
||||
templateParser => 'WebGUI::Asset::Template::TemplateToolkit',
|
||||
template => 'Hey [% user.firstName %] [% user.lastName %], '
|
||||
. 'click $link!',
|
||||
}
|
||||
);
|
||||
|
||||
is $act->wait, $act->WAITING(60*5), 'wait helper method';
|
||||
|
||||
$act = Test::MockObject::Extends->new($act);
|
||||
|
||||
my (%scratch, %profile);
|
||||
%profile = (
|
||||
email => 'target@test.com',
|
||||
firstName => 'Target',
|
||||
lastName => 'Targetson',
|
||||
);
|
||||
|
||||
my $user = Test::MockObject->new
|
||||
->mock(get => sub { \%profile })
|
||||
->mock(userId => sub { 'test-user-id' });
|
||||
|
||||
my $workflow = Test::MockObject->new
|
||||
->mock(setScratch => sub { $scratch{$_[1]} = $_[2] })
|
||||
->mock(getScratch => sub { $scratch{$_[1]} })
|
||||
->mock(getId => sub { 'test-workflow' });
|
||||
|
||||
my ($expired, $sent) = (0,0);
|
||||
$act->mock(sendEmail => sub { $sent++ })
|
||||
->mock(expire => sub { $expired++ })
|
||||
->mock(now => sub { 100 })
|
||||
->mock(token => sub { 'test-token' });
|
||||
|
||||
my $st = 'test-activity-status';
|
||||
|
||||
sub ex { $act->execute($user, $workflow) }
|
||||
sub clr {
|
||||
delete @scratch{'test-activity-started', $st};
|
||||
$sent = 0;
|
||||
$expired = 0;
|
||||
}
|
||||
|
||||
is ex, $act->wait, 'from scratch returns waiting';
|
||||
is $sent, 1, 'one email sent';
|
||||
is $scratch{$st}, 'waiting', 'scratch is waiting';
|
||||
is $scratch{'test-activity-started'}, 100, 'started at mocked time';
|
||||
is ex, $act->wait, 'still waiting';
|
||||
is $sent, 1, 'did not send second email';
|
||||
is $scratch{$st}, 'waiting', 'scratch still waiting';
|
||||
$scratch{$st} = 'done';
|
||||
is ex, $act->COMPLETE, 'returns complete after done';
|
||||
is ex, $act->COMPLETE, 'forever';
|
||||
is $expired, 0, 'not expired though';
|
||||
clr;
|
||||
is $act->execute($user, $workflow), $act->wait, 'waiting after clear';
|
||||
is $sent, 1, 'one email sent';
|
||||
$act->mock(now => sub { 60*60*24+101 });
|
||||
is ex, $act->COMPLETE, 'complete after expired';
|
||||
is $scratch{$st}, 'expired', 'expired status';
|
||||
is $expired, 1, 'expire called';
|
||||
|
||||
clr;
|
||||
my ($self, $to, $from, $subject, $body);
|
||||
$act->mock(
|
||||
sendEmail => sub {
|
||||
($self, $to, $from, $subject, $body) = kwn @_, 1,
|
||||
qw(to from subject body);
|
||||
}
|
||||
);
|
||||
ex;
|
||||
is $to, $user->userId, 'to';
|
||||
is $from, 3, 'from';
|
||||
is $subject, 'Confirmation Email', 'subject';
|
||||
my $link = URI->new($act->link($workflow));
|
||||
my %p = $link->query_form;
|
||||
is $body, "Hey Target Targetson, click $link!", 'body';
|
||||
is $p{token}, 'test-token', 'token in link';
|
||||
is $p{instanceId}, 'test-workflow', 'instance id in link';
|
||||
is $p{activityId}, 'test-activity', 'activity id in link';
|
||||
$act->unmock('token');
|
||||
is $act->link($workflow), $link, 'token only generated once';
|
||||
|
||||
ok !$act->confirm($workflow, 'not-the-token'), 'bad token';
|
||||
is $scratch{$st}, 'waiting', 'wait after bad';
|
||||
ok $act->confirm($workflow, 'test-token'), 'good token';
|
||||
is $scratch{$st}, 'done', 'done after good';
|
||||
Loading…
Add table
Add a link
Reference in a new issue