use 5.010;
use strict;
use warnings;

package Test::App::MP4Meta::Source::TVDB;
use base qw(TestBase);

use Test::More;
use Test::Exception;
use Test::MockObject;

use App::MP4Meta::Source::TVDB;

use WebService::TVDB;
use WebService::TVDB::Series;

# underscored so we run first
sub _create_new : Test(1) {
    my $self = shift;

    my $tvdb = new_ok('App::MP4Meta::Source::TVDB');

    $self->{tvdb} = $tvdb;
}

sub name : Test(1) {
    my $self = shift;
    my $t    = $self->{tvdb};

    is( $t->name, 'theTVDB.com' );
}

sub get_tv_episode_not_found : Test(1) {
    my $self = shift;
    my $t    = App::MP4Meta::Source::TVDB->new();

    my $mock = Test::MockObject->new();
    $mock->set_always( 'search', [] );
    $t->{tvdb} = $mock;

    throws_ok {
        $t->get_tv_episode(
            { show_title => 'foo', season => 1, episode => 2 } );
    }
    qr/no series found/, 'no series found';
}

sub live : Test(6) {
    my $self = shift;

    return 'no live testing' unless $self->can_live_test();

    # TODO: return unless api key exists

    my $t = $self->{tvdb};

    my $e = $t->get_tv_episode(
        { show_title => 'Men Behaving Badly', season => 2, episode => 1 } );

    isa_ok( $e, 'App::MP4Meta::Source::Data::TVEpisode' );
    ok( $e->overview, 'got overview' );    # assume its sensible
    is( $e->title, 'Gary and Tony', 'got title' );
    is( $e->year,  1992,            'got year' );
    is( $e->genre, 'Comedy',        'got comedy' );
    like( $e->cover, qr/\.jpg$/, 'got cover image' );
}

1;
