use strict;
use CGI::Wiki::TestLib;
use Test::More;
if ( scalar @CGI::Wiki::TestLib::wiki_info == 0 ) {
plan skip_all => "no backends configured";
} else {
plan tests => ( 9 * scalar @CGI::Wiki::TestLib::wiki_info );
}
my $iterator = CGI::Wiki::TestLib->new_wiki_maker;
while ( my $wiki = $iterator->new_wiki ) {
SKIP: {
eval { require Test::MockObject; };
skip "Test::MockObject not installed", 9 if $@;
my $null_plugin = Test::MockObject->new;
my $plugin = Test::MockObject->new;
$plugin->mock( "on_register",
sub {
my $self = shift;
$self->{__registered} = 1;
$self->{__seen_nodes} = [ ];
}
);
eval { $wiki->register_plugin; };
ok( $@, "->register_plugin dies if no plugin supplied" );
eval { $wiki->register_plugin( plugin => $null_plugin ); };
is( $@, "",
"->register_plugin doesn't die if plugin which can't on_register supplied"
);
eval { $wiki->register_plugin( plugin => $plugin ); };
is( $@, "",
"->register_plugin doesn't die if plugin which can on_register supplied"
);
ok( $plugin->{__registered}, "->on_register method called" );
my @registered = $wiki->get_registered_plugins;
is( scalar @registered, 2,
"->get_registered_plugins returns right number" );
ok( ref $registered[0], "...and they're objects" );
my $regref = $wiki->get_registered_plugins;
is( ref $regref, "ARRAY", "...returns arrayref in scalar context" );
$plugin->mock( "post_write",
sub {
my ($self, %args) = @_;
push @{ $self->{__seen_nodes} },
{ name => $args{node},
version => $args{version},
content => $args{content},
metadata => $args{metadata}
};
}
);
$wiki->write_node( "Test Node", "foo", undef, {bar => "baz"} )
or die "Can't write node";
ok( $plugin->called("post_write"), "->post_write method called" );
my @seen = @{ $plugin->{__seen_nodes} };
is_deeply( $seen[0], { name => "Test Node",
version => 1,
content => "foo",
metadata => { bar => "baz" } },
"...with the right arguments" );
}
}