Docker-Registry
view release on metacpan or search on metacpan
t/05_pagination.t view on Meta::CPAN
my $last = 'ukD72mdD/mC8b5xV3susmJzzaTgp';
before all => sub {
$expected_request = _request({ repository => $repository, last => $last });
$stubbed_response = _response({ last => $last });
$d->caller
->expects('send_request')
->with_deep($expected_request)
->returns($stubbed_response);
};
it 'is added to the request & the result is correctly parsed' => sub {
$result = $d->repository_tags(repository => $repository, last => $last);
cmp_ok($result->name, 'eq', $repository);
is_deeply($result->tags, [map { "v$_" } (1..2)]);
};
it "the received 'last' value in the 'Link' header is returned in the result object" => sub {
cmp_ok($result->last, 'eq', $last);
};
};
};
};
runtests unless caller;
use URI;
sub _request {
my $args = shift;
my $url = URI->new(join '/', 'https://my.awesome.registry', 'v2', $args->{repository}, 'tags/list');
if ($args->{n} or $args->{last}) {
if ($args->{n} and !$args->{last}) {
$url->query_form(n => $args->{n});
} elsif (!$args->{n} and $args->{last}) {
$url->query_form(last => $args->{last});
} else {
$url->query_form(last => $args->{last}, n => $args->{n});
}
}
return Docker::Registry::Request->new(
method => 'GET',
url => $url->as_string,
);
}
sub _response {
my $args = shift;
my $n = $args->{n} || 2;
return Docker::Registry::Response->new(
status => 200,
headers => {
'docker-distribution-api-version' => 'registry/2.0',
'date' => 'Wed, 21 Oct 2015 07:28:00 GMT',
'transfer-encoding' => 'chunked',
'content-type' => 'text/plain; charset=utf-8',
'connection' => 'keep-alive',
$args->{last}
? (link => "<https://my.awesome.registry/v2/my-repository/tags/list?last=$args->{last}&n=1000>; rel='next'")
: (),
},
content => $args->{content}
? encode_json($args->{content})
: encode_json({ name => 'my-repository', tags => [map { "v$_" } (1..$n)] }),
);
}
( run in 1.123 second using v1.01-cache-2.11-cpan-d7f47b0818f )