use strict; use Wiki::Toolkit::Setup::SQLite; use OpenGuides::Search; 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 => 16; # Clear out the database from any previous runs. OpenGuides::Test::refresh_db(); my $config = OpenGuides::Test->make_basic_config; my $guide = OpenGuides->new( config => $config ); my $search = OpenGuides::Search->new( config => $config ); my %results; %results = $search->run( vars => { format => "raw" } ); is_deeply( \%results, { }, "raw search returns empty hash if no criteria supplied" ); %results = $search->run( vars => { search => "banananana", format => "raw" } ); is_deeply( \%results, { }, "raw search returns empty hash if no hits on search string" ); # Pop some data in and search again. OpenGuides::Test->write_data( guide => $guide, node => "Red Lion", content => "A nice pub in Anyville.", summary => "Nice pub.", os_x => 500000, os_y => 150000, ); OpenGuides::Test->write_data( guide => $guide, node => "Blacksmiths Arms", content => "Not a very nice pub.", summary => "Rubbish pub.", os_x => 500100, os_y => 150000, ); OpenGuides::Test->write_data( guide => $guide, node => "Carpenters Arms", content => "Not a bad pub.", summary => "Average pub.", os_x => 450000, os_y => 140000, ); %results = $search->run( vars => { search => "arms", format => "raw" } ); is_deeply( [ sort keys %results ], [ "Blacksmiths Arms", "Carpenters Arms" ], "raw search on single word finds the right nodes" ); my %ba = %{$results{"Blacksmiths Arms"}}; is( $ba{name}, "Blacksmiths Arms", "result hash has correct name" ); is( $ba{summary}, "Rubbish pub.", "...and correct summary" ); ok( $ba{wgs84_long}, "...WGS-84 latitude returned" ); ok( $ba{wgs84_lat}, "...WGS-84 longitude returned" ); ok( $ba{score}, "...score returned" ); ok( !$ba{distance}, "...no distance returned" ); # Now try a distance search. %results = $search->run( vars => { os_dist => 1000, os_x => 500200, os_y => 150000, format => "raw", } ); is_deeply( [ sort keys %results ], [ "Blacksmiths Arms", "Red Lion" ], "raw distance search finds the right nodes" ); my %rl = %{$results{"Red Lion"}}; is( $rl{name}, "Red Lion", "result hash has correct name" ); is( $rl{summary}, "Nice pub.", "...and correct summary" ); ok( $rl{wgs84_lat}, "...WGS-84 latitude returned" ); ok( $rl{wgs84_long}, "...WGS-84 longitude returned" ); ok( !$rl{score}, "...no score returned" ); is( $rl{distance}, 200, "...correct distance returned" );