aboutsummaryrefslogtreecommitdiffstats
path: root/t/cobrand/closest.t
blob: 6d28bb6f1db9d29b8789e44d50c8390e0ff9603e (plain)
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
use t::Mock::Bing;

use FixMyStreet::DB;
use FixMyStreet::TestMech;

my $mech = FixMyStreet::TestMech->new;

use_ok 'FixMyStreet::Cobrand';

my $c = FixMyStreet::Cobrand::UK->new();

my $user =
  FixMyStreet::DB->resultset('User')
  ->find_or_create( { email => 'test@example.com', name => 'Test User' } );
ok $user, "created test user";

my $dt = DateTime->new(
    year   => 2011,
    month  => 04,
    day    => 16,
    hour   => 15,
    minute => 47,
    second => 23
);

my $report = FixMyStreet::DB->resultset('Problem')->find_or_create(
    {
        postcode           => 'E142DN',
        bodies_str         => '2504',
        areas              => ',105255,11806,11828,2247,2504,',
        category           => 'Other',
        title              => 'Test 2',
        detail             => 'Test 2 Detail',
        used_map           => 't',
        name               => 'Test User',
        anonymous          => 'f',
        state              => 'closed',
        confirmed          => $dt->ymd . ' ' . $dt->hms,
        lang               => 'en-gb',
        service            => '',
        cobrand            => 'default',
        cobrand_data       => '',
        send_questionnaire => 't',
        latitude           => 51.508536,
        longitude          => 0.000001,
        user_id            => $user->id,
    }
);
my $report_id = $report->id;
ok $report, "created test report - $report_id";

$report->geocode( undef );
ok !$report->geocode, 'no geocode entry for report';

FixMyStreet::override_config {
    MAPIT_URL => 'http://mapit.uk/',
    BING_MAPS_API_KEY => 'test',
}, sub {
    my $near = $c->find_closest($report);
    ok $report->geocode, 'geocode entry added to report';
    ok $report->geocode->{resourceSets}, 'geocode entry looks like right sort of thing';

    like $near, qr/Constitution Hill/i, 'nearest street looks right';
    like $near, qr/Nearest postcode .*: E14 2DN/i, 'nearest postcode looks right';

    $near = $c->find_closest_address_for_rss($report);

    like $near, qr/Constitution Hill/i, 'nearest street for RSS looks right';
    unlike $near, qr/Nearest postcode/i, 'no nearest postcode in RSS text';

    $report->geocode( undef );
    $near = $c->find_closest_address_for_rss($report);

    ok !$near, 'no closest address for RSS if not cached';

    my $json = $mech->get_ok_json('/ajax/closest?lat=55&lon=-1');
    is_deeply $json, {"road"=> "Constitution Hill","full_address"=>"Constitution Hill, London, SW1A"};
};

FixMyStreet::override_config {
    ALLOWED_COBRANDS => 'fixmystreet',
    MAPIT_URL => 'http://mapit.uk/',
    BING_MAPS_API_KEY => 'test',
}, sub {
    my $json = $mech->get_ok_json('/ajax/closest?lat=55.952055&lon=-3.189579');
    is_deeply $json, {"road"=> "Constitution Hill","full_address"=>"Constitution Hill, London, SW1A"};
};

done_testing();