use strict;
use OpenGuides;
use OpenGuides::Test;
use Test::More;
use Wiki::Toolkit::Setup::SQLite;
eval { require DBD::SQLite; };
if ( $@ ) {
my ($error) = $@ =~ /^(.*?)\n/;
plan skip_all => "DBD::SQLite could not be used - no database to test with ($error)";
}
eval { require Test::HTML::Content; };
if ( $@ ) {
plan skip_all => "Test::HTML::Content not installed.";
}
plan tests => 30;
my ( $config, $guide, $wiki );
# Clear out the database from any previous runs.
OpenGuides::Test::refresh_db();
# Make sure node image fields don't show up in edit form if config says
# they shouldn't.
$config = OpenGuides::Test->make_basic_config;
$config->enable_node_image( 0 );
$guide = OpenGuides->new( config => $config );
$wiki = $guide->wiki;
my $output = $guide->display_edit_form(
id => "Red Lion",
return_output => 1,
);
# Strip Content-Type header to stop Test::HTML::Content getting confused.
$output =~ s/^Content-Type.*[\r\n]+//m;
Test::HTML::Content::no_tag( $output, "input", { name => "node_image" },
"node_image field not in edit form if config says it shouldn't be" );
Test::HTML::Content::no_tag( $output, "input",
{ name => "node_image_licence" },
"...ditto node_image_licence" );
Test::HTML::Content::no_tag( $output, "input",
{ name => "node_image_copyright" },
"...ditto node_image_copyright" );
Test::HTML::Content::no_tag( $output, "input",
{ name => "node_image_url" },
"...ditto node_image_url" );
# And make sure they do if it says they should.
$config->enable_node_image( 1 );
$guide = OpenGuides->new( config => $config );
$wiki = $guide->wiki;
$output = $guide->display_edit_form(
id => "Red Lion",
return_output => 1,
);
# Strip Content-Type header to stop Test::HTML::Content getting confused.
$output =~ s/^Content-Type.*[\r\n]+//m;
Test::HTML::Content::tag_ok( $output, "input", { name => "node_image" },
"node_image field appears in edit form if config says it should" );
Test::HTML::Content::tag_ok( $output, "input",
{ name => "node_image_licence" },
"...ditto node_image_licence" );
Test::HTML::Content::tag_ok( $output, "input",
{ name => "node_image_copyright" },
"...ditto node_image_copyright" );
Test::HTML::Content::tag_ok( $output, "input",
{ name => "node_image_url" },
"...ditto node_image_url" );
# Write all four fields to database, and make sure they're there.
OpenGuides::Test->write_data(
guide => $guide,
node => "Red Lion",
node_image => "http://example.com/foo.jpg",
node_image_licence => "http://example.com/bar/",
node_image_copyright => "Kake L Pugh",
node_image_url => "http://example.com/~kake/",
);
my %node_data = $wiki->retrieve_node( "Red Lion" );
is( $node_data{metadata}{node_image}[0], "http://example.com/foo.jpg",
"node_image saved to database on node write" );
is( $node_data{metadata}{node_image_licence}[0], "http://example.com/bar/",
"...node_image_licence too" );
is( $node_data{metadata}{node_image_copyright}[0], "Kake L Pugh",
"...node_image_copyright too" );
is( $node_data{metadata}{node_image_url}[0], "http://example.com/~kake/",
"...node_image_url too" );
# Make sure their content shows up in the edit form.
$output = $guide->display_edit_form(
id => "Red Lion",
return_output => 1,
);
# Strip Content-Type header to stop Test::HTML::Content getting confused.
$output =~ s/^Content-Type.*[\r\n]+//m;
Test::HTML::Content::tag_ok( $output, "input",
{ name => "node_image",
value => "http://example.com/foo.jpg" },
"node_image field has correct value in edit form",
);
Test::HTML::Content::tag_ok( $output, "input",
{ name => "node_image_licence",
value => "http://example.com/bar/" },
"...ditto node_image_licence" );
Test::HTML::Content::tag_ok( $output, "input",
{ name => "node_image_copyright",
value => "Kake L Pugh" },
"...ditto node_image_copyright" );
Test::HTML::Content::tag_ok( $output, "input",
{ name => "node_image_url",
value => "http://example.com/~kake/" },
"...ditto node_image_url" );
# Make sure they're displayed when a page is viewed.
$output = $guide->display_node(
id => "Red Lion",
return_output => 1,
);
# Strip Content-Type header to stop Test::HTML::Content getting confused.
$output =~ s/^Content-Type.*[\r\n]+//m;
Test::HTML::Content::tag_ok( $output, "img",
{ src => "http://example.com/foo.jpg" },
"node_image displayed on page" );
Test::HTML::Content::tag_ok( $output, "a",
{ href => "http://example.com/bar/" },
"...ditto node_image_licence" );
Test::HTML::Content::text_ok( $output, qr/Kake L Pugh/,
"...ditto node_image_copyright" );
Test::HTML::Content::tag_ok( $output, "a",
{ href => "http://example.com/~kake/" },
"...ditto node_image_url" );
# Now try to commit some edits without giving the checksum.
$output = OpenGuides::Test->write_data(
guide => $guide,
node => "Red Lion",
node_image => "http://eg.com/foo.jpg",
node_image_licence
=> "http://eg.com/bar/",
node_image_copyright => "NotKakeNo",
node_image_url
=> "http://eg.com/~kake/",
omit_checksum => 1,
return_output => 1,
);
# Strip Content-Type header to stop Test::HTML::Content getting confused.
$output =~ s/^Content-Type.*[\r\n]+//m;
Test::HTML::Content::tag_ok( $output, "input",
{ name => "node_image",
value => "http://example.com/foo.jpg" },
"Edit conflict form has input box with old "
. "node_image value in" );
Test::HTML::Content::tag_ok( $output, "input",
{ name => "node_image_licence",
value => "http://example.com/bar/" },
"...and one with old node_image_licence value" );
Test::HTML::Content::tag_ok( $output, "input",
{ name => "node_image_copyright",
value => "Kake L Pugh" },
"...and one with old node_image_copyright value" );
Test::HTML::Content::tag_ok( $output, "input",
{ name => "node_image_url",
value => "http://example.com/~kake/" },
"...and one with old node_image_url value" );
Test::HTML::Content::text_ok( $output, "http://eg.com/foo.jpg",
"...new node_image value appears too" );
Test::HTML::Content::text_ok( $output, "http://eg.com/bar/",
"...as does new node_image_licence value" );
Test::HTML::Content::text_ok( $output, "NotKakeNo",
"...as does new node_image_copyright value" );
Test::HTML::Content::text_ok( $output, "http://eg.com/~kake/",
"...as does new node_image_url value" );
# Write node with node_image field consisting only of whitespace, make
# sure it gets stripped.
OpenGuides::Test->write_data(
guide => $guide,
node => "Angel and Greyhound",
node_image => " ",
);
%node_data = $wiki->retrieve_node( "Angel and Greyhound" );
ok( !$node_data{metadata}{node_image},
"node_image of whitespace only isn't saved to database" );
$output = $guide->display_node(
id => "Angel and Greyhound",
return_output => 1,
);
$output =~ s/^Content-Type.*[\r\n]+//m;
Test::HTML::Content::no_tag( $output, "img" => { id => "node_image" },
"...or displayed on page" );