diff options
author | Matthew Somerville <matthew@mysociety.org> | 2020-05-11 16:56:46 +0100 |
---|---|---|
committer | Matthew Somerville <matthew@mysociety.org> | 2020-05-26 23:02:03 +0100 |
commit | 901834444846905c85e56528b020bd1a667cb5d2 (patch) | |
tree | a73381ffcfc590d0e0faa70b23473e6f9d99079c | |
parent | 72809e405e690c88d0e2011802820c9ba215ef61 (diff) |
Make sure category shown in all its groups.
When compiling the reporting category dropdown, only one instance of
each value was used. But if a value appears twice, from two different
bodies, in different groups, it would then not appear in all the groups
it would be expected to. Make sure we update the list of groups of the
category if we come across another with the same value.
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/JSON.pm | 1 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Report/New.pm | 13 | ||||
-rw-r--r-- | t/app/controller/report_new.t | 4 |
4 files changed, 12 insertions, 7 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index ba34d428c..11f7cbf29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ * Unreleased - Bugfixes: - Fix issue with dashboard report CSV export. #3026 + - Make sure category shown in all its groups when reporting. - Admin improvements: - Display user name/email for contributed as reports. #2990 - Interface for enabling anonymous reports for certain categories. #2989 diff --git a/perllib/FixMyStreet/App/Controller/JSON.pm b/perllib/FixMyStreet/App/Controller/JSON.pm index ccc5b31dc..a7913bb4b 100644 --- a/perllib/FixMyStreet/App/Controller/JSON.pm +++ b/perllib/FixMyStreet/App/Controller/JSON.pm @@ -7,7 +7,6 @@ BEGIN { extends 'Catalyst::Controller'; } use JSON::MaybeXS; use DateTime; use DateTime::Format::ISO8601; -use List::MoreUtils 'uniq'; use FixMyStreet::DateRange; =head1 NAME diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm index abe37887e..ad324fe60 100644 --- a/perllib/FixMyStreet/App/Controller/Report/New.pm +++ b/perllib/FixMyStreet/App/Controller/Report/New.pm @@ -6,8 +6,7 @@ BEGIN { extends 'Catalyst::Controller'; } use utf8; use Encode; -use List::MoreUtils qw(uniq); -use List::Util 'first'; +use List::Util qw(first uniq); use HTML::Entities; use Path::Class; use Utils; @@ -759,8 +758,14 @@ sub setup_categories_and_bodies : Private { if !$c->stash->{unresponsive}{ALL} && ($contact->email =~ /^REFUSED$/i || $body_send_method eq 'Refused'); - push @category_options, $contact unless $seen{$contact->category}; - $seen{$contact->category} = $contact; + if (my $cat = $seen{$contact->category}) { + # Make sure the category is listed in all its groups, not just the first set + my @groups = uniq @{$cat->groups}, @{$contact->groups}; + $cat->set_extra_metadata(group => \@groups); + } else { + push @category_options, $contact; + $seen{$contact->category} = $contact; + } } if (@category_options) { diff --git a/t/app/controller/report_new.t b/t/app/controller/report_new.t index d2da75f2c..6af709c2c 100644 --- a/t/app/controller/report_new.t +++ b/t/app/controller/report_new.t @@ -641,10 +641,10 @@ subtest "category groups" => sub { } }, sub { $contact2->update( { extra => { group => ['Roads','Pavements'] } } ); - $contact9->update( { extra => { group => 'Roads' } } ); + $contact9->update( { extra => { group => 'Pavements' } } ); $contact10->update( { extra => { group => 'Roads' } } ); $mech->get_ok("/report/new?lat=$saved_lat&lon=$saved_lon"); - $mech->content_like(qr{<optgroup label="Pavements">\s*<option value='Potholes'>Potholes</option></optgroup>}); + $mech->content_like(qr{<optgroup label="Pavements">\s*<option value='Potholes'>Potholes</option>\s*<option value='Street lighting'>Street lighting</option></optgroup>}); $mech->content_like(qr{<optgroup label="Roads">\s*<option value='Potholes'>Potholes</option>\s*<option value='Street lighting'>Street lighting</option></optgroup>}); }; }; |