The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T
# /* vim:et: set ts=4 sw=4 sts=4 tw=78: */
#$Id: 05-results-resource.t,v 1.4 2009/09/23 06:12:10 dinosau2 Exp $

use strict;
use warnings;

#use Test::More qw/no_plan/;
#use Test::More tests => 22;
use Test::More tests => 1;
use Data::Dumper qw/Dumper/;
use Encode qw/decode encode/;
use WWW::TasteKid;
use URI;


# disabling tests for now
ok 'Maximum request rate exceeded. Please try again later, or contact us if you have any questions. Thank you.';
exit;



my $tskd = WWW::TasteKid->new;
$tskd->query({ type => 'music', name => 'bach' });
# show in example
#my $debug_query = $tskd->query_inspection; # inspect what in the query
#warn $debug_query;
$tskd->ask({ verbose => 1 });
my $res = $tskd->results_resource;

# order may change but these 4 should remain 'suggested' from bach,... (I hope)
#use utf8;
my @expected_in_res = (
   'George Frideric Handel',
   'Johannes Brahms',
   'Gustav Mahler',
   'Igor Stravinsky', # consistenly in results
   #'Joseph Haydn',
   #'Johannes Brahms',
   #"Anton\x{ed}n Leopold Dvo\x{159}\x{e1}k"
   #'Antonín Leopold Dvořák'
);

my @received = ();
my $seen = 0;
foreach my $r (@{$res}){
    #warn $r->name;
    if ( scalar grep { $r->name eq encode('utf8',$_) } @expected_in_res ) {
        push @received, $r;
        $seen++;
    }
}
#pop @received;
is $seen, scalar @expected_in_res;
is scalar @received, 4;
pop @received; # an array of result objects


# now check verbose data
my $tskdr1 = WWW::TasteKidResult->new;
$tskdr1->name('George Frideric Handel');
$tskdr1->type('music');
$tskdr1->wteaser(q{George Frideric Handel});
$tskdr1->wurl('http://en.wikipedia.org/wiki/George_Frideric_Handel');
#$tskdr1->ytitle(q{George Frideric Handel - Messiah "Hallelujah!"});
$tskdr1->ytitle(q{George Frideric Handel - });
$tskdr1->yurl(q{http://www.youtube.com/v/3uOabPZScQs&f=videos&c=TasteKid&app=youtube_gdata});
 
my $tskdr2 = WWW::TasteKidResult->new;
$tskdr2->name('Johannes Brahms');
$tskdr2->type('music');
$tskdr2->wteaser(q{Johannes Brahms});
$tskdr2->wurl('http://en.wikipedia.org/wiki/Johannes_Brahms');
$tskdr2->ytitle(q{Johannes Brahms-});
$tskdr2->yurl(q{http://www.youtube.com/v/TJcoaIeH3GI&f=videos&c=TasteKid&app=youtube_gdata});

#my $tskdr3 = WWW::TasteKidResult->new;
#$tskdr3->name('Joseph Haydn');
#$tskdr3->type('music');
#$tskdr3->wteaser(q{(Franz) Joseph Haydn});
#$tskdr3->wurl('http://en.wikipedia.org/wiki/Joseph_Haydn');
#$tskdr3->ytitle(q{Joseph Haydn - Piano Sonata in Eb});
#$tskdr3->yurl(q{http://www.youtube.com/v/Vkse1g9ibnM&f=videos&c=TasteKid&app=youtube_gdata});

my @r_obj = ($tskdr1,$tskdr2);  

for my $i (0..1){

    next unless isa_ok($received[$i], 'WWW::TasteKidResult');
    is $received[$i]->name, $r_obj[$i]->name;

    is $received[$i]->type, $r_obj[$i]->type;

    my $exp =  $r_obj[$i]->wteaser;
    ok substr($received[$i]->wteaser, 0, 35) =~ /$exp/i;

    #is $received[$i]->wurl,   $r_obj[$i]->wurl;
    my $url_got = URI->new($received[$i]->wurl);
    my $url_exp = URI->new($r_obj[$i]->wurl);
    is $url_got->host, $url_exp->host;

    # at least first name in url
    my $u = $url_got->as_string;
    my ($f) = split /\s+/, $r_obj[$i]->name, 3;
    ok $f.'_' =~ /$u/;

    $exp =  $r_obj[$i]->ytitle;
    ok $received[$i]->ytitle =~ /$exp/;

    #is $received[$i]->yurl,   $r_obj[$i]->yurl;
    my $u_got = URI->new($received[$i]->yurl);
    my $u_exp = URI->new($r_obj[$i]->yurl);
    is $u_got->host, $u_exp->host, 

    my $s = $u_exp->as_string;
    ok $s =~ /TasteKid/;
    ok $s =~ /youtube_gdata/;
}


## start for dev, test locally
#use LWP::Simple;
#$tskd->set_xml_result(
#    get('file:///'.dirname(abs_path(__FILE__)).'/data/bach_verbose.xml')
#);
## end for dev, test locally