use strict;
use Wiki::Toolkit::Setup::SQLite;
use OpenGuides;
use OpenGuides::Test;
use Test::More;
eval { require DBD::SQLite; };
if ( $@ ) {
my ($error) = $@ =~ /^(.*?)\n/;
plan skip_all => "DBD::SQLite could not be used - no database to test with ($error)";
}
plan tests => 23; # 25 when all enabled
# Clear out the database from any previous runs.
OpenGuides::Test::refresh_db();
my $config = OpenGuides::Test->make_basic_config;
$config->script_name( "wiki.cgi" );
$config->script_url( "http://example.com/" );
my $guide = OpenGuides->new( config => $config );
isa_ok( $guide, "OpenGuides" );
my $wiki = $guide->wiki;
isa_ok( $wiki, "Wiki::Toolkit" );
$wiki->write_node( "Test Page", "foo", undef,
{ category => "Alpha", latitude=>51.754349, longitude=>-1.258200 } )
or die "Couldn't write node";
$wiki->write_node( "Test Page 2", "foo", undef,
{ category => "Alpha" } )
or die "Couldn't write node";
# Test the normal, HTML version
my $output = eval {
$guide->show_index(
type => "category",
value => "Alpha",
return_output => 1,
);
};
is( $@, "", "->show_index doesn't die" );
like( $output, qr|wiki.cgi\?Test_Page|,
"...and includes correct links" );
unlike( $output, qr|
\s*-|, "...sets correctly" );
# Test the RDF version
$output = $guide->show_index(
type => "category",
value => "Alpha",
return_output => 1,
format => "rdf"
);
like( $output, qr|Content-Type: application/rdf\+xml|,
"RDF output gets content-type of application/rdf+xml" );
like( $output, qr|Category Alpha|, "Right rdf title" );
my @entries = ($output =~ /(\)/g);
is( 2, scalar @entries, "Right number of nodes included in rdf" );
# Test the RSS version
$output = eval {
$guide->show_index(
type => "category",
value => "Alpha",
return_output => 1,
format => "rss",
);
};
is( $@, "", "->show_index doesn't die when asked for rss" );
like( $output, qr|Content-Type: application/rdf\+xml|,
"RSS output gets content-type of application/rdf+xml" );
like( $output, "/\Category Alpha|, "Right rss title" );
@entries = ($output =~ /(\<\/item\>)/g);
is( 2, scalar @entries, "Right number of nodes included in rss" );
# Test the Atom version
$output = eval {
$guide->show_index(
type => "category",
value => "Alpha",
return_output => 1,
format => "atom",
);
};
is( $@, "", "->show_index doesn't die when asked for atom" );
like( $output, qr|Content-Type: application/atom\+xml|,
"Atom output gets content-type of application/atom+xml" );
like( $output, qr|Category Alpha|, "Right atom title" );
@entries = ($output =~ /(\)/g);
is( 2, scalar @entries, "Right number of nodes included in atom" );
# Test the map version
# They will need a Helmert Transform provider for this to work
$config->gmaps_api_key("yes I have one");
$config->geo_handler(1);
$config->force_wgs84(0);
my $has_helmert = 0;
eval {
use OpenGuides::Utils;
$has_helmert = OpenGuides::Utils->get_wgs84_coords(latitude=>1,longitude=>1,config=>$config);
};
SKIP: {
skip "No Helmert Transform provider installed, can't test geo stuff", 6
unless $has_helmert;
$output = eval {
$guide->show_index(
return_output => 1,
format => "map",
);
};
is( $@, "", "->show_index doesn't die when asked for map" );
like( $output, qr|Content-Type: text/html|,
"Map output gets content-type of text/html" );
like( $output, qr|new GMap|, "Really is google map" );
my @points = ($output =~ /point\d+ = (new GPoint\(.*?, .*?\))/g);
is( 1, scalar @points, "Right number of nodes included on map" );
# -1.259687,51.754813
like( $points[0], qr|51.75481|, "Has latitude");
like( $points[0], qr|-1.25968|, "Has longitude");
}