diff options
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Report/New.pm | 10 | ||||
-rw-r--r-- | t/app/controller/report_new_open311.t | 19 |
3 files changed, 26 insertions, 4 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 17e39c6f3..e9c5605a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ - Do not have bootstrap run sudo commands. #2930 - Fix lookups in templates of categories with &s. - Fix a few obscure asset layer changing issues. + - Fix multiple disable messages for dropdown answers - 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/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm index a00251171..e7b4d70a7 100644 --- a/perllib/FixMyStreet/App/Controller/Report/New.pm +++ b/perllib/FixMyStreet/App/Controller/Report/New.pm @@ -332,12 +332,14 @@ sub disable_form_message : Private { my %category; foreach my $opt (@{$_->{values}}) { if ($opt->{disable}) { - $category{message} = $opt->{disable_message} || $_->{datatype_description}; - $category{code} = $_->{code}; - push @{$category{answers}}, $opt->{key}; + my $message = $opt->{disable_message} || $_->{datatype_description}; + $category{$message} ||= {}; + $category{$message}->{message} = $message; + $category{$message}->{code} = $_->{code}; + push @{$category{$message}->{answers}}, $opt->{key}; } } - push @{$out{questions}}, \%category if %category; + push @{$out{questions}}, $_ for values %category; } } diff --git a/t/app/controller/report_new_open311.t b/t/app/controller/report_new_open311.t index 08435fb2b..7cd6dca09 100644 --- a/t/app/controller/report_new_open311.t +++ b/t/app/controller/report_new_open311.t @@ -394,6 +394,14 @@ subtest "Category extras includes form disabling string" => sub { $contact4->push_extra_fields({ datatype_description => 'Please please ring', description => 'Is it dangerous?', code => 'dangerous', variable => 'true', order => '0', values => [ { name => 'Yes', key => 'yes', disable => 1 }, { name => 'No', key => 'no' } ] }); + $contact4->push_extra_fields({ datatype_description => 'Please ring different numbers', description => 'What sort of dangerous?', code => 'danger_type', + variable => 'true', order => '0', values => [ + { name => 'slightly', key => 'slightly', disable => 1, disable_message => 'Ring the slightly number' }, + { name => 'very', key => 'very', disable => 1, disable_message => 'Ring the very number' }, + { name => 'extremely', key => 'extremely', disable => 1, disable_message => 'Ring the very number' }, + { name => 'No', key => 'no' } + ] + }); $contact4->update; for ( { url => '/report/new/ajax?' }, @@ -401,6 +409,7 @@ subtest "Category extras includes form disabling string" => sub { ) { my $json = $mech->get_ok_json($_->{url} . '&latitude=55.952055&longitude=-3.189579'); my $output = $json->{by_category} ? $json->{by_category}{Pothole}{disable_form} : $json->{disable_form}; + $output->{questions} = [ sort { $a->{message} cmp $b->{message} } @{ $output->{questions} } ]; is_deeply $output, { all => 'Please ring us!', questions => [ @@ -409,6 +418,16 @@ subtest "Category extras includes form disabling string" => sub { code => 'dangerous', answers => [ 'yes' ], }, + { + message => 'Ring the slightly number', + code => 'danger_type', + answers => [ 'slightly' ], + }, + { + message => 'Ring the very number', + code => 'danger_type', + answers => [ 'very', 'extremely' ], + }, ], }; } |