Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 0 additions & 81 deletions t/server/controller/reverse_dependencies.t

This file was deleted.

116 changes: 116 additions & 0 deletions t/server/controller/search/reverse_dependencies.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
use strict;
use warnings;
use Test::More;
use MetaCPAN::Server::Test;

my %tests = (
'/search/reverse_dependencies/NonExistent' => [ 404, [], [] ],
'/search/reverse_dependencies/Pod-Pm' => [ 200, [], [] ],

# just dist name
'/search/reverse_dependencies/Multiple-Modules' => [
200,
[ qw( Multiple-Modules-RDeps-0.11 ) ],
[ qw( Multiple-Modules-RDeps-2.03 Multiple-Modules-RDeps-A-2.03 ) ],
],

# author/name-version
'/search/reverse_dependencies/LOCAL/Multiple-Modules-1.01' => [
200,
[ qw( Multiple-Modules-RDeps-0.11 ) ],
[ qw( Multiple-Modules-RDeps-2.03 Multiple-Modules-RDeps-A-2.03 ) ],
],

# older author/name-version with different modules
'/search/reverse_dependencies/LOCAL/Multiple-Modules-0.1' => [
200,
[ qw( Multiple-Modules-RDeps-0.11 ) ],
[ qw( Multiple-Modules-RDeps-2.03 Multiple-Modules-RDeps-Deprecated-0.01 ) ],
],
);

sub check_search_results {
my ($name, $res, $code, $rdeps) = @_;
ok( $res, $name );
is( $res->code, $code, "code $code" );
is( $res->header('content-type'),
'application/json; charset=utf-8',
'Content-type'
);
ok( my $json = eval { decode_json( $res->content ) }, 'valid json' );
return unless $code == 200;

$json = $json->{hits}{hits} if $json->{hits};
is scalar @$json, @$rdeps, 'got expected number of releases';
is_deeply
[ sort map { join '-', @{$_->{_source}}{qw(distribution version)} } @$json ],
$rdeps,
'got expected releases';
}

test_psgi app, sub {
my $cb = shift;

# verify search results
while ( my ( $k, $v ) = each %tests ) {
my ( $code, $rdep_old, $rdep_latest ) = @$v;

# all results
check_search_results("GET $k" => $cb->(GET $k
), $code, [sort(@$rdep_old, @$rdep_latest)]);

# only releases marked as latest
check_search_results("POST $k" => $cb->(POST $k,
Content => encode_json(
{ query => { match_all => {} },
filter => {
term => {
'release.status' => 'latest'
},
},
}
)
), $code, [sort(@$rdep_latest)]);
}

# test passing additional ES parameters
{
ok( my $res = $cb->(
POST "/search/reverse_dependencies/Multiple-Modules",
Content => encode_json(
{ query => { match_all => {} }, size => 1 }
)
),
"POST"
);
ok( my $json = eval { decode_json( $res->content ) }, 'valid json' );
is( $json->{hits}->{total}, 3, 'total is 3' );
is( scalar @{ $json->{hits}->{hits} }, 1, 'only 1 received' );
}

# test appending filters
{
ok( my $res = $cb->(
POST
"/search/reverse_dependencies/Multiple-Modules?fields=release.distribution",
Content => encode_json(
{ query => { match_all => {} },
filter => {
term => {
'release.distribution' =>
'Multiple-Modules-RDeps-A'
},
},
}
)
),
"POST"
);
ok( my $json = eval { decode_json( $res->content ) }, 'valid json' );
is( $json->{hits}->{total}, 1, 'total is 1' );
is( $json->{hits}->{hits}->[0]->{fields}->{distribution},
'Multiple-Modules-RDeps-A', 'filter worked' );
}
};

done_testing;
22 changes: 22 additions & 0 deletions t/var/fakecpan/configs/multiple-modules-rdeps-0.11.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"name": "Multiple-Modules-RDeps",
"abstract": "A dist that depends on Multiple::Modules",
"version": 0.11,
"meta-spec": {
"version": 1.3
},
"requires": {
"Multiple::Modules": 0
},
"X_Module_Faker": {
"cpan_author": "LOCAL",
"append": [ {
"file": "lib/Multiple/Modules/RDeps.pm",
"content": "use Multiple::Modules;\n1;\n\n=head1 NAME\n\nMultiple::Modules::RDeps - abstract"
},
{
"file": "t/foo.t",
"content": "use Test::More;"
} ]
}
}