From dbeb98d0f220bfbca7bfb8676b783b083c20ce87 Mon Sep 17 00:00:00 2001 From: "Bradley M. Kuhn" Date: Wed, 30 Dec 2015 20:53:28 -0800 Subject: [PATCH] findDonor: empty criteria finds everyone. Rather than die() when the criteria list is empty, instead return the entire list. --- Supporters/lib/Supporters.pm | 9 +++++++-- Supporters/t/Supporters.t | 15 +++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/Supporters/lib/Supporters.pm b/Supporters/lib/Supporters.pm index 983eea6..27392f0 100644 --- a/Supporters/lib/Supporters.pm +++ b/Supporters/lib/Supporters.pm @@ -1081,6 +1081,8 @@ Arguments: A hash reference, the following keys are considered, and are "anded" together -- in that the donor sought must have all these criteria to be found. +If no criteria are given, all donors are returned. + =over =item emailAddress @@ -1104,8 +1106,11 @@ Returns a list of donorIds that meets the criteria, or none if not found. sub findDonor($$) { my($self, $params) = @_; - die "findDonor: no search criteria given" - unless defined $params->{ledgerEntityId} or defined $params->{emailAddress}; + + unless (defined $params->{ledgerEntityId} or defined $params->{emailAddress}) { + my $rr = $self->dbh()->selectall_hashref("SELECT id FROM donor", 'id'); + return keys %$rr; + } my @donorIds; if (not defined $params->{emailAddress}) { diff --git a/Supporters/t/Supporters.t b/Supporters/t/Supporters.t index 78ecc27..2eefad3 100644 --- a/Supporters/t/Supporters.t +++ b/Supporters/t/Supporters.t @@ -8,7 +8,7 @@ use strict; use warnings; -use Test::More tests => 259; +use Test::More tests => 260; use Test::Exception; use Sub::Override; use File::Temp qw/tempfile/; @@ -692,8 +692,15 @@ is($ret, 'drapper@example.org', "getPreferredEmailAddress: ....and returns the c my @lookupDonorIds; -dies_ok { @lookupDonorIds = $sp->findDonor({}); } - "findDonor: no search criteria dies"; +lives_ok { @lookupDonorIds = $sp->findDonor({}); } + "findDonor: no search criteria succeeds and..."; + +my(%vals); +@vals{@lookupDonorIds} = @lookupDonorIds; + +is_deeply(\%vals, { $campbellId => $campbellId, $sterlingId => $sterlingId, + $olsonId => $olsonId, $drapperId => $drapperId }, + "findDonor: ... and returns all donorIds."); lives_ok { @lookupDonorIds = $sp->findDonor({ledgerEntityId => "NotFound" }); } "findDonor: 1 lookup of known missing succeeds ..."; @@ -733,7 +740,7 @@ is_deeply(\@lookupDonorIds, [$olsonId], "findDonor: ... and finds right entry.") lives_ok { @lookupDonorIds = $sp->findDonor({emailAddress => 'everyone@example.net'}); } "findDonor: single criteria find expecting multiple records succeeds..."; -my(%vals); +%vals = (); @vals{@lookupDonorIds} = @lookupDonorIds; is_deeply(\%vals, { $olsonId => $olsonId, $drapperId => $drapperId }, "findDonor: ... and finds the right entires.");