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
|
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 => [ # TODO - should filter out these non-UK addresses
'Glenthorpe Crescent, Leeds LS9 7',
'Glenthorpe Rd, Merton, Greater London SM4 4',
'Glenthorpe Ln, Katy, TX 77494, USA',
'Glenthorpe Dr, Walnut, CA 91789, USA',
'Glenthorpe Ave, Leeds LS9 7',
'Glenthorpe Ct, Katy, TX 77494, USA',
],
},
{
pc => 'Glenthorpe Ct, Katy, TX 77494, USA',
errors =>
['We had a problem with the supplied co-ordinates - outside the UK?'],
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.5010096115539',
longitude => '-0.141587067110009',
},
{
pc => 'Manchester',
latitude => '53.4807125',
longitude => '-2.2343765',
},
{
pc => 'Glenthorpe Rd, Merton, Greater London SM4 4, UK',
latitude => '51.3937997',
longitude => '-0.2209596',
},
)
{
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();
|