The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More tests => 14;
use WWW::MySociety::Gaze;

ok my $gaze = WWW::MySociety::Gaze->new, 'new';
isa_ok $gaze, 'WWW::MySociety::Gaze';

{
    ok my $country = $gaze->get_country_from_ip( '192.5.6.30' ),
      'got country code';
    like $country, qr{^[A-Z]+$}, 'country code looks OK';
}

{
    my @countries = $gaze->get_find_places_countries;
    ok @countries > 30, 'got some countries';
    my @nice = grep { qr{^[A-Z]+$} } @countries;
    is_deeply \@nice, \@countries, 'all valid ISO codes';
}

{
    my @places = $gaze->find_places(
        country => 'GB',
        query   => 'Newcastle upon Tyne'
    );
    ok @places > 3, 'got some places';
    like $places[0]->{Name}, qr{^Newcastle}, 'first name matches';
}

{
    my $density
      = $gaze->get_population_density( 54.9880556, -1.6194444 );

    # Should be OK until Newcastle disappears under water or becomes
    # uncomfortably crowded.
    ok $density > 100 && $density < 1_000_000, 'density looks OK';
}

{
    my $radius = $gaze->get_radius_containing_population(
        lat    => 54.9880556,
        lon    => -1.6194444,
        number => 10_000
    );

    ok $radius > 10 && $radius < 1_000_000, 'radius looks OK';
}

{
    my @bb = $gaze->get_country_bounding_coords( 'GB' );

    ok @bb == 4, 'correct number of elements';
    ok $bb[0] > $bb[1], 'latitude order correct';
    ok $bb[2] > $bb[3], 'longitude order correct';
}

{
    my @places = $gaze->get_places_near(
        lat      => 54.9880556,
        lon      => -1.6194444,
        distance => 20,
        number   => 1000
    );

    ok @places > 10, 'got some places';
}