use strict; use Wiki::Toolkit::Setup::SQLite; use OpenGuides::Config; use OpenGuides; use OpenGuides::Test; 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 => 19; OpenGuides::Test::refresh_db(); my $config = OpenGuides::Config->new( vars => { dbtype => "sqlite", dbname => "t/node.db", indexing_directory => "t/indexes", script_name => "wiki.cgi", script_url => "http://example.com/", site_name => "Test Site", template_path => "./templates", home_name => "Home", admin_pass => "password", } ); eval { require Wiki::Toolkit::Search::Plucene; }; if ( $@ ) { $config->use_plucene ( 0 ) }; 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, { source => "alternate.cgi?Test_Page" } ); my $output = eval { $guide->display_node( id => "Test Page", return_output => 1 ); }; is( $@, "", "->display_node doesn't die" ); like( $output, qr{\Edit\s+this\s+page}, "...and edit link is redirected to source URL" ); $config->home_name( "My Home Page" ); $output = $guide->display_node( return_output => 1 ); like( $output, qr/My\s+Home\s+Page/, "...and defaults to the home node, and takes notice of what we want to call it" ); like( $output, qr{\QEdit\s+this\s+page}, "...and home page has an edit link" ); my %tt_vars = $guide->display_node( return_tt_vars => 1 ); ok( defined $tt_vars{recent_changes}, "...and recent_changes is set for the home node even if we have changed its name" ); $wiki->write_node( 'Redirect Test', '#REDIRECT Test Page', undef ); $output = $guide->display_node( id => 'Redirect Test', return_output => 1, intercept_redirect => 1 ); like( $output, qr{^\QLocation: http://example.com/wiki.cgi?id=Test_Page;oldid=Redirect_Test}ms, '#REDIRECT redirects correctly' ); $output = $guide->display_node( id => 'Redirect Test', return_output => 1, redirect => 0 ); unlike( $output, qr{^\QLocation: }ms, '...but not with redirect=0' ); # Write a node, then delete one each of its categories and locales. OpenGuides::Test->write_data( guide => $guide, node => "Non-existent categories and locales", categories => "Does Not Exist\r\nDoes Exist", locales => "Does Not Exist\r\nDoes Exist", return_output => 1, ); foreach my $id ( ( "Category Does Not Exist", "Locale Does Not Exist" ) ) { $guide->delete_node( id => $id, password => "password", return_output => 1, ); } # Check the display comes up right for the existent and nonexistent. $output = $guide->display_node( id => 'Non-existent categories and locales', return_output => 1 ); unlike( $output, qr{\Qwrite_data( guide => $guide, node => "Existent categories and locales", categories => "does exist", locales => "does exist", return_output => 1, ); $output = $guide->display_node( id => "Existent categories and locales", return_output => 1 ); like( $output, qr{\Qdisplay_node( id => "Does not exist", return_output => 1 ); like( $output, qr{\QWe don't have a node called "Does not exist".}, "not found message shows up" ); unlike( $output, qr{\QRevision 0}, "bogus revision number doesn't show up" ); unlike( $output, qr{\QLast edited}, "bogus last edited doesn't show up" ); like ( $output, qr{404 Not Found}, "404 status for empty node" );