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.499825, lon => -0.140137, zoom => 3 }, "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 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', }, ) { 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->page_errors, [], "no errors for pc '$test->{pc}'"; is_deeply $mech->extract_location, $test, "got expected location for pc '$test->{pc}'"; }; } done_testing();