1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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.499825, lon => -0.140137, },
"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();
|