aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Arter <davea@mysociety.org>2016-09-19 17:58:22 +0100
committerDave Arter <davea@mysociety.org>2016-09-23 14:46:52 +0100
commit8471a8500e081d812e8e63d644d7bdcdf1a793ce (patch)
tree05bcd5d6ed9c089a516377615870028af4146d96
parentceb96bff41e318d439d3c1e3957d79bb874e4ed1 (diff)
Update user reputation when inspecting report
-rw-r--r--perllib/FixMyStreet/App/Controller/Report.pm7
-rw-r--r--perllib/FixMyStreet/DB/Result/User.pm8
-rw-r--r--t/app/controller/report_inspect.t30
-rw-r--r--templates/web/base/report/display_tools.html2
4 files changed, 44 insertions, 3 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Report.pm b/perllib/FixMyStreet/App/Controller/Report.pm
index 34392782b..d56521fde 100644
--- a/perllib/FixMyStreet/App/Controller/Report.pm
+++ b/perllib/FixMyStreet/App/Controller/Report.pm
@@ -270,6 +270,8 @@ sub delete :Local :Args(1) {
$p->lastupdate( \'current_timestamp' );
$p->update;
+ $p->user->update_reputation(-1);
+
$c->model('DB::AdminLog')->create( {
admin_user => $c->user->email,
object_type => 'problem',
@@ -315,6 +317,7 @@ sub inspect : Private {
my $valid = 1;
my $update_text;
+ my $reputation_change = 0;
if ($permissions->{report_inspect}) {
foreach (qw/detailed_location detailed_information traffic_information/) {
@@ -325,6 +328,7 @@ sub inspect : Private {
$update_text = Utils::cleanup_text( $c->get_param('public_update'), { allow_multiline => 1 } );
if ($update_text) {
$problem->set_extra_metadata( inspected => 1 );
+ $reputation_change = 1;
} else {
$valid = 0;
$c->stash->{errors} ||= [];
@@ -362,6 +366,9 @@ sub inspect : Private {
}
if ($valid) {
+ if ( $reputation_change != 0 ) {
+ $problem->user->update_reputation($reputation_change);
+ }
$problem->update;
if ( defined($update_text) ) {
$problem->add_to_comments( {
diff --git a/perllib/FixMyStreet/DB/Result/User.pm b/perllib/FixMyStreet/DB/Result/User.pm
index 405d9e920..8d42d5926 100644
--- a/perllib/FixMyStreet/DB/Result/User.pm
+++ b/perllib/FixMyStreet/DB/Result/User.pm
@@ -378,4 +378,12 @@ sub is_planned_report {
return $self->active_planned_reports->find({ id => $problem->id });
}
+sub update_reputation {
+ my ( $self, $change ) = @_;
+
+ my $reputation = $self->get_extra_metadata('reputation') || 0;
+ $self->set_extra_metadata( reputation => $reputation + $change);
+ $self->update;
+}
+
1;
diff --git a/t/app/controller/report_inspect.t b/t/app/controller/report_inspect.t
index 6d6ec6559..393a8beb2 100644
--- a/t/app/controller/report_inspect.t
+++ b/t/app/controller/report_inspect.t
@@ -6,8 +6,8 @@ use FixMyStreet::TestMech;
my $mech = FixMyStreet::TestMech->new;
-my $brum = $mech->create_body_ok(2514, 'Birmingham City Council');
-my $oxon = $mech->create_body_ok(2237, 'Oxfordshire County Council');
+my $brum = $mech->create_body_ok(2514, 'Birmingham City Council', id => 2514);
+my $oxon = $mech->create_body_ok(2237, 'Oxfordshire County Council', id => 2237);
my $contact = $mech->create_contact_ok( body_id => $oxon->id, category => 'Cows', email => 'cows@example.net' );
my $rp = FixMyStreet::DB->resultset("ResponsePriority")->create({
body => $oxon,
@@ -62,6 +62,16 @@ FixMyStreet::override_config {
is $report->get_extra_metadata('inspected'), 1, 'report marked as inspected';
};
+ subtest "test positive reputation" => sub {
+ $report->unset_extra_metadata('inspected');
+ $report->update;
+ my $reputation = $report->user->get_extra_metadata("reputation");
+ $mech->get_ok("/report/$report_id/inspect");
+ $mech->submit_form_ok({ button => 'save_inspected', with_fields => { public_update => "This is a public update." } });
+ $report->discard_changes;
+ is $report->user->get_extra_metadata('reputation'), $reputation+1, "User reputation was increased";
+ };
+
subtest "test update is required when instructing" => sub {
$report->unset_extra_metadata('inspected');
$report->update;
@@ -107,6 +117,22 @@ FixMyStreet::override_config {
}
};
+FixMyStreet::override_config {
+ MAPIT_URL => 'http://mapit.mysociety.org/',
+ ALLOWED_COBRANDS => 'oxfordshire',
+}, sub {
+ subtest "test negative reputation" => sub {
+ my $reputation = $report->user->get_extra_metadata("reputation");
+
+ $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";
+ };
+};
+
+
END {
$mech->delete_body($oxon);
$mech->delete_body($brum);
diff --git a/templates/web/base/report/display_tools.html b/templates/web/base/report/display_tools.html
index 052ffb8a5..82f7d0ac3 100644
--- a/templates/web/base/report/display_tools.html
+++ b/templates/web/base/report/display_tools.html
@@ -3,7 +3,7 @@
[% IF c.user_exists AND c.cobrand.users_can_hide AND c.user.belongs_to_body( problem.bodies_str ) %]
<li><form method="post" action="/report/delete/[% problem.id %]" id="remove-from-site-form">
<input type="hidden" name="token" value="[% csrf_token %]">
- <input type="submit" id="key-tool-report-abuse" class="abuse" data-confirm="[% loc('Are you sure?') %]" value="[% loc('Remove from site') %]">
+ <input type="submit" id="key-tool-report-abuse" class="abuse" data-confirm="[% loc('Are you sure?') %]" name="remove_from_site" value="[% loc('Remove from site') %]">
</form></li>
[% ELSIF c.cobrand.moniker != 'zurich' %]
<li><a rel="nofollow" id="key-tool-report-abuse" class="abuse" href="[% c.uri_for( '/contact', { id => problem.id } ) %]">[% loc('Report abuse' ) %]</a></li>