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 => ( 59 * scalar @Wiki::Toolkit::TestLib::wiki_info ); } my $iterator = Wiki::Toolkit::TestLib->new_wiki_maker; while ( my $wiki = $iterator->new_wiki ) { # Add three base nodes foreach my $name ( qw( Carrots Handbags Cheese ) ) { $wiki->write_node( $name, "content" ) or die "Can't write node"; } # Add three more versions of Cheese my %node = $wiki->retrieve_node("Cheese"); $wiki->write_node("Cheese", "Content v2", $node{checksum}, { "foo" => "bar" } ) or die "Can't write node"; %node = $wiki->retrieve_node("Cheese"); $wiki->write_node("Cheese", "Content v3", $node{checksum}, { "foo" => "bar", "bar" => "foo" } ) or die "Can't write node"; %node = $wiki->retrieve_node("Cheese"); $wiki->write_node("Cheese", "Content v4", $node{checksum} ) or die "Can't write node"; # Fetch all the versions my @all_versions = $wiki->list_node_all_versions("Cheese"); is( scalar @all_versions, 4, "list_node_all_versions gives the right number back" ); # Check them is( $all_versions[0]->{'version'}, 4, "right ordering" ); is( $all_versions[1]->{'version'}, 3, "right ordering" ); is( $all_versions[2]->{'version'}, 2, "right ordering" ); is( $all_versions[3]->{'version'}, 1, "right ordering" ); is( $all_versions[0]->{'name'}, "Cheese", "right node" ); is( $all_versions[1]->{'name'}, "Cheese", "right node" ); is( $all_versions[2]->{'name'}, "Cheese", "right node" ); is( $all_versions[3]->{'name'}, "Cheese", "right node" ); # Fetch with content too @all_versions = $wiki->list_node_all_versions( name => "Cheese", with_content => 1 ); is( scalar @all_versions, 4, "list_node_all_versions gives the right number back" ); # Check them is( $all_versions[0]->{'version'}, 4, "right ordering" ); is( $all_versions[1]->{'version'}, 3, "right ordering" ); is( $all_versions[2]->{'version'}, 2, "right ordering" ); is( $all_versions[3]->{'version'}, 1, "right ordering" ); is( $all_versions[0]->{'name'}, "Cheese", "right node" ); is( $all_versions[1]->{'name'}, "Cheese", "right node" ); is( $all_versions[2]->{'name'}, "Cheese", "right node" ); is( $all_versions[3]->{'name'}, "Cheese", "right node" ); is( $all_versions[0]->{'content'}, "Content v4", "right node" ); is( $all_versions[1]->{'content'}, "Content v3", "right node" ); is( $all_versions[2]->{'content'}, "Content v2", "right node" ); is( $all_versions[3]->{'content'}, "content", "right node" ); # With metadata, but not content @all_versions = $wiki->list_node_all_versions( name => "Cheese", with_content => 0, with_metadata => 1 ); is( scalar @all_versions, 4, "list_node_all_versions gives the right number back" ); # Check them is( $all_versions[0]->{'version'}, 4, "right ordering" ); is( $all_versions[1]->{'version'}, 3, "right ordering" ); is( $all_versions[2]->{'version'}, 2, "right ordering" ); is( $all_versions[3]->{'version'}, 1, "right ordering" ); is( $all_versions[0]->{'name'}, "Cheese", "right node" ); is( $all_versions[1]->{'name'}, "Cheese", "right node" ); is( $all_versions[2]->{'name'}, "Cheese", "right node" ); is( $all_versions[3]->{'name'}, "Cheese", "right node" ); is( $all_versions[0]->{'content'}, undef, "right node" ); is( $all_versions[1]->{'content'}, undef, "right node" ); is( $all_versions[2]->{'content'}, undef, "right node" ); is( $all_versions[3]->{'content'}, undef, "right node" ); my %md_1 = (); my %md_2 = (foo=>'bar'); my %md_3 = (foo=>'bar',bar=>'foo'); my %md_4 = (); is_deeply( $all_versions[0]->{'metadata'}, \%md_4, "right metadata" ); is_deeply( $all_versions[1]->{'metadata'}, \%md_3, "right metadata" ); is_deeply( $all_versions[2]->{'metadata'}, \%md_2, "right metadata" ); is_deeply( $all_versions[3]->{'metadata'}, \%md_1, "right metadata" ); # With both @all_versions = $wiki->list_node_all_versions( name => "Cheese", with_content => 1, with_metadata => 1 ); is( scalar @all_versions, 4, "list_node_all_versions gives the right number back" ); # Check them is( $all_versions[0]->{'version'}, 4, "right ordering" ); is( $all_versions[1]->{'version'}, 3, "right ordering" ); is( $all_versions[2]->{'version'}, 2, "right ordering" ); is( $all_versions[3]->{'version'}, 1, "right ordering" ); is( $all_versions[0]->{'name'}, "Cheese", "right node" ); is( $all_versions[1]->{'name'}, "Cheese", "right node" ); is( $all_versions[2]->{'name'}, "Cheese", "right node" ); is( $all_versions[3]->{'name'}, "Cheese", "right node" ); is( $all_versions[0]->{'content'}, "Content v4", "right node" ); is( $all_versions[1]->{'content'}, "Content v3", "right node" ); is( $all_versions[2]->{'content'}, "Content v2", "right node" ); is( $all_versions[3]->{'content'}, "content", "right node" ); is_deeply( $all_versions[0]->{'metadata'}, \%md_4, "right metadata" ); is_deeply( $all_versions[1]->{'metadata'}, \%md_3, "right metadata" ); is_deeply( $all_versions[2]->{'metadata'}, \%md_2, "right metadata" ); is_deeply( $all_versions[3]->{'metadata'}, \%md_1, "right metadata" ); # Finally, check that we still only have 1 version of the carrots node my @carrots_versions = $wiki->list_node_all_versions( name => "Carrots", with_content => 1, with_metadata => 1 ); is( scalar @carrots_versions, 1, "list_node_all_versions gives the right number back" ); is( $carrots_versions[0]->{'version'}, 1, "right ordering" ); is( $carrots_versions[0]->{'name'}, "Carrots", "right node" ); }