The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Wiki::Toolkit::TestLib;
use Test::More;

if ( scalar @Wiki::Toolkit::TestLib::wiki_info == 0 ) {
    plan skip_all => "no backends configured";
} else {
    plan tests => ( 12 * scalar @Wiki::Toolkit::TestLib::wiki_info );
}

my $iterator = Wiki::Toolkit::TestLib->new_wiki_maker;

while ( my $wiki = $iterator->new_wiki ) {
    # Test a simple write and retrieve.
    ok( $wiki->write_node("A Node", "Node content."),
        "write_node can create a node" );
    is( $wiki->retrieve_node("A Node"), "Node content.",
        "retrieve_node can retrieve it" );

    # Test calling syntax of ->retrieve_node.
    eval { $wiki->retrieve_node; };
    ok( $@, "retrieve_node dies if we don't tell it a node parameter" );
    is( $wiki->retrieve_node(name => "A Node"), "Node content.",
        "retrieve_node still works if we supply params as a hash" );
    is( $wiki->retrieve_node(name => "A Node", version => 1), "Node content.",
        "...still works if we supply a version param" );
    my %node_data = $wiki->retrieve_node("A Node");
    is( $node_data{content}, "Node content.",
	"...still works when called in list context" );
    foreach (qw( last_modified version checksum )) {
        ok( defined $node_data{$_}, "...and $_ is defined" );
    }

    # Test ->node_exists.
    ok( $wiki->node_exists("A Node"),
        "node_exists returns true for an existing node" );
    ok( ! $wiki->node_exists("This Is A Nonexistent Node"),
	    "...and false for a nonexistent one" );

    # Test -> node_name_for_id
    my $id = $wiki->store->{_dbh}->selectrow_array("SELECT id FROM node WHERE name = 'A Node'");
    is( "A Node", $wiki->store->node_name_for_id($id),
        "Can fetch the name of a node with a id" );
}