Claude-Agent-Code-Review
view release on metacpan or search on metacpan
t/02-tools.t view on Meta::CPAN
}
return 0;
}
sub complex {
my ($data) = @_;
for my $item (@$data) {
if ($item->{active} && $item->{valid}) {
if ($item->{type} eq 'a') {
process_a($item);
} elsif ($item->{type} eq 'b') {
process_b($item);
} else {
my $result = $item->{fallback} || default();
if ($result) {
return $result;
}
}
} elsif ($item->{retry}) {
while ($item->{attempts} < 3) {
try_again($item);
}
}
}
}
1;
END
my $orig_dir = path('.')->realpath;
chdir($tempdir);
# Test simple function
$result = execute_tool($tool,{ file => 'complex.pm', function => 'simple' });
ok(!$result->{is_error}, 'no error');
like($result->{content}[0]{text}, qr/Cyclomatic complexity: \d+/, 'has complexity');
like($result->{content}[0]{text}, qr/Low complexity/, 'simple is low');
# Test moderate function
$result = execute_tool($tool,{ file => 'complex.pm', function => 'moderate' });
like($result->{content}[0]{text}, qr/complexity/, 'has complexity');
# Test complex function
$result = execute_tool($tool,{ file => 'complex.pm', function => 'complex' });
like($result->{content}[0]{text}, qr/complexity/, 'has complexity');
# Test non-existent function
$result = execute_tool($tool,{ file => 'complex.pm', function => 'nonexistent' });
like($result->{content}[0]{text}, qr/not found/, 'function not found');
chdir($orig_dir);
};
# Test path traversal protection
subtest 'Path traversal protection' => sub {
my $server = Claude::Agent::Code::Review::Tools->create_server();
# Test get_file_context with path traversal
my $tool = $server->get_tool('get_file_context');
my $result = execute_tool($tool,{ file => '../../../etc/passwd', line => 1 });
ok($result->{is_error}, 'blocked path traversal in get_file_context');
# Test get_dependencies with path traversal
$tool = $server->get_tool('get_dependencies');
$result = execute_tool($tool,{ file => '../../../etc/passwd' });
ok($result->{is_error}, 'blocked path traversal in get_dependencies');
# Test analyze_complexity with path traversal
$tool = $server->get_tool('analyze_complexity');
$result = execute_tool($tool,{ file => '../../../etc/passwd', function => 'test' });
ok($result->{is_error}, 'blocked path traversal in analyze_complexity');
};
done_testing();
( run in 2.103 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )