diff options
Diffstat (limited to 't/app/controller/around.t')
-rw-r--r-- | t/app/controller/around.t | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/t/app/controller/around.t b/t/app/controller/around.t new file mode 100644 index 000000000..33c959b48 --- /dev/null +++ b/t/app/controller/around.t @@ -0,0 +1,106 @@ +use strict; +use warnings; +use Test::More; + +use FixMyStreet::TestMech; +my $mech = FixMyStreet::TestMech->new; + +subtest "check that if no query we get sent back to the homepage" => sub { + $mech->get_ok('/around'); + is $mech->uri->path, '/around', "still at '/around'"; +}; + +# x,y requests were generated by the old map code. We keep the behavior for +# historic links +subtest "redirect x,y requests to lat/lon (301 - permanent)" => sub { + + $mech->get_ok('/around?x=3281&y=1113'); + + # did we redirect to lat,lon? + is $mech->uri->path, '/around', "still on /around"; + is_deeply { $mech->uri->query_form }, + { lat => 51.4998246332569, lon => -0.140137309739907, }, + "lat,lon correctly set"; + + # was it a 301? + is $mech->res->code, 200, "got 200 for final destination"; + is $mech->res->previous->code, 301, "got 301 for redirect"; + +}; + +# test various locations on inital search box +foreach my $test ( + { + pc => '', # + errors => [], + pc_alternatives => [], + }, + { + pc => 'xxxxxxxxxxxxxxxxxxxxxxxxxxx', + errors => ['Sorry, we could not find that location.'], + pc_alternatives => [], + }, + { + pc => 'glenthorpe', + errors => [], + pc_alternatives => [ + 'Glenthorpe Crescent, Leeds LS9 7', + 'Glenthorpe Rd, Merton, Greater London SM4 4', + 'Glenthorpe Ave, Leeds LS9 7', + 'Glenthorne Rd, Hammersmith, Greater London W6 0', + 'Glenthorne Ave, Yeovil, Somerset BA21 4', + 'Glenthorne Rd, Kenwyn, Cornwall TR3 6', + 'Glenthorne Dr, Cheslyn Hay, Staffordshire WS6 7', + 'Glenthorne Gardens, Ilford, Greater London IG5 0', + 'Glenthorne Ave, Croydon, Greater London CR0 7', + ], + }, + { + pc => 'Glenthorpe Ct, Katy, TX 77494, USA', + errors => + ['Sorry, we could not find that location.'], + pc_alternatives => [], + }, + ) +{ + subtest "test bad pc value '$test->{pc}'" => sub { + $mech->get_ok('/'); + $mech->submit_form_ok( { with_fields => { pc => $test->{pc} } }, + "bad location" ); + is_deeply $mech->page_errors, $test->{errors}, + "expected errors for pc '$test->{pc}'"; + is_deeply $mech->pc_alternatives, $test->{pc_alternatives}, + "expected alternatives for pc '$test->{pc}'"; + }; +} + +# check that exact queries result in the correct lat,lng +foreach my $test ( + { + pc => 'SW1A 1AA', + latitude => '51.50101', + longitude => '-0.141587', + }, + { + pc => 'Manchester', + latitude => '53.480713', + longitude => '-2.234376', + }, + { + pc => 'Glenthorpe Rd, Merton, Greater London SM4 4, UK', + latitude => '51.3938', + longitude => '-0.22096', + }, + ) +{ + subtest "check lat/lng for '$test->{pc}'" => sub { + $mech->get_ok('/'); + $mech->submit_form_ok( { with_fields => { pc => $test->{pc} } }, + "good location" ); + is_deeply $mech->form_errors, [], "no errors for pc '$test->{pc}'"; + is_deeply $mech->extract_location, $test, + "got expected location for pc '$test->{pc}'"; + }; +} + +done_testing(); |