releaseRequestHold(): Implement & update tests.

Some of these tests were written a while ago, and the function never
implemented.  It is now implemented and test are updated.
This commit is contained in:
Bradley M. Kuhn 2017-11-26 14:32:17 -08:00
parent a3ea7a58df
commit 99650b23ee
2 changed files with 77 additions and 2 deletions

View file

@ -1447,7 +1447,72 @@ sub holdRequest($$) {
} }
return $holdRecord->{$requestId}{id}; return $holdRecord->{$requestId}{id};
} }
######################################################################
=begin releaseRequestHold
Arguments:
=item $parmas
A hash reference, the following keys are considered:
=over
=item donorId
Valid donor_id number currently in the database. die() will occur if
the id number is not in the database already as a supporter id.
=item requestType / requestTypeId
If one or both of these parameters is defined, they are used as arguments
to C<getRequest()> method. die()'s if neither is defined.
=back
Returns:
If the release has been successful, returns the id of the hold request that
is now released. Otherwise, undef is returned.
Note that the release can also be "unsuccessful" if the request wasn't on
hold in the first place.
=cut
sub releaseRequestHold($$) {
my($self, $params) = @_;
die "holdRequest: undefined donorId" unless defined $params->{donorId};
my $donorId = $params->{donorId};
die "holdRequest: donorId, \"$donorId\" not found in supporter database"
unless $self->_verifyId($donorId);
die "holdRequest: requestType and requestTypeId are all undefined"
unless defined $params->{requestType} or defined $params->{requestTypeId};
my $req = $self->getRequest($params);
return undef if not defined $req;
my $requestId = $req->{requestId};
return undef if not defined $requestId;
my $holdLookupSql = "SELECT id, request_id, release_date FROM request_hold WHERE request_id = " .
$self->dbh->quote($requestId, 'SQL_INTEGER');
my $holdRecord = $self->dbh()->selectall_hashref($holdLookupSql, "request_id");
return undef if (not defined $holdRecord or not defined $holdRecord->{$requestId});
# If this has already been released, just return the release id again.
return $holdRecord->{$requestId}{id} if defined $holdRecord->{$requestId}{release_date} and
$holdRecord->{$requestId}{release_date} le $TODAY;
$self->_beginWork;
my $sth = $self->dbh->prepare("UPDATE request_hold SET release_date = date('now') WHERE id = ?");
$sth->execute($holdRecord->{$requestId}{id});
$sth->finish;
$self->_commit;
return $holdRecord->{$requestId}{id};
}
###################################################################### ######################################################################
=begin findDonor =begin findDonor

View file

@ -8,7 +8,7 @@
use strict; use strict;
use warnings; use warnings;
use Test::More tests => 334; use Test::More tests => 341;
use Test::Exception; use Test::Exception;
use Sub::Override; use Sub::Override;
use File::Temp qw/tempfile/; use File::Temp qw/tempfile/;
@ -762,9 +762,19 @@ is($tt->{notes}, undef, "getRequest: notes are undef when null in database.")
my $releasedHoldId; my $releasedHoldId;
lives_ok { $releasedHoldId = $sp->releaseRequestHold(donorId => $drapperId, requestType => 't-shirt-0'); } lives_ok { $releasedHoldId = $sp->releaseRequestHold({ donorId => $drapperId, requestType => 't-shirt-0' }); }
"releaseRequestHold: release of a known held request succeeds..."; "releaseRequestHold: release of a known held request succeeds...";
is($releasedHoldId, $drapperTShirt0HoldId, "releaseRequestHold: ... & returns same hold id as holdRequest() call did"); is($releasedHoldId, $drapperTShirt0HoldId, "releaseRequestHold: ... & returns same hold id as holdRequest() call did");
lives_ok { $req = $sp->getRequest({ donorId => $drapperId, requestType => 't-shirt-0'}) }
"releaseRequestHold: lookup of request after release succeeds....";
is($req->{holdReleaseDate}, $today, "... and the release date is today.");
lives_ok { $releasedHoldId = $sp->releaseRequestHold({ donorId => $drapperId, requestType => 't-shirt-0' }); }
"releaseRequestHold: release again of the same a hold request also succeeds...";
is($releasedHoldId, $drapperTShirt0HoldId, "releaseRequestHold: ... & also returns same hold id as holdRequest() call did");
lives_ok { $req = $sp->getRequest({ donorId => $drapperId, requestType => 't-shirt-0'}) }
"releaseRequestHold: lookup of request after second release succeeds....";
is($req->{holdReleaseDate}, $today, "... and the release date is still set to today.");
lives_ok { $newFRID = $sp->fulfillRequest( { donorId => $drapperId, lives_ok { $newFRID = $sp->fulfillRequest( { donorId => $drapperId,