The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use strict;
use warnings;

use Test::More tests => 7;                      # last test to print

use WWW::Ohloh::API;
use Exception::Class;

eval {
   WWW::Ohloh::API->get_projects( sort => 'foo' );
};

ok( Exception::Class->caught( 'OIO::Args' ), "wrong sort type throws exception" );

SKIP: {
    skip <<'END_REASON', 6 unless $ENV{OHLOH_KEY};
set the environment variable OHLOH_KEY to your api key to enable these tests
END_REASON

    my $ohloh = WWW::Ohloh::API->new( api_key => $ENV{OHLOH_KEY} );

    my $projects = $ohloh->get_projects( max => 42 );

    ok $projects->next->isa( 'WWW::Ohloh::API::Project' ), 
        "returns projects";

    my @p = $projects->next( 13 );
    is scalar( @p ) => 13, 'next($i) returns right number of projects';

    my $i;
    $i++ while $projects->next;

    is $i => 42 - 13 - 1, '"max" constructor argument';

    my $j;
    while( $_ = <$projects> ) {
        $j++ if $_->isa( 'WWW::Ohloh::API::Project' );
    }
    is $j => 42, '<> override';

    # let's try to load all projects
    $projects = $ohloh->get_projects;

    eval { $projects->all };
    ok !!$@, 'all() without "max" triggers exception';

    $projects = $ohloh->get_projects( max => 43 );
    @p = $projects->all;
    is scalar( @p ) => 43, 'all()';

}