aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Arter <davea@mysociety.org>2018-10-25 13:03:22 +0100
committerDave Arter <davea@mysociety.org>2018-10-26 09:53:44 +0100
commit0b127a05a982eca9de214ce2d524b244e8c934ec (patch)
tree7c59fb0e8142f7410cedb28aa2b7d6ff9461fbb6
parentd20ccf50a1cd7f844316d3db8809db74d813152b (diff)
Don’t send questionnaires for closed reports.
Fixes mysociety/fixmystreet-freshdesk#24.
-rw-r--r--CHANGELOG.md1
-rw-r--r--perllib/FixMyStreet/Script/Questionnaires.pm4
-rw-r--r--t/app/controller/questionnaire.t20
-rw-r--r--t/app/model/questionnaire.t9
4 files changed, 29 insertions, 5 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 76e1e0170..36db9efd4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,7 @@
- Fix subcategory issues when visiting /report/new directly #2276
- Give superusers access to update staff dropdowns. #2286
- Update report areas when moving its location. #2181
+ - Don't send questionnaires for closed reports. #2310
- Development improvements:
- Add cobrand hook for dashboard viewing permission. #2285
- Have body.url work in hashref lookup. #2284
diff --git a/perllib/FixMyStreet/Script/Questionnaires.pm b/perllib/FixMyStreet/Script/Questionnaires.pm
index bcdaa06d6..aab4b9b75 100644
--- a/perllib/FixMyStreet/Script/Questionnaires.pm
+++ b/perllib/FixMyStreet/Script/Questionnaires.pm
@@ -53,7 +53,9 @@ sub send_questionnaires_period {
# Cobrands can also override sending per row if they wish
my $cobrand_send = $cobrand->call_hook('send_questionnaire', $row) // 1;
- if ($row->is_from_abuser || !$row->user->email_verified || !$cobrand_send) {
+ if ($row->is_from_abuser || !$row->user->email_verified ||
+ !$cobrand_send || $row->is_closed
+ ) {
$row->update( { send_questionnaire => 0 } );
next;
}
diff --git a/t/app/controller/questionnaire.t b/t/app/controller/questionnaire.t
index bfc61ae17..05aed7262 100644
--- a/t/app/controller/questionnaire.t
+++ b/t/app/controller/questionnaire.t
@@ -40,6 +40,26 @@ my $report = FixMyStreet::App->model('DB::Problem')->find_or_create(
my $report_id = $report->id;
ok $report, "created test report - $report_id";
+# Make sure questionnaires aren't sent if the report is closed.
+foreach my $state (
+ 'closed', 'duplicate', 'not responsible', 'unable to fix', 'internal referral'
+) {
+ subtest "questionnaire not sent for $state state" => sub {
+ $report->update( { send_questionnaire => 1, state => $state } );
+ $report->questionnaires->delete;
+ FixMyStreet::App->model('DB::Questionnaire')->send_questionnaires( {
+ site => 'fixmystreet'
+ } );
+
+ $mech->email_count_is(0);
+
+ $report->discard_changes;
+ is $report->send_questionnaire, 0;
+ }
+}
+$report->update( { send_questionnaire => 1, state => 'confirmed' } );
+$report->questionnaires->delete;
+
# Call the questionaire sending function...
FixMyStreet::App->model('DB::Questionnaire')->send_questionnaires( {
site => 'fixmystreet'
diff --git a/t/app/model/questionnaire.t b/t/app/model/questionnaire.t
index d01185375..aa684a68c 100644
--- a/t/app/model/questionnaire.t
+++ b/t/app/model/questionnaire.t
@@ -85,19 +85,19 @@ for my $test (
},
{
state => 'duplicate',
- send_email => 1,
+ send_email => 0,
},
{
state => 'unable to fix',
- send_email => 1,
+ send_email => 0,
},
{
state => 'not responsible',
- send_email => 1,
+ send_email => 0,
},
{
state => 'closed',
- send_email => 1,
+ send_email => 0,
},
) {
subtest "correct questionnaire behaviour for state $test->{state}" => sub {
@@ -129,6 +129,7 @@ for my $test (
}, sub {
$problem->latitude($test->{latitude});
$problem->send_questionnaire(1);
+ $problem->state('confirmed');
$problem->update;
$problem->questionnaires->delete;