diff options
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Report/New.pm | 7 | ||||
-rw-r--r-- | t/app/controller/report_as_other.t | 24 | ||||
-rw-r--r-- | t/app/controller/report_new_anon.t | 1 |
3 files changed, 32 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm index 974777ee7..db469f130 100644 --- a/perllib/FixMyStreet/App/Controller/Report/New.pm +++ b/perllib/FixMyStreet/App/Controller/Report/New.pm @@ -1443,6 +1443,13 @@ sub save_user_and_report : Private { $report->confirm(); } elsif ($c->stash->{contributing_as_anonymous_user}) { $report->set_extra_metadata( contributed_as => 'anonymous_user' ); + if ( $c->user_exists && $c->user->from_body ) { + # If a staff user has clicked the 'report anonymously' button then + # there would be no record of who that staff member was as we've + # used the cobrand's anonymous_account for the report. In this case + # record the staff user ID in the report metadata. + $report->set_extra_metadata( contributed_by => $c->user->id ); + } $report->confirm(); } elsif ( !$report->user->in_storage ) { # User does not exist. diff --git a/t/app/controller/report_as_other.t b/t/app/controller/report_as_other.t index dab50afa1..a07a903ff 100644 --- a/t/app/controller/report_as_other.t +++ b/t/app/controller/report_as_other.t @@ -167,6 +167,8 @@ subtest "Superuser, can add report as anonymous user" => sub { is $report->user->name, 'Super', 'user name unchanged'; is $report->user->id, $user->id, 'user matches'; is $report->anonymous, 1, 'report anonymous'; + is $report->get_extra_metadata('contributed_as'), 'anonymous_user'; + is $report->get_extra_metadata('contributed_by'), undef; my $send_confirmation_mail_override = Sub::Override->new( "FixMyStreet::Cobrand::Default::report_sent_confirmation_email", @@ -182,6 +184,28 @@ subtest "Superuser, can add report as anonymous user" => sub { $mech->log_in_ok($test_email); }; +subtest "Body user, can add report as anonymous user" => sub { + FixMyStreet::Script::Reports::send(); + $mech->clear_emails_ok; + + my $user = $mech->log_in_ok($user->email); + my $report = add_report( + 'contribute_as_anonymous_user', + form_as => 'anonymous_user', + title => "Test Report", + detail => 'Test report details.', + category => 'Street lighting', + ); + is $report->name, $body->name, 'report name is OK'; + is $report->user->name, 'Body User', 'user name unchanged'; + is $report->user->id, $user->id, 'user matches'; + is $report->anonymous, 1, 'report anonymous'; + is $report->get_extra_metadata('contributed_as'), 'anonymous_user'; + is $report->get_extra_metadata('contributed_by'), $user->id; + + $mech->log_in_ok($test_email); +}; + subtest "Body user, has permission to add update as council" => sub { my $update = add_update( 'contribute_as_body', diff --git a/t/app/controller/report_new_anon.t b/t/app/controller/report_new_anon.t index bd73a2b70..b14814f59 100644 --- a/t/app/controller/report_new_anon.t +++ b/t/app/controller/report_new_anon.t @@ -202,6 +202,7 @@ subtest "test report creation anonymously by staff user" => sub { is $report->name, 'Anonymous Button'; is $report->anonymous, 1; is $report->get_extra_metadata('contributed_as'), 'anonymous_user'; + is $report->get_extra_metadata('contributed_by'), $staffuser->id; my $alert = FixMyStreet::DB->resultset('Alert')->find( { user => $report->user, |