The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl

use strict;
use warnings;

use Test::More tests => 101;

use FindBin qw($Bin);
use XML::Simple qw(:strict);

BEGIN { use_ok('WebService::TVDB::Series'); }

my $series;    # WebService::TVDB::Series object
my $xml;       # parsed xml data

### empty new
$series = WebService::TVDB::Series->new();
isa_ok( $series, 'WebService::TVDB::Series' );

### parse actors.xml
$xml = XML::Simple::XMLin(
    "$Bin/resources/zip/actors.xml",
    ForceArray => ['Actor'],
    KeyAttr    => 'Actor'
);
$series->_parse_actors($xml);
my $actors = $series->actors;
is( @$actors, 7, '7 actors' );

for ( @{$actors} ) {
    isa_ok( $_, 'WebService::TVDB::Actor' );
}

# check order
my $actor = @{$actors}[0];
is( $actor->id,   44200 );
is( $actor->Name, 'Caroline Quentin' );

### parse banners.xml
$xml = XML::Simple::XMLin(
    "$Bin/resources/zip/banners.xml",
    ForceArray => ['Banner'],
    KeyAttr    => 'Banner'
);
$series->_parse_banners($xml);
my $banners = $series->banners;
is( @$banners, 20, '20 banners' );

for ( @{$banners} ) {
    isa_ok( $_, 'WebService::TVDB::Banner' );
}

# check order
my $banner = @{$banners}[0];
is( $banner->id,         22614 );
is( $banner->BannerType, 'fanart' );
is( $banner->url, 'http://thetvdb.com/banners/fanart/original/76213-1.jpg' );

### parse <language.xml>
$xml = XML::Simple::XMLin(
    "$Bin/resources/zip/en.xml",
    ForceArray => ['Data'],
    KeyAttr    => 'Data'
);
$series->_parse_series_data($xml);

is( $series->Status,      'Ended' );
is( $series->Rating,      '8.4' );                # it's pretty good!
is( $series->Genre->[0],  'Comedy' );
is( $series->Actors->[0], 'Caroline Quentin' );

my $episodes = $series->episodes;
is( @$episodes, 57, '57 episodes' );
for ( @{$episodes} ) {
    isa_ok( $_, 'WebService::TVDB::Episode' );
}

# check order
my $episode = @{$episodes}[0];
is( $episode->id,          342429 );
is( $episode->EpisodeName, 'Children in Need Special' );

$episode = $series->get_episode( 6, 1 );
is( $episode->EpisodeName, 'Stag Night', 'episode title' );