Acme-Claude-Shell

 view release on metacpan or  search on metacpan

t/01-tools.t  view on Meta::CPAN

use Cwd qw(getcwd);

# Test the Tools module functionality

use_ok('Acme::Claude::Shell::Tools', 'shell_tools');

# Create a mock session object for testing
package MockSession;
sub new {
    my ($class, %args) = @_;
    return bless {
        working_dir => $args{working_dir} // '.',
        colorful    => $args{colorful} // 0,
        safe_mode   => $args{safe_mode} // 1,
        _history    => [],
        _spinner    => undef,
    }, $class;
}
sub working_dir { $_[0]->{working_dir} }
sub colorful { $_[0]->{colorful} }
sub safe_mode { $_[0]->{safe_mode} }

t/02-hooks.t  view on Meta::CPAN

# Test the Hooks module functionality

use_ok('Acme::Claude::Shell::Hooks', 'safety_hooks');
use_ok('Claude::Agent::Hook::Matcher');
use_ok('Claude::Agent::Hook::Result');

# Create a mock session object for testing
package MockSession;
sub new {
    my ($class, %args) = @_;
    return bless {
        working_dir => $args{working_dir} // '.',
        colorful    => $args{colorful} // 0,
        safe_mode   => $args{safe_mode} // 1,
        verbose     => $args{verbose} // 0,
        audit_log   => $args{audit_log} // 0,
        _history    => [],
        _spinner    => undef,
    }, $class;
}
sub working_dir { $_[0]->{working_dir} }

t/02-hooks.t  view on Meta::CPAN

    my $audit_hooks = safety_hooks($audit_session);

    # Run a PreToolUse hook
    my $matcher = $audit_hooks->{PreToolUse}[0];
    my $input = {
        tool_name  => 'mcp__shell-tools__read_file',
        tool_input => { path => '/tmp/test.txt' },
    };

    # Create mock context
    my $context = bless {}, 'Claude::Agent::Hook::Context';

    require IO::Async::Loop;
    my $loop = IO::Async::Loop->new;

    my $future = $matcher->run_hooks($input, 'test-id-123', $context, $loop);
    my $results = $future->get;

    # Check audit log was populated
    ok(exists $audit_session->{_audit_log}, 'Audit log created');
    is(scalar(@{$audit_session->{_audit_log} // []}), 1, 'One audit entry');

t/02-hooks.t  view on Meta::CPAN

# Test hook returns proper Result
subtest 'Hook returns proper Result' => sub {
    plan tests => 2;

    my $matcher = $hooks->{PreToolUse}[0];
    my $input = {
        tool_name  => 'mcp__shell-tools__execute_command',
        tool_input => { command => 'ls' },
    };

    my $context = bless {}, 'Claude::Agent::Hook::Context';

    require IO::Async::Loop;
    my $loop = IO::Async::Loop->new;

    my $future = $matcher->run_hooks($input, 'test-id', $context, $loop);
    my $results = $future->get;

    ok(ref($results) eq 'ARRAY', 'Results is array');
    ok($results->[0]{decision} eq 'continue', 'Returns continue decision');
};



( run in 1.681 second using v1.01-cache-2.11-cpan-39bf76dae61 )