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 )