aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/App/Controller/Around.pm28
-rw-r--r--t/app/controller/around.t16
-rw-r--r--t/app/controller/report_new.t45
-rw-r--r--templates/web/base/around/_error_multiple.html2
4 files changed, 78 insertions, 13 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Around.pm b/perllib/FixMyStreet/App/Controller/Around.pm
index d1bf2d950..da17cbd56 100644
--- a/perllib/FixMyStreet/App/Controller/Around.pm
+++ b/perllib/FixMyStreet/App/Controller/Around.pm
@@ -60,18 +60,22 @@ sub index : Path : Args(0) {
# Check to see if the spot is covered by a area - if not show an error.
return unless $c->forward('check_location_is_acceptable', []);
- # If we have a partial - redirect to /report/new so that it can be
- # completed.
- if ($partial_report) {
- my $new_uri = $c->uri_for(
- '/report/new',
- {
- partial => $c->stash->{partial_token}->token,
- latitude => $c->stash->{latitude},
- longitude => $c->stash->{longitude},
- pc => $c->stash->{pc},
- }
- );
+ # Redirect to /report/new in two cases:
+ # - if we have a partial report, so that it can be completed.
+ # - if the cobrand doesn't show anything on /around (e.g. a private
+ # reporting site)
+ if ($partial_report || $c->cobrand->call_hook("skip_around_page")) {
+ my $params = {
+ latitude => $c->stash->{latitude},
+ longitude => $c->stash->{longitude},
+ pc => $c->stash->{pc}
+ };
+ if ($partial_report) {
+ $params->{partial} = $c->stash->{partial_token}->token;
+ } elsif ($c->get_param("category")) {
+ $params->{category} = $c->get_param("category");
+ }
+ my $new_uri = $c->uri_for('/report/new', $params);
return $c->res->redirect($new_uri);
}
diff --git a/t/app/controller/around.t b/t/app/controller/around.t
index 8b4fc7825..d1254edb7 100644
--- a/t/app/controller/around.t
+++ b/t/app/controller/around.t
@@ -1,3 +1,5 @@
+use Test::MockModule;
+
use FixMyStreet::TestMech;
my $mech = FixMyStreet::TestMech->new;
@@ -174,4 +176,18 @@ subtest 'check category and status filtering works on /around?ajax' => sub {
is scalar @$pins, 1, 'correct number of fixed Vegetation reports';
};
+subtest 'check skip_around skips around page' => sub {
+ my $cobrand = Test::MockModule->new('FixMyStreet::Cobrand::Default');
+ $cobrand->mock('skip_around_page', sub { 1 });
+ $cobrand->mock('country', sub { 1 });
+
+ FixMyStreet::override_config {
+ MAPIT_URL => 'http://mapit.uk/',
+ }, sub {
+ $mech->get('/around?latitude=51.754926&longitude=-1.256179');
+ is $mech->res->code, 302, "around page is a redirect";
+ is $mech->uri->path, '/report/new', "and redirects to /report/new";
+ };
+};
+
done_testing();
diff --git a/t/app/controller/report_new.t b/t/app/controller/report_new.t
index f741ec796..e0fe205bd 100644
--- a/t/app/controller/report_new.t
+++ b/t/app/controller/report_new.t
@@ -1056,6 +1056,51 @@ subtest "check that a lat/lon off coast leads to /around" => sub {
};
+subtest "check we load a partial report correctly" => sub {
+ my $user = FixMyStreet::App->model('DB::User')->find_or_create(
+ {
+ email => 'test-partial@example.com'
+ }
+ );
+
+ my $report = FixMyStreet::App->model('DB::Problem')->create( {
+ name => '',
+ postcode => '',
+ category => 'Street lighting',
+ title => 'Testing',
+ detail => "Testing Detail",
+ anonymous => 0,
+ state => 'partial',
+ lang => 'en-gb',
+ service => '',
+ areas => '',
+ used_map => 1,
+ latitude => '51.754926',
+ longitude => '-1.256179',
+ user_id => $user->id,
+ } );
+
+ my $report_id = $report->id;
+
+ my $token = FixMyStreet::App->model("DB::Token")
+ ->create( { scope => 'partial', data => $report->id } );
+
+ my $token_code = $token->token;
+
+ FixMyStreet::override_config {
+ ALLOWED_COBRANDS => [ { fixmystreet => '.' } ],
+ MAPIT_URL => 'http://mapit.uk/',
+ },
+ sub {
+ $mech->get("/L/$token_code");
+ is $mech->res->previous->code, 302, 'partial token page redirects';
+ is $mech->uri->path, "/report/new", "partial redirects to report page";
+ $mech->content_contains('Testing Detail');
+ };
+
+ $mech->delete_user($user);
+};
+
for my $test (
{
desc => 'user title not set if not bromley problem',
diff --git a/templates/web/base/around/_error_multiple.html b/templates/web/base/around/_error_multiple.html
index ca047f1d0..751d81173 100644
--- a/templates/web/base/around/_error_multiple.html
+++ b/templates/web/base/around/_error_multiple.html
@@ -6,7 +6,7 @@
<p>[% loc('We found more than one match for that location.') %]</p>
<ul class="pc_alternatives">
[% FOREACH match IN possible_location_matches %]
- <li><a href="/around?latitude=[% match.latitude | uri %];longitude=[% match.longitude | uri %]">[% match.address | html %]</a></li>
+ <li><a href="/around?latitude=[% match.latitude | uri %];longitude=[% match.longitude | uri %][% IF c.req.params.category %];category=[% c.req.params.category | uri %][% END %]">[% match.address | html %]</a></li>
[% END %]
</ul>
<p>[% loc('We show up to ten matches, please try a different search if yours is not here.') %]</p>