diff options
author | Amitai Schlair <schmonz-web-ikiwiki@schmonz.com> | 2013-02-20 21:16:19 -0500 |
---|---|---|
committer | Amitai Schlair <schmonz-web-ikiwiki@schmonz.com> | 2013-02-20 21:16:19 -0500 |
commit | d77ee60b1506302ca6e2a5bd2023c380334167c0 (patch) | |
tree | 2e52a21303a4449826da703ac0032faeaf50a243 /t | |
parent | a629b276b27bb900ec9e544820cd42aa140e8bdc (diff) | |
download | ikiwiki-d77ee60b1506302ca6e2a5bd2023c380334167c0.tar ikiwiki-d77ee60b1506302ca6e2a5bd2023c380334167c0.tar.gz |
Render fancy podcast enclosures.
Simple podcast feeds didn't have content tags and I made sure to
keep it that way. This may be unnecessarily conservative. Changing
the behavior to include empty content tags might be fine, but I
don't want to think about it right now, I just want my tests to
keep passing!
The new fancy-podcast tests are copy-pasted-edited from the
simple-podcast tests. These tests shall be refactored.
Diffstat (limited to 't')
-rwxr-xr-x | t/podcast.t | 92 |
1 files changed, 91 insertions, 1 deletions
diff --git a/t/podcast.t b/t/podcast.t index 88d2ca074..6a2c25ee1 100755 --- a/t/podcast.t +++ b/t/podcast.t @@ -9,7 +9,7 @@ BEGIN { "XML::Feed and/or HTML::Parser not available"}; } else { - eval q{use Test::More tests => 92}; + eval q{use Test::More tests => 136}; } } @@ -72,6 +72,11 @@ sub simple_podcast { qq{$format $title id}); is($body, undef, qq{$format $title no body text}); + + # prevent undef method killing test harness + $enclosure = XML::Feed::Enclosure->new({}) + unless defined $enclosure; + is($enclosure->url, $url, qq{$format $title enclosure url}); is($enclosure->type, $media_types{$title}, @@ -93,6 +98,90 @@ sub simple_podcast { ok(! system("rm -rf $tmp $statedir"), q{teardown}); } +sub fancy_podcast { + my $baseurl = 'http://example.com'; + my @command = (qw(./ikiwiki.out -plugin inline -rss -atom)); + push @command, qw(-underlaydir=underlays/basewiki); + push @command, qw(-set underlaydirbase=underlays -templatedir=templates); + push @command, "-url=$baseurl", qw(t/tinypodcast), "$tmp/out"; + + ok(! system("mkdir $tmp"), + q{setup}); + ok(! system(@command), + q{build}); + + my %media_types = ( + 'piano.mp3' => 'audio/mpeg', + 'walter.ogg' => 'video/x-theora+ogg', + ); + + for my $format (qw(atom rss)) { + my $feed = XML::Feed->parse("$tmp/out/fancy/index.$format"); + + is($feed->title, 'fancy', + qq{$format feed title}); + is($feed->link, "$baseurl/fancy/", + qq{$format feed link}); + is($feed->description, 'wiki', + qq{$format feed description}); + if ('atom' eq $format) { + is($feed->author, $feed->description, + qq{$format feed author}); + is($feed->id, $feed->link, + qq{$format feed id}); + is($feed->generator, "ikiwiki", + qq{$format feed generator}); + } + + # XXX compare against simple_podcast + # XXX make them table-driven shared code + for my $entry ($feed->entries) { + my $title = $entry->title; + my $url = $entry->id; + my $body = $entry->content->body; + my $enclosure = $entry->enclosure; + + is($entry->link, $url, qq{$format $title link}); + isnt($entry->issued, undef, + qq{$format $title issued date}); + isnt($entry->modified, undef, + qq{$format $title modified date}); + + if (defined $media_types{$title}) { + is($url, "$baseurl/$title", + qq{$format $title id}); + is($body, undef, + qq{$format $title no body text}); + is($enclosure->url, $url, + qq{$format $title enclosure url}); + is($enclosure->type, $media_types{$title}, + qq{$format $title enclosure type}); + cmp_ok($enclosure->length, '>', 0, + qq{$format $title enclosure length}); + } + else { + my $expected_id = "$baseurl/$title/"; + $expected_id =~ s/\ /_/g; + + is($url, $expected_id, + qq{$format $title id}); + isnt($body, undef, + qq{$format $title body text}); + isnt($enclosure, undef, + qq{$format $title enclosure}); + use File::Basename; + my $filename = basename($enclosure->url); + is($enclosure->type, $media_types{$filename}, + qq{$format $title enclosure type}); + cmp_ok($enclosure->length, '>', 0, + qq{$format $title enclosure length}); + } + } + } + + ok(! system("rm -rf $tmp $statedir"), q{teardown}); +} + sub single_page_html { my @command = (qw(./ikiwiki.out)); push @command, qw(-underlaydir=underlays/basewiki); @@ -211,3 +300,4 @@ sub _extract_html_links { simple_podcast(); single_page_html(); inlined_pages_html(); +fancy_podcast(); |