aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorM Somerville <matthew-github@dracos.co.uk>2020-10-02 16:25:31 +0100
committerM Somerville <matthew-github@dracos.co.uk>2020-10-02 16:25:31 +0100
commitc344dd774bc68dd1b9c7d41dc3c63c29ce4b3f42 (patch)
treece45124c84f7be55653c92ab8f9a29650c6a8f8d
parent399b8a783a1833098ab8401087d8a6609ac6d515 (diff)
parente3e1e9d54999692dc01f3fdd32693547af8deb7b (diff)
Merge branch 'deleted-response-priorities'
-rw-r--r--CHANGELOG.md1
-rw-r--r--perllib/FixMyStreet/App/Controller/Report.pm3
-rw-r--r--perllib/FixMyStreet/DB/Result/Problem.pm6
-rw-r--r--perllib/FixMyStreet/DB/ResultSet/DefectType.pm2
-rw-r--r--perllib/FixMyStreet/DB/ResultSet/ResponsePriority.pm8
-rw-r--r--perllib/FixMyStreet/DB/ResultSet/ResponseTemplate.pm2
-rw-r--r--perllib/FixMyStreet/Roles/ContactExtra.pm2
-rw-r--r--perllib/FixMyStreet/TestMech.pm31
-rw-r--r--t/app/controller/report_inspect.t12
-rw-r--r--t/app/model/responsepriority.t49
-rw-r--r--templates/web/base/report/inspect/extra_details.html2
11 files changed, 67 insertions, 51 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index cbdd0663f..b927fc319 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -44,6 +44,7 @@
- Staff users can use HTML tags in updates. #3143
- Response templates can include HTML tags. #3143
- Record whether report made on desktop or mobile.
+ - Do not display deleted priorities in inspect form. #3195
- Development improvements:
- `#geolocate_link` is now easier to re-style. #3006
- Links inside `#front-main` can be customised using `$primary_link_*` Sass variables. #3007
diff --git a/perllib/FixMyStreet/App/Controller/Report.pm b/perllib/FixMyStreet/App/Controller/Report.pm
index 81d5b18b5..98c4aba17 100644
--- a/perllib/FixMyStreet/App/Controller/Report.pm
+++ b/perllib/FixMyStreet/App/Controller/Report.pm
@@ -413,7 +413,8 @@ sub inspect : Private {
if ($c->cobrand->can('body')) {
my $priorities_by_category = FixMyStreet::App->model('DB::ResponsePriority')->by_categories(
$c->stash->{contacts},
- body_id => $c->cobrand->body->id
+ body_id => $c->cobrand->body->id,
+ problem => $problem,
);
$c->stash->{priorities_by_category} = $priorities_by_category;
my $templates_by_category = FixMyStreet::App->model('DB::ResponseTemplate')->by_categories(
diff --git a/perllib/FixMyStreet/DB/Result/Problem.pm b/perllib/FixMyStreet/DB/Result/Problem.pm
index 705f07f79..cd5e876b4 100644
--- a/perllib/FixMyStreet/DB/Result/Problem.pm
+++ b/perllib/FixMyStreet/DB/Result/Problem.pm
@@ -780,7 +780,11 @@ alphabetical order of name.
sub response_priorities {
my $self = shift;
- return $self->result_source->schema->resultset('ResponsePriority')->for_bodies($self->bodies_str_ids, $self->category);
+ my $rs = $self->result_source->schema->resultset('ResponsePriority')->for_bodies($self->bodies_str_ids, $self->category);
+ $rs->search([
+ 'me.deleted' => 0,
+ 'me.id' => $self->response_priority_id,
+ ]);
}
=head2 defect_types
diff --git a/perllib/FixMyStreet/DB/ResultSet/DefectType.pm b/perllib/FixMyStreet/DB/ResultSet/DefectType.pm
index 5b1247129..c4c11042f 100644
--- a/perllib/FixMyStreet/DB/ResultSet/DefectType.pm
+++ b/perllib/FixMyStreet/DB/ResultSet/DefectType.pm
@@ -12,7 +12,7 @@ sub join_table {
}
sub map_extras {
- my ($rs, @ts) = @_;
+ my ($rs, $params, @ts) = @_;
return map {
my $meta = $_->get_extra_metadata();
my %extra = map { $_ => $meta->{$_} } keys %$meta;
diff --git a/perllib/FixMyStreet/DB/ResultSet/ResponsePriority.pm b/perllib/FixMyStreet/DB/ResultSet/ResponsePriority.pm
index 96f7cf7a0..af605afa6 100644
--- a/perllib/FixMyStreet/DB/ResultSet/ResponsePriority.pm
+++ b/perllib/FixMyStreet/DB/ResultSet/ResponsePriority.pm
@@ -12,8 +12,12 @@ sub join_table {
}
sub map_extras {
- my ($rs, @ts) = @_;
- return map { { id => $_->id, name => $_->name } } @ts;
+ my ($rs, $params, @ts) = @_;
+ my $current = $params->{problem} && $params->{problem}->response_priority_id || 0;
+ return
+ map { { id => $_->id, name => $_->name } }
+ grep { !$_->deleted || $_->id == $current }
+ @ts;
}
1;
diff --git a/perllib/FixMyStreet/DB/ResultSet/ResponseTemplate.pm b/perllib/FixMyStreet/DB/ResultSet/ResponseTemplate.pm
index 46fcba153..88ecc2f94 100644
--- a/perllib/FixMyStreet/DB/ResultSet/ResponseTemplate.pm
+++ b/perllib/FixMyStreet/DB/ResultSet/ResponseTemplate.pm
@@ -14,7 +14,7 @@ sub name_column {
}
sub map_extras {
- my ($rs, @ts) = @_;
+ my ($rs, $params, @ts) = @_;
return map {
my $out = { id => $_->text, name => $_->title };
$out->{state} = $_->state if $_->state;
diff --git a/perllib/FixMyStreet/Roles/ContactExtra.pm b/perllib/FixMyStreet/Roles/ContactExtra.pm
index 73b1d3e6a..9615b0f0c 100644
--- a/perllib/FixMyStreet/Roles/ContactExtra.pm
+++ b/perllib/FixMyStreet/Roles/ContactExtra.pm
@@ -45,7 +45,7 @@ sub by_categories {
$_->$join_table == 0 # There's no category at all on this defect type/template/priority
|| (grep { $_->contact_id == $contact->get_column('id') } $_->$join_table)
} @results;
- @ts = $rs->map_extras(@ts);
+ @ts = $rs->map_extras(\%params, @ts);
$extras{$contact->category} = JSON::XS->new->encode(\@ts);
}
diff --git a/perllib/FixMyStreet/TestMech.pm b/perllib/FixMyStreet/TestMech.pm
index f6854fc98..7f7104d3d 100644
--- a/perllib/FixMyStreet/TestMech.pm
+++ b/perllib/FixMyStreet/TestMech.pm
@@ -609,29 +609,6 @@ sub get_ok_json {
return decode_json( $res->content );
}
-sub delete_body {
- my $mech = shift;
- my $body = shift;
-
- $mech->delete_problems_for_body($body->id);
- $mech->delete_defect_type($_) for $body->defect_types;
- $mech->delete_contact($_) for $body->contacts;
- $mech->delete_user($_) for $body->users;
- $_->delete for $body->response_templates;
- $_->delete for $body->response_priorities;
- $body->body_areas->delete;
- $body->delete;
-}
-
-sub delete_contact {
- my $mech = shift;
- my $contact = shift;
-
- $contact->contact_response_templates->delete_all;
- $contact->contact_response_priorities->delete_all;
- $contact->delete;
-}
-
sub delete_problems_for_body {
my $mech = shift;
my $body = shift;
@@ -646,14 +623,6 @@ sub delete_problems_for_body {
}
}
-sub delete_defect_type {
- my $mech = shift;
- my $defect_type = shift;
-
- $defect_type->contact_defect_types->delete_all;
- $defect_type->delete;
-}
-
sub delete_response_template {
my $mech = shift;
my $response_template = shift;
diff --git a/t/app/controller/report_inspect.t b/t/app/controller/report_inspect.t
index 96325760c..c10fe7f94 100644
--- a/t/app/controller/report_inspect.t
+++ b/t/app/controller/report_inspect.t
@@ -17,6 +17,11 @@ my $rp2 = FixMyStreet::DB->resultset("ResponsePriority")->create({
body => $oxon,
name => 'Low Priority',
});
+my $rp3 = FixMyStreet::DB->resultset("ResponsePriority")->create({
+ body => $oxon,
+ name => 'Deleted Priority',
+ deleted => 1,
+});
FixMyStreet::DB->resultset("ContactResponsePriority")->create({
contact => $contact,
response_priority => $rp,
@@ -447,6 +452,7 @@ FixMyStreet::override_config {
subtest "default response priorities display correctly" => sub {
$mech->get_ok("/report/$report_id");
$mech->content_contains('Priority</label', 'report priority list present');
+ $mech->content_lacks('Deleted Priority');
like $mech->content, qr/<select name="priority" id="problem_priority" class="form-control">[^<]*<option value="" selecte/s, 'blank priority option is selected';
$mech->content_lacks('value="' . $rp->id . '" selected>High', 'non default priority not selected');
@@ -456,6 +462,12 @@ FixMyStreet::override_config {
$mech->content_contains('value="' . $rp->id . '" selected>High', 'default priority selected');
};
+ subtest "check when report has deleted priority" => sub {
+ $report->update({ response_priority => $rp3 });
+ $mech->get_ok("/report/$report_id");
+ $mech->content_contains('value="' . $rp3->id . '" selected>Deleted Priority');
+ };
+
foreach my $test (
{ type => 'report_edit_priority', priority => 1 },
{ type => 'report_edit_category', category => 1 },
diff --git a/t/app/model/responsepriority.t b/t/app/model/responsepriority.t
index bd09c2da0..0ecce1529 100644
--- a/t/app/model/responsepriority.t
+++ b/t/app/model/responsepriority.t
@@ -12,6 +12,7 @@ my $oxfordshire = $mech->create_body_ok($area_id, 'Oxfordshire County Council');
my $other_body = $mech->create_body_ok($area_id, 'Some Other Council');
my $potholes_contact = $mech->create_contact_ok( body_id => $oxfordshire->id, category => 'Potholes', email => 'potholes@example.com' );
my $traffic_lights_contact =$mech->create_contact_ok( body_id => $oxfordshire->id, category => 'Traffic lights', email => 'lights@example.com' );
+my @contacts = FixMyStreet::DB->resultset('Contact')->not_deleted->search( { body_id => [ $oxfordshire->id ] } )->all;
my $potholes_response_priority = FixMyStreet::DB->resultset('ResponsePriority')->find_or_create(
{
@@ -32,25 +33,42 @@ my $general_response_priority = FixMyStreet::DB->resultset('ResponsePriority')->
}
);
-subtest 'for_bodies returns correct results' => sub {
+my $deleted1_response_priority = FixMyStreet::DB->resultset('ResponsePriority')->find_or_create(
+ {
+ body_id => $oxfordshire->id,
+ name => 'Deleted priority 1',
+ description => 'This priority has been deleted',
+ deleted => 1,
+ }
+);
+
+my $deleted2_response_priority = FixMyStreet::DB->resultset('ResponsePriority')->find_or_create(
+ {
+ body_id => $oxfordshire->id,
+ name => 'Deleted priority 2',
+ description => 'This priority has been deleted',
+ deleted => 1,
+ }
+);
+
+subtest 'for_bodies returns correct results (including deleted)' => sub {
my $priorities = FixMyStreet::DB->resultset('ResponsePriority')->for_bodies(
[ $oxfordshire->id ],
'Potholes'
);
- is $priorities->count, 2, 'Both priorities are included for Potholes category';
+ is $priorities->count, 4, 'all priorities are included for Potholes category';
$priorities = FixMyStreet::DB->resultset('ResponsePriority')->for_bodies(
[ $oxfordshire->id ],
'Traffic lights'
);
- is $priorities->count, 1, 'Only 1 priority is included for Traffic lights category';
+ is $priorities->count, 3, 'Pothole-only priority ignored for Traffic lights category';
is $priorities->first->name, $general_response_priority->name, 'Correct priority is returned for Traffic lights category';
};
-subtest 'by_categories returns all response priorities grouped by category' => sub {
- my @contacts = FixMyStreet::DB->resultset('Contact')->not_deleted->search( { body_id => [ $oxfordshire->id ] } )->all;
+subtest 'by_categories returns all undeleted response priorities grouped by category' => sub {
my $priorities = FixMyStreet::DB->resultset('ResponsePriority')->by_categories(\@contacts, body_id => $oxfordshire->id);
my $potholes = decode_json($priorities->{Potholes});
my $traffic_lights = decode_json($priorities->{'Traffic lights'});
@@ -59,7 +77,7 @@ subtest 'by_categories returns all response priorities grouped by category' => s
is scalar @$traffic_lights, 1, 'Traffic lights have 1 defect type';
};
-subtest 'by_categories returns all response priorities for an area with multiple bodies' => sub {
+subtest 'by_categories returns all undeleted response priorities for an area with multiple bodies' => sub {
my $other_response_priority = FixMyStreet::DB->resultset('ResponsePriority')->find_or_create(
{
body_id => $other_body->id,
@@ -68,7 +86,6 @@ subtest 'by_categories returns all response priorities for an area with multiple
}
);
- my @contacts = FixMyStreet::DB->resultset('Contact')->not_deleted->search( { body_id => [ $oxfordshire->id ] } )->all;
my $priorities = FixMyStreet::DB->resultset('ResponsePriority')->by_categories(\@contacts, area_id => $area_id);
my $potholes = decode_json($priorities->{Potholes});
my $traffic_lights = decode_json($priorities->{'Traffic lights'});
@@ -77,8 +94,16 @@ subtest 'by_categories returns all response priorities for an area with multiple
is scalar @$traffic_lights, 2, 'Traffic lights have 2 defect types';
};
-END {
- $mech->delete_body( $other_body );
- $mech->delete_body( $oxfordshire );
- done_testing();
-}
+subtest 'test with existing problem' => sub {
+ my ($problem) = $mech->create_problems_for_body(1, $oxfordshire->id, 'Title', {
+ response_priority => $deleted1_response_priority,
+ });
+ my $priorities = FixMyStreet::DB->resultset('ResponsePriority')->by_categories(\@contacts,
+ area_id => $area_id, problem => $problem);
+ my $potholes = decode_json($priorities->{Potholes});
+ my $traffic_lights = decode_json($priorities->{'Traffic lights'});
+ is scalar @$potholes, 4, 'Potholes have 4 defect types, deleted is included';
+ is scalar @$traffic_lights, 3, 'Traffic lights have 3 defect types, deleted is included';
+};
+
+done_testing();
diff --git a/templates/web/base/report/inspect/extra_details.html b/templates/web/base/report/inspect/extra_details.html
index 7777e9a78..66e464cef 100644
--- a/templates/web/base/report/inspect/extra_details.html
+++ b/templates/web/base/report/inspect/extra_details.html
@@ -3,7 +3,7 @@
<select name="priority" id="problem_priority" class="form-control">
<option value="" [% 'selected' UNLESS problem.response_priority_id OR has_default_priority %]>-</option>
[% FOREACH priority IN problem.response_priorities %]
- <option value="[% priority.id %]" [% 'selected' IF ( problem.response_priority_id == priority.id ) OR priority.is_default %][% 'disabled' IF priority.deleted %]>[% priority.name | html %]</option>
+ <option value="[% priority.id %]" [% 'selected' IF problem.response_priority_id == priority.id OR (NOT problem.response_priority_id AND priority.is_default) %]>[% priority.name | html %]</option>
[% END %]
</select>
</p>