use strict;
use Wiki::Toolkit::Setup::SQLite;
use OpenGuides;
use OpenGuides::Config;
use OpenGuides::RDF;
use OpenGuides::Utils;
use OpenGuides::Test;
use URI::Escape;
use Test::More;
eval { require DBD::SQLite; };
my $have_sqlite = $@ ? 0 : 1;
if ( $@ ) {
my ($error) = $@ =~ /^(.*?)\n/;
plan skip_all => "DBD::SQLite could not be used - no database to test with. ($error)";
}
plan tests => 30;
# clear out the database
OpenGuides::Test::refresh_db();
my $config = OpenGuides::Test->make_basic_config;
$config->script_url( "http://wiki.example.com/" );
$config->script_name( "mywiki.cgi" );
$config->site_name( "Wiki::Toolkit Test Site" );
$config->default_city( "London" );
$config->default_country( "United Kingdom" );
$config->geo_handler( 3 );
eval { require Wiki::Toolkit::Search::Plucene; };
if ( $@ ) { $config->use_plucene ( 0 ) };
my $guide = OpenGuides->new( config => $config );
my $wiki = $guide->wiki;
my $rdf_writer = eval {
OpenGuides::RDF->new( wiki => $wiki, config => $config );
};
is( $@, "", "'new' doesn't croak if wiki and config objects supplied" );
isa_ok( $rdf_writer, "OpenGuides::RDF" );
# Test the data for a node that exists.
OpenGuides::Test->write_data(
guide => $guide,
node => "Calthorpe Arms",
content => "CAMRA-approved pub near King's Cross",
comment => "Stub page, please update!",
username => "Anonymous",
postcode => "WC1X 8JR",
locales => "Bloomsbury\r\nSt Pancras",
phone => "test phone number",
website => "http://example.com",
hours_text => "test hours",
latitude => "51.524193",
longitude => "-0.114436",
summary => "a really nice pub",
);
OpenGuides::Test->write_data(
guide => $guide,
node => "Calthorpe Arms",
content => "CAMRA-approved pub near King's Cross",
comment => "Stub page, please update!",
username => "Kake",
postcode => "WC1X 8JR",
locales => "Bloomsbury\r\nSt Pancras",
phone => "test phone number",
website => "http://example.com",
hours_text => "test hours",
latitude => "51.524193",
longitude => "-0.114436",
summary => "a nice pub",
node_image => "http://example.com/calthorpe.jpg",
);
my $rdfxml = $rdf_writer->emit_rdfxml( node => "Calthorpe Arms" );
like( $rdfxml, qr|<\?xml version="1.0" \?>|, "RDF uses no encoding when none set" );
$config->http_charset( "UTF-8" );
$guide = OpenGuides->new( config => $config );
$rdfxml = $rdf_writer->emit_rdfxml( node => "Calthorpe Arms" );
like( $rdfxml, qr|<\?xml version="1.0" encoding="UTF-8"\?>|, "RDF uses declared encoding" );
like( $rdfxml, qr||, "Node image");
like( $rdfxml, qr||,
"finds the first locale" );
like( $rdfxml, qr||,
"finds the second locale" );
like( $rdfxml, qr|test phone number|,
"picks up phone number" );
like( $rdfxml, qr|test hours|,
"picks up opening hours text" );
like( $rdfxml, qr||, "picks up website" );
like( $rdfxml,
qr|Wiki::Toolkit Test Site: Calthorpe Arms|,
"sets the title correctly" );
like( $rdfxml, qr|id=Kake;format=rdf#obj"|,
"last username to edit used as contributor" );
like( $rdfxml, qr|id=Anonymous;format=rdf#obj"|,
"... as well as previous usernames" );
like( $rdfxml, qr|2|, "version picked up" );
like( $rdfxml, qr||, "sets the 'about' correctly" );
like( $rdfxml, qr||,
"set the dc:source with the version-independent uri" );
like( $rdfxml, qr|\n\s+London|, "city" ).
like( $rdfxml, qr|\n\s+\n\s+United Kingdom|, "country" ).
like( $rdfxml, qr|WC1X 8JR|, "postcode" );
like( $rdfxml, qr|51.524193|, "latitude" );
like( $rdfxml, qr|-0.114436|, "longitude" );
like( $rdfxml, qr|a nice pub|, "summary (description)" );
like( $rdfxml, qr||, "date element included" );
unlike( $rdfxml, qr|1970|, "hasn't defaulted to the epoch" );
# Check that default city and country can be set to blank.
$config = OpenGuides::Test->make_basic_config;
$config->default_city( "" );
$config->default_country( "" );
$guide = OpenGuides->new( config => $config );
OpenGuides::Test->write_data(
guide => $guide,
node => "Star Tavern",
latitude => 51.498,
longitude => -0.154,
);
$rdf_writer = OpenGuides::RDF->new( wiki => $guide->wiki, config => $config );
$rdfxml = $rdf_writer->emit_rdfxml( node => "Star Tavern" );
unlike( $rdfxml, qr||, "no city in RDF when no default city" );
unlike( $rdfxml, qr||, "...same for country" );
# Now test that there's a nice failsafe where a node doesn't exist.
$rdfxml = eval { $rdf_writer->emit_rdfxml( node => "I Do Not Exist" ); };
is( $@, "", "->emit_rdfxml doesn't die when called on a nonexistent node" );
like( $rdfxml, qr|0|, "...and wiki:version is 0" );
# Test the data for a node that redirects.
$wiki->write_node( "Calthorpe Arms Pub",
"#REDIRECT [[Calthorpe Arms]]",
undef,
{
comment => "Created as redirect to Calthorpe Arms page.",
username => "Earle",
}
);
my $redirect_rdf = $rdf_writer->emit_rdfxml( node => "Calthorpe Arms Pub" );
like( $redirect_rdf, qr||,
"redirecting node gets owl:sameAs to target" );
$wiki->write_node( "Nonesuch Stores",
"A metaphysical wonderland",
undef,
{
comment => "Yup.",
username => "Nobody",
opening_hours_text => "Open All Hours",
}
);
$rdfxml = $rdf_writer->emit_rdfxml( node => "Nonesuch Stores" );
like( $rdfxml, qr||,
"having opening hours marks node as geospatial" );