use strict; use CGI::Wiki::TestLib; use Test::More; use Time::Piece; if ( scalar @CGI::Wiki::TestLib::wiki_info == 0 ) { plan skip_all => "no backends configured"; } else { plan tests => ( 10 * scalar @CGI::Wiki::TestLib::wiki_info ); } my $iterator = CGI::Wiki::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}, $CGI::Wiki::Store::Database::timestamp_fmt); my $prev_lastmod = Time::Piece->strptime($node_data{last_modified}, $CGI::Wiki::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, "xx", "...and old versions are still available" ); # 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" ); }