diff options
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Report.pm | 7 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/Result/User.pm | 8 | ||||
-rw-r--r-- | t/app/controller/report_inspect.t | 30 | ||||
-rw-r--r-- | templates/web/base/report/display_tools.html | 2 |
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> |