63 lines
1.5 KiB
PHP
63 lines
1.5 KiB
PHP
<?php
|
|
|
|
use App\Rules\ValidPermissionName;
|
|
|
|
test('passes for valid names', function (string $name) {
|
|
$rule = new ValidPermissionName;
|
|
|
|
$this->assertTrue($rule->passes('name', $name));
|
|
})->with('validNames');
|
|
|
|
test('fails for invalid names', function (mixed $name) {
|
|
$rule = new ValidPermissionName;
|
|
|
|
$this->assertFalse($rule->passes('name', $name));
|
|
})->with('invalidNames');
|
|
|
|
test('validate calls fail with translated message when invalid', function () {
|
|
$rule = new ValidPermissionName;
|
|
$messages = [];
|
|
|
|
$rule->validate('name', 'has space', function ($msg) use (&$messages) {
|
|
$messages[] = $msg;
|
|
});
|
|
|
|
$this->assertNotEmpty($messages);
|
|
});
|
|
|
|
test('validate does not call fail when valid', function () {
|
|
$rule = new ValidPermissionName;
|
|
$called = false;
|
|
|
|
$rule->validate('name', 'users.manage', function () use (&$called) {
|
|
$called = true;
|
|
});
|
|
|
|
$this->assertFalse($called);
|
|
});
|
|
|
|
test('to string returns regex form', function () {
|
|
$rule = new ValidPermissionName;
|
|
|
|
$this->assertStringStartsWith('regex:', (string) $rule);
|
|
});
|
|
|
|
dataset('validNames', function () {
|
|
return [
|
|
'alphanumeric' => ['users123'],
|
|
'dot-separated' => ['users.manage'],
|
|
'underscore' => ['users_manage'],
|
|
'hyphen' => ['users-manage'],
|
|
'numeric string' => ['12345'],
|
|
];
|
|
});
|
|
|
|
dataset('invalidNames', function () {
|
|
return [
|
|
'space' => ['has space'],
|
|
'special char' => ['users@manage'],
|
|
'slash' => ['users/manage'],
|
|
'array' => [['users.manage']],
|
|
];
|
|
});
|