aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Somerville <matthew-github@dracos.co.uk>2016-10-14 14:01:42 +0100
committerMatthew Somerville <matthew@mysociety.org>2016-10-20 11:50:12 +0100
commit51a83fee9ff77c9a0c9eea1ce10ac43793118d0e (patch)
tree24a7a0ffbcfaa5d5bda990292d4e65b6a2cea969
parentfbe159d78ce133cadf79645660f49ddf7bfbc569 (diff)
Fix list of response templates for a problem.
Instead of returning all templates for the problem's body, return those for the problem's category (or with no category).
-rw-r--r--perllib/FixMyStreet/DB/Result/Problem.pm10
-rw-r--r--t/app/model/problem.t14
2 files changed, 20 insertions, 4 deletions
diff --git a/perllib/FixMyStreet/DB/Result/Problem.pm b/perllib/FixMyStreet/DB/Result/Problem.pm
index 855732f83..ae713ef2d 100644
--- a/perllib/FixMyStreet/DB/Result/Problem.pm
+++ b/perllib/FixMyStreet/DB/Result/Problem.pm
@@ -658,13 +658,15 @@ order of title.
=cut
sub response_templates {
- my $problem = shift;
- return $problem->result_source->schema->resultset('ResponseTemplate')->search(
+ my $self = shift;
+ return $self->result_source->schema->resultset('ResponseTemplate')->search(
{
- body_id => $problem->bodies_str_ids
+ 'me.body_id' => $self->bodies_str_ids,
+ 'contact.category' => [ $self->category, undef ],
},
{
- order_by => 'title'
+ order_by => 'title',
+ join => { 'contact_response_templates' => 'contact' },
}
);
}
diff --git a/t/app/model/problem.t b/t/app/model/problem.t
index 836e8a047..bd7d0e55c 100644
--- a/t/app/model/problem.t
+++ b/t/app/model/problem.t
@@ -749,6 +749,20 @@ subtest 'check reports from abuser not sent' => sub {
ok $abuse->delete(), 'user removed from abuse table';
};
+subtest 'check response templates' => sub {
+ my $c1 = $mech->create_contact_ok(category => 'Potholes', body_id => $body_ids{2651}, email => 'p');
+ my $c2 = $mech->create_contact_ok(category => 'Graffiti', body_id => $body_ids{2651}, email => 'g');
+ my $t1 = FixMyStreet::DB->resultset('ResponseTemplate')->create({ body_id => $body_ids{2651}, title => "Title 1", text => "Text 1" });
+ my $t2 = FixMyStreet::DB->resultset('ResponseTemplate')->create({ body_id => $body_ids{2651}, title => "Title 2", text => "Text 2" });
+ my $t3 = FixMyStreet::DB->resultset('ResponseTemplate')->create({ body_id => $body_ids{2651}, title => "Title 3", text => "Text 3" });
+ $t1->add_to_contacts($c1);
+ $t2->add_to_contacts($c2);
+ my ($problem) = $mech->create_problems_for_body(1, $body_ids{2651}, 'TITLE');
+ is $problem->response_templates, 1, 'Only the global template returned';
+ ($problem) = $mech->create_problems_for_body(1, $body_ids{2651}, 'TITLE', { category => 'Potholes' });
+ is $problem->response_templates, 2, 'Global and pothole templates returned';
+};
+
END {
$problem->comments->delete if $problem;
$problem->delete if $problem;