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" );