Files
bad-ip-blocker/tests/Feature/CommandsTest.php
T
2026-11-11 23:19:20 +01:00

54 lines
1.8 KiB
PHP

<?php
use Mattitja\BadIpBlocker\Facades\BadIpBlocker;
it('adds an ip', function () {
$this->artisan('bad-ip-blocker:add', ['ip' => '203.0.113.10', '--reason' => 'bot', '--ttl' => 60])
->assertSuccessful();
expect(BadIpBlocker::all()['203.0.113.10'])
->reason->toBe('bot')
->expires_at->not->toBeNull();
});
it('rejects an invalid ip or ttl', function () {
$this->artisan('bad-ip-blocker:add', ['ip' => 'nope'])->assertFailed();
$this->artisan('bad-ip-blocker:add', ['ip' => '203.0.113.10', '--ttl' => 'abc'])->assertFailed();
expect(BadIpBlocker::all())->toBe([]);
});
it('removes an ip', function () {
BadIpBlocker::block('203.0.113.10');
$this->artisan('bad-ip-blocker:remove', ['ip' => '203.0.113.10'])->assertSuccessful();
$this->artisan('bad-ip-blocker:remove', ['ip' => '203.0.113.10'])->assertFailed();
});
it('lists ips', function () {
$this->artisan('bad-ip-blocker:list')->expectsOutputToContain('No blocked')->assertSuccessful();
BadIpBlocker::block('203.0.113.10', 'bot');
$blockedAt = BadIpBlocker::all()['203.0.113.10']['blocked_at'];
$this->artisan('bad-ip-blocker:list')
->expectsTable(['IP', 'Reason', 'Blocked at', 'Expires at'], [['203.0.113.10', 'bot', $blockedAt, 'never']])
->assertSuccessful();
});
it('prunes expired blocks', function () {
$this->artisan('bad-ip-blocker:prune')->assertSuccessful();
});
it('clears all blocks after confirmation', function () {
BadIpBlocker::block('203.0.113.10');
$this->artisan('bad-ip-blocker:clear')
->expectsConfirmation('Remove all blocked IP addresses?', 'no')
->assertFailed();
expect(BadIpBlocker::all())->not->toBe([]);
$this->artisan('bad-ip-blocker:clear', ['--force' => true])->assertSuccessful();
expect(BadIpBlocker::all())->toBe([]);
});