root/wiki-toolkit-plugin-json/trunk/t/002_basic_invocation.t @ 532

Revision 532, 1.9 KB (checked in by kake, 14 months ago)

Added some basic function tests for the JSON plugin (fixes #40).

Line 
1use strict;
2use JSON;
3use Test::More;
4use Wiki::Toolkit::Plugin::JSON;
5use Wiki::Toolkit::TestLib;
6
7if ( scalar @Wiki::Toolkit::TestLib::wiki_info == 0 ) {
8    plan skip_all => "no backends configured";
9} else {
10    plan tests => ( 3 * scalar @Wiki::Toolkit::TestLib::wiki_info );
11}
12 
13my $iterator = Wiki::Toolkit::TestLib->new_wiki_maker;
14 
15while ( my $wiki = $iterator->new_wiki ) {
16    # Put some test data in, sleeping for at least a second in between each.
17    my @nodes = ( "1st Node", "2nd Node", "3rd Node" );
18    my $start_time = time;
19
20    foreach my $node ( @nodes ) {
21        my %node_data = $wiki->retrieve_node( $node );
22        $wiki->write_node( $node, "Stuff.", $node_data{checksum} );
23        do_sleep();
24    }
25
26    # Now test the JSON Recent Changes output.
27    my $json = Wiki::Toolkit::Plugin::JSON->new(
28        wiki => $wiki,
29        site_name => "My Wiki",
30        site_url => "http://example.com/",
31        make_node_url => sub {
32            my ( $node_name, $version ) = @_;
33            $node_name =~ s/\s+/_/g; # quick and dirty
34            if ( $version ) {
35                return "http://example.com/?id=$node_name;version=$version";
36            } else {
37                return "http://example.com/?id=$node_name";
38            }
39        },
40        recent_changes_link => "http://example.com/?RecentChanges",
41    );
42
43    my $output = eval {
44           local $SIG{__WARN__} = sub { die $_[0]; };
45            $json->recent_changes;
46    };
47    ok( !$@, "->recent_changes() doesn't warn." );
48
49    my $parsed = eval {
50           local $SIG{__WARN__} = sub { die $_[0]; };
51           decode_json( $output );
52    };
53    ok( !$@, "...and its output looks like JSON." );
54    is( scalar @$parsed, 3, "...and has the right number of nodes." );
55}
56
57sub do_sleep {
58    my $slept = sleep( 2 );
59    warn "Slept for less than a second; test results may be unreliable"
60        unless $slept >= 1;
61}
Note: See TracBrowser for help on using the browser.