From e4b18757d81f61a9c6acbb99a606bcad66c349a4 Mon Sep 17 00:00:00 2001 From: Patrick Donelan Date: Tue, 20 Oct 2009 16:50:00 +1100 Subject: [PATCH] Fixes bug in ExpireIncompleteSurveyResponses Use a left outer join on userProfileData so that the workflow processes responses for users that have been deleted --- docs/changelog/7.x.x.txt | 1 + .../Workflow/Activity/ExpireIncompleteSurveyResponses.pm | 4 ++-- t/Workflow/Activity/ExpireIncompleteSurveyResponses.t | 9 ++++++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 67acc0692..aa9a5baae 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -28,6 +28,7 @@ - fixed #11137: Customers see failed orders - fixed #11156: Syndicated Content doesn't show all headlines in feed - fixed #11138: RichEdit, upload image does not commit a version tag + - fixed ExpireIncompleteSurveyResponses Workflow: process responses for deleted users 7.8.1 - mark $session->datetime->time as deprecated and remove its use from core code diff --git a/lib/WebGUI/Workflow/Activity/ExpireIncompleteSurveyResponses.pm b/lib/WebGUI/Workflow/Activity/ExpireIncompleteSurveyResponses.pm index 03b836d9d..73d2baf16 100644 --- a/lib/WebGUI/Workflow/Activity/ExpireIncompleteSurveyResponses.pm +++ b/lib/WebGUI/Workflow/Activity/ExpireIncompleteSurveyResponses.pm @@ -159,6 +159,7 @@ Factored out into a separate subroutine for the sake of testability. sub getSql { + # Use a left outer join on userProfileData so that we still get back responses for users that have been deleted return < 0 @@ -175,7 +176,6 @@ where and ad.assetId = s.assetId and ad.revisionDate = s.revisionDate and s.revisionDate = r.revisionDate - and upd.userId = r.userId END_SQL } diff --git a/t/Workflow/Activity/ExpireIncompleteSurveyResponses.t b/t/Workflow/Activity/ExpireIncompleteSurveyResponses.t index d80df1019..8dc6a208f 100644 --- a/t/Workflow/Activity/ExpireIncompleteSurveyResponses.t +++ b/t/Workflow/Activity/ExpireIncompleteSurveyResponses.t @@ -13,7 +13,7 @@ my $session = WebGUI::Test->session; #---------------------------------------------------------------------------- # Tests -plan tests => 25; +plan tests => 26; use_ok('WebGUI::Workflow::Activity::ExpireIncompleteSurveyResponses'); @@ -127,6 +127,13 @@ $session->db->write('update Survey_response set endDate = 0, isComplete = 0 wher # Make sure SQL only returns 1 incomplete response is( scalar $session->db->buildArray($SQL), 1, 'Make sure SQL only returns 1 incomplete response'); +## +# Make sure workflow handles responses for deleted users +# +$session->db->write('update Survey_response set userId = ? where Survey_responseId = ?', ['not-a-user-id', $responseId]); +is( scalar $session->db->buildArray($SQL), 1, 'Still returns 1 row, even though user does not exist (sql left outer join)'); +$session->db->write('update Survey_response set userId = ? where Survey_responseId = ?', [$user->getId, $responseId]); + ## # Delete Expired ##