aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/App/Controller/Report.pm4
-rw-r--r--perllib/FixMyStreet/Cobrand/Default.pm10
-rw-r--r--t/app/controller/report_inspect.t21
3 files changed, 31 insertions, 4 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Report.pm b/perllib/FixMyStreet/App/Controller/Report.pm
index ad26ecf84..5c34630c4 100644
--- a/perllib/FixMyStreet/App/Controller/Report.pm
+++ b/perllib/FixMyStreet/App/Controller/Report.pm
@@ -377,7 +377,9 @@ sub inspect : Private {
unless ($problem->get_extra_metadata('inspected')) {
$problem->set_extra_metadata( inspected => 1 );
$c->forward( '/admin/log_edit', [ $problem->id, 'problem', 'inspected' ] );
- $reputation_change = 1;
+ my $state = $problem->state;
+ $reputation_change = 1 if $c->cobrand->reputation_increment_states->{$state};
+ $reputation_change = -1 if $c->cobrand->reputation_decrement_states->{$state};
}
}
}
diff --git a/perllib/FixMyStreet/Cobrand/Default.pm b/perllib/FixMyStreet/Cobrand/Default.pm
index 1fdbe9de2..b8767ab73 100644
--- a/perllib/FixMyStreet/Cobrand/Default.pm
+++ b/perllib/FixMyStreet/Cobrand/Default.pm
@@ -1188,6 +1188,16 @@ sub category_extra_hidden {
return 0;
}
+=head2 reputation_increment_states/reputation_decrement_states
+
+Get a hashref of states that cause the reporting user's reputation to be
+incremented/decremented, if a report is changed to this state upon inspection.
+
+=cut
+
+sub reputation_increment_states { {} };
+sub reputation_decrement_states { {} };
+
sub traffic_management_options {
return [
_("Yes"),
diff --git a/t/app/controller/report_inspect.t b/t/app/controller/report_inspect.t
index be2240cd2..cc98f2b64 100644
--- a/t/app/controller/report_inspect.t
+++ b/t/app/controller/report_inspect.t
@@ -67,18 +67,20 @@ FixMyStreet::override_config {
$report->unset_extra_metadata('inspected');
$report->state('confirmed');
$report->update;
- my $reputation = $report->user->get_extra_metadata("reputation") || 0;
+ $report->inspection_log_entry->delete;
+ my $reputation = $report->user->get_extra_metadata("reputation");
$mech->get_ok("/report/$report_id");
$mech->submit_form_ok({ button => 'save', with_fields => { public_update => "This is a public update.", include_update => "1", state => 'action scheduled' } });
$report->discard_changes;
is $report->comments->first->text, "This is a public update.", 'Update was created';
is $report->get_extra_metadata('inspected'), 1, 'report marked as inspected';
- is $report->user->get_extra_metadata('reputation'), $reputation+1, "User reputation was increased";
+ is $report->user->get_extra_metadata('reputation'), $reputation, "User reputation wasn't changed";
};
subtest "test update is required when instructing" => sub {
$report->unset_extra_metadata('inspected');
$report->update;
+ $report->inspection_log_entry->delete;
$report->comments->delete_all;
$mech->get_ok("/report/$report_id");
$mech->submit_form_ok({ button => 'save', with_fields => { public_update => undef, include_update => "1" } });
@@ -179,13 +181,26 @@ FixMyStreet::override_config {
ALLOWED_COBRANDS => 'oxfordshire',
}, sub {
subtest "test negative reputation" => sub {
- my $reputation = $report->user->get_extra_metadata("reputation");
+ my $reputation = $report->user->get_extra_metadata("reputation") || 0;
$mech->get_ok("/report/$report_id");
$mech->submit_form( button => 'remove_from_site' );
$report->discard_changes;
is $report->user->get_extra_metadata('reputation'), $reputation-1, "User reputation was decreased";
+ $report->update({ state => 'confirmed' });
+ };
+
+ subtest "test positive reputation" => sub {
+ $report->unset_extra_metadata('inspected');
+ $report->update;
+ $report->inspection_log_entry->delete if $report->inspection_log_entry;
+ my $reputation = $report->user->get_extra_metadata("reputation") || 0;
+ $mech->get_ok("/report/$report_id");
+ $mech->submit_form_ok({ button => 'save', with_fields => { state => 'action scheduled', include_update => undef } });
+ $report->discard_changes;
+ is $report->get_extra_metadata('inspected'), 1, 'report marked as inspected';
+ is $report->user->get_extra_metadata('reputation'), $reputation+1, "User reputation was increased";
};
subtest "Oxfordshire-specific traffic management options are shown" => sub {