aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Arter <davea@mysociety.org>2016-10-18 18:20:07 +0100
committerMatthew Somerville <matthew-github@dracos.co.uk>2016-10-26 16:22:11 +0100
commite1636f3c8cb837c3debe28da7532778493ebad54 (patch)
tree08294e6d0f7eaa6ffac876dec909833bc3395ab4
parent2e8c2dcdb299e1c34e0c64120ad2b513ec980491 (diff)
Resend report if changing category changes body.
-rw-r--r--README.md1
-rw-r--r--perllib/FixMyStreet/App/Controller/Admin.pm10
-rw-r--r--t/app/controller/admin.t54
3 files changed, 52 insertions, 13 deletions
diff --git a/README.md b/README.md
index d6b71d7c0..a6ea03163 100644
--- a/README.md
+++ b/README.md
@@ -74,6 +74,7 @@ web-based cross-browser testing tools for this project.
- Hide confirmed column on body page if all categories confirmed. #1565
- Show any waiting reports on admin index page. #1382
- Allow user's phone number to be edited, and a report's category. #400
+ - Resend report if changing category changes body. #1560.
- New user system:
- /admin requires a user with the `is_superuser` flag. #1463
- `createsuperuser` command for creating superusers.
diff --git a/perllib/FixMyStreet/App/Controller/Admin.pm b/perllib/FixMyStreet/App/Controller/Admin.pm
index 07a6e7f3c..748842df5 100644
--- a/perllib/FixMyStreet/App/Controller/Admin.pm
+++ b/perllib/FixMyStreet/App/Controller/Admin.pm
@@ -8,10 +8,10 @@ use Path::Class;
use POSIX qw(strftime strcoll);
use Digest::SHA qw(sha1_hex);
use mySociety::EmailUtil qw(is_valid_email);
+use mySociety::ArrayUtils;
use DateTime::Format::Strptime;
use List::Util 'first';
-
use FixMyStreet::SendReport;
=head1 NAME
@@ -852,8 +852,12 @@ sub report_edit_category : Private {
if ((my $category = $c->get_param('category')) ne $problem->category) {
$problem->category($category);
my @contacts = grep { $_->category eq $problem->category } @{$c->stash->{contacts}};
- my $bs = join( ',', map { $_->body_id } @contacts );
- $problem->bodies_str($bs);
+ my @new_body_ids = map { $_->body_id } @contacts;
+ # If the report has changed bodies we need to resend it
+ if (scalar @{mySociety::ArrayUtils::symmetric_diff($problem->bodies_str_ids, \@new_body_ids)}) {
+ $problem->whensent(undef);
+ }
+ $problem->bodies_str(join( ',', @new_body_ids ));
}
}
diff --git a/t/app/controller/admin.t b/t/app/controller/admin.t
index a0e013459..6086cf3ac 100644
--- a/t/app/controller/admin.t
+++ b/t/app/controller/admin.t
@@ -16,8 +16,12 @@ my $superuser = $mech->create_user_ok('superuser@example.com', name => 'Super Us
my $oxfordshire = $mech->create_body_ok(2237, 'Oxfordshire County Council', id => 2237);
my $oxfordshirecontact = $mech->create_contact_ok( body_id => $oxfordshire->id, category => 'Potholes', email => 'potholes@example.com' );
+$mech->create_contact_ok( body_id => $oxfordshire->id, category => 'Traffic lights', email => 'lights@example.com' );
my $oxfordshireuser = $mech->create_user_ok('counciluser@example.com', name => 'Council User', from_body => $oxfordshire);
+my $oxford = $mech->create_body_ok(2421, 'Oxford City Council');
+$mech->create_contact_ok( body_id => $oxford->id, category => 'Graffiti', email => 'graffiti@example.net' );
+
my $bromley = $mech->create_body_ok(2482, 'Bromley Council', id => 2482);
my $user3 = $mech->create_user_ok('test3@example.com', name => 'Test User 2');
@@ -575,6 +579,34 @@ foreach my $test (
};
}
+FixMyStreet::override_config {
+ MAPIT_URL => 'http://mapit.mysociety.org/',
+ ALLOWED_COBRANDS => 'fixmystreet',
+}, sub {
+
+subtest 'change report category' => sub {
+ my ($ox_report) = $mech->create_problems_for_body(1, $oxfordshire->id, 'Unsure', {
+ category => 'Potholes',
+ areas => ',2237,2421,', # Cached used by categories_for_point...
+ latitude => 51.7549262252,
+ longitude => -1.25617899435,
+ whensent => \'current_timestamp',
+ });
+ $mech->get_ok("/admin/report_edit/" . $ox_report->id);
+
+ $mech->submit_form_ok( { with_fields => { category => 'Traffic lights' } }, 'form_submitted' );
+ $ox_report->discard_changes;
+ is $ox_report->category, 'Traffic lights';
+ isnt $ox_report->whensent, undef;
+
+ $mech->submit_form_ok( { with_fields => { category => 'Graffiti' } }, 'form_submitted' );
+ $ox_report->discard_changes;
+ is $ox_report->category, 'Graffiti';
+ is $ox_report->whensent, undef;
+};
+
+};
+
subtest 'change email to new user' => sub {
$log_entries->delete;
$mech->get_ok("/admin/report_edit/$report_id");
@@ -1512,13 +1544,15 @@ subtest "response priorities can't be viewed across councils" => sub {
};
};
-
-$mech->delete_user( $user );
-$mech->delete_user( $user2 );
-$mech->delete_user( $user3 );
-$mech->delete_user( $superuser );
-$mech->delete_user( 'test4@example.com' );
-$mech->delete_body( $oxfordshire );
-$mech->delete_body( $bromley );
-
-done_testing();
+END {
+ $mech->delete_user( $user );
+ $mech->delete_user( $user2 );
+ $mech->delete_user( $user3 );
+ $mech->delete_user( $superuser );
+ $mech->delete_user( 'test4@example.com' );
+ $mech->delete_body( $oxfordshire );
+ $mech->delete_body( $oxford );
+ $mech->delete_body( $bromley );
+ $mech->delete_body( $westminster );
+ done_testing();
+}