use strict; use Wiki::Toolkit::TestLib; use Test::More; use Time::Piece; 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 ) { # Put some test data in. $wiki->write_node( "Home", "This is the home node." ) or die "Couldn't write node"; # Test writing to existing nodes. my %node_data = $wiki->retrieve_node("Home"); my $slept = sleep(2); warn "Slept for less than a second, 'lastmod' test may fail" unless $slept >= 1; ok( $wiki->write_node("Home", "xx", $node_data{checksum}), "write_node succeeds when node matches checksum" ); ok( ! $wiki->write_node("Home", "foo", $node_data{checksum}), "...and flags when it doesn't" ); my %new_node_data = $wiki->retrieve_node("Home"); print "# version now: [$new_node_data{version}]\n"; is( $new_node_data{version}, $node_data{version} + 1, "...and the version number is updated on successful writing" ); my $lastmod = Time::Piece->strptime($new_node_data{last_modified}, $Wiki::Toolkit::Store::Database::timestamp_fmt); my $prev_lastmod = Time::Piece->strptime($node_data{last_modified}, $Wiki::Toolkit::Store::Database::timestamp_fmt); print "# [$lastmod] [$prev_lastmod]\n"; ok( $lastmod > $prev_lastmod, "...as is last_modified" ); my %old_content = $wiki->retrieve_node( name => "Home", version => 2 ); is( $old_content{'version'}, "2", "...and old versions are still available" ); is( $old_content{'content'}, "xx", "...and old versions have right content" ); # Ensure it's the same whichever way we fetch the new version is_deeply(\%old_content, \%new_node_data, "New version the same however fetched"); # Test retrieving with checksums. %node_data = $wiki->retrieve_node("Home"); ok( $node_data{checksum}, "retrieve_node does return a checksum" ); is( $node_data{content}, $wiki->retrieve_node("Home"), "...and the same content as when called in scalar context" ); ok( $wiki->verify_checksum("Home", $node_data{checksum}), "...and verify_checksum is happy with the checksum" ); $wiki->write_node( "Home", $node_data{content}, $node_data{checksum} ) or die "Couldn't write node"; ok( $wiki->verify_checksum("Home", $node_data{checksum}), "...still happy when we write node again with exact same content" ); $wiki->write_node("Home", "foo bar wibble", $node_data{checksum} ) or die "Couldn't write node"; ok( ! $wiki->verify_checksum("Home", $node_data{checksum}), "...but not once we've changed the node content" ); }