#!perl # vim:ft=perl: use strict; use warnings; package Mock; use base 'RT::Client::REST::Object'; sub new { my $class = shift; bless {@_}, ref($class) || $class; } sub retrieve { shift } sub id { shift->{id} } package main; use Test::More tests => 20; use Test::Exception; use constant METHODS => ( 'new', 'count', 'get_iterator', ); BEGIN { use_ok('RT::Client::REST::SearchResult'); } for my $method (METHODS) { can_ok('RT::Client::REST::SearchResult', $method); } my $search; my @ids = (1 .. 9); lives_ok { $search = RT::Client::REST::SearchResult->new( ids => \@ids, object => sub { Mock->new(id => shift) }, ); }; ok($search->count == 9); my $iter; lives_ok { $iter = $search->get_iterator; } "'get_iterator' call OK"; ok('CODE' eq ref($iter), "'get_iterator' returns a coderef"); my @results = &$iter; ok(9 == @results, "Got 9 results in list context"); @results = &$iter; ok(0 == @results, "Got 0 results in list context second time around"); $iter = $search->get_iterator; my $i = 0; while (my $obj = &$iter) { ++$i; ok($i == $obj->id, "id as expected"); } ok(9 == $i, "Iterated 9 times (as expected)");