use strict; use Wiki::Toolkit::TestConfig::Utilities; use Wiki::Toolkit; use URI::Escape; # Note - update the count in the skip block to match the number here # we would put the number in a variable, but that doesn't seem to work use Test::More tests => (3 + 16 * $Wiki::Toolkit::TestConfig::Utilities::num_stores); use_ok( "Wiki::Toolkit::Feed::Atom" ); eval { my $atom = Wiki::Toolkit::Feed::Atom->new; }; ok( $@, "new croaks if no wiki object supplied" ); eval { my $atom = Wiki::Toolkit::Feed::Atom->new( wiki => "foo" ); }; ok( $@, "new croaks if something that isn't a wiki object supplied" ); my %stores = Wiki::Toolkit::TestConfig::Utilities->stores; my ($store_name, $store); while ( ($store_name, $store) = each %stores ) { SKIP: { skip "$store_name storage backend not configured for testing", 16 unless $store; print "#\n##### TEST CONFIG: Store: $store_name\n#\n"; my $wiki = Wiki::Toolkit->new( store => $store ); my %default_config = ( wiki => $wiki, site_name => "Wiki::Toolkit Test Site", make_node_url => sub { my $id = uri_escape($_[0]); my $version = $_[1] || ''; $version = uri_escape($version) if $version; "http://example.com/?id=$id;version=$version"; }, recent_changes_link => "http://example.com/?RecentChanges", atom_link => "http://example.com/?action=rc;format=atom", ); my $atom = eval { Wiki::Toolkit::Feed::Atom->new( %default_config, site_url => "http://example.com/kakeswiki/" ); }; is( $@, "", "'new' doesn't croak if wiki object and mandatory parameters supplied" ); isa_ok( $atom, "Wiki::Toolkit::Feed::Atom" ); my $feed = eval { $atom->recent_changes; }; is( $@, "", "->recent_changes doesn't croak" ); # Check the things that are generated by the mandatory arguments. like( $feed, qr||, "make_node_url is used" ); # Check stuff that comes from the metadata. like( $feed, qr|Kake|, "username picked up as author" ); like( $feed, qr|.*\[nou]|, "username included in summary" ); # Check we also have some categories like( $feed, qr||, "contains categories" ); my $charset = $wiki->store->{_charset}; like( $feed, qr|recent_changes( items => 2 ); unlike( $feed, qr|Test Node 1|, "items param works" ); # Test the 'days' parameter. $feed = $atom->recent_changes( days => 2 ); like( $feed, qr|Old Node|, "days param works" ); # Test ignoring minor changes. $feed = $atom->recent_changes( ignore_minor_edits => 1 ); unlike( $feed, qr|This is a minor change.|, "ignore_minor_edits works" ); # Get a new Atom feed maker, with a different encoding $atom = eval { Wiki::Toolkit::Feed::Atom->new( %default_config, site_url => "http://example.com/kakeswiki/", encoding => "UTF-16" ); }; # Test personalised feeds. $feed = $atom->recent_changes( filter_on_metadata => { username => "Kake", }, ); unlike( $feed, qr|nou|, "can filter on a single metadata criterion" ); $feed = $atom->recent_changes( filter_on_metadata => { username => "Kake", locale => "Bloomsbury", }, ); unlike( $feed, qr|Test Node 1|, "can filter on two criteria" ); # Test the xml headers again, now we have given a character set like( $feed, qr|