}, 'lengthMin' => function ($value, $options = [], &$params = []) { $length = strlen($value); return isset($options['length']) && $length >= $options['length']; }, 'luhn' => function ($value, $options = [], &$params = []) { if (empty($value) || !is_string($value)) { return false; } $sum = 0; $length = strlen($value); for ($position = 1 - $length % 2; $position < $length; $position += 2) { $sum += $value[$position]; } for ($position = $length % 2; $position < $length; $position += 2) { $number = $value[$position] * 2; $sum += $number < 10 ? $number : $number - 9; } return $sum % 10 === 0; }, 'max' => function ($value, $options = [], &$params = []) { return isset($options['max']) && $value <= $options['max']; }, 'min' => function ($value, $options = [], &$params = []) { return isset($options['min']) && $value >= $options['min']; }, 'money' => ['right' => '/^(?!0,?\\d)(?:\\d{1,3}(?:([, .])\\d{3})?(?:\\1\\d{3})*|(?:\\d+))' . '((?!\\1)[,.]\\d{2})?(?<!\\x{00a2})\\p{Sc}?$/u', 'left' => '/^(?!\\x{00a2})\\p{Sc}?(?!0,?\\d)(?:\\d{1,3}(?:([, .])\\d{3})?' . '(?:\\1\\d{3})*|(?:\\d+))((?!\\1)[,.]\\d{2})?$/u'], 'numeric' => function ($value, $options = [], &$params = []) { return is_numeric($value); }, 'phone' => '/^\\+?[0-9\\(\\)\\-]{10,20}$/', 'regex' => '/^(?:([^[:alpha:]\\\\{<\\[\\(])(.+)(?:\\1))|(?:{(.+)})|(?:<(.+)>)|' . '(?:\\[(.+)\\])|(?:\\((.+)\\))[gimsxu]*$/', 'time' => '%^((0?[1-9]|1[012])(:[0-5]\\d){0,2}([AP]M|[ap]m))$|^([01]\\d|2[0-3])(:[0-5]\\d){0,2}$%', 'url' => function ($value, $options = [], &$params = []) { $options += ['flags' => []]; return (bool) filter_var($value, FILTER_VALIDATE_URL, $options); }, 'uuid' => "/^[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}\$/"]); } } Checker::reset();
expect(Checker::isAlphaNumeric())->toBe(false); }); }); describe("::message()", function () { it("gets a error message", function () { expect(Checker::message('required'))->toBe('is required'); }); it("sets an error message", function () { expect(Checker::message('required', 'must be defined'))->toBe('must be defined'); expect(Checker::message('required'))->toBe('must be defined'); }); }); describe("::messages()", function () { beforeEach(function () { Checker::messages(['a' => 'b'], false); }); it("gets error messages", function () { expect(Checker::messages())->toBe(['a' => 'b', '_default_' => 'is invalid']); }); it("appends error messages", function () { $expected = ['a' => 'b', '_default_' => 'is invalid', 'c' => 'd']; expect(Checker::messages(['c' => 'd']))->toBe($expected); expect(Checker::messages())->toBe($expected); }); it("sets error messages", function () { $expected = ['c' => 'd', '_default_' => 'is invalid']; expect(Checker::messages(['c' => 'd'], false))->toBe($expected); expect(Checker::messages())->toBe($expected); }); }); });
}); it("sets an error message", function () { expect($this->validator->message('required', 'must be defined'))->toBe('must be defined'); expect($this->validator->message('required'))->toBe('must be defined'); }); }); describe("->messages()", function () { it("appends error messages", function () { Checker::reset(true); $validator = new Validator(); $validator->messages(['a' => 'b']); $expected = ['a' => 'b', 'c' => 'd', '_default_' => 'is invalid']; expect($validator->messages(['c' => 'd']))->toBe($expected); expect($validator->messages())->toBe($expected); }); it("sets error messages", function () { Checker::reset(true); $validator = new Validator(); $validator->messages(['a' => 'b']); $expected = ['c' => 'd', '_default_' => 'is invalid']; expect($validator->messages(['c' => 'd'], false))->toBe($expected); expect($validator->messages())->toBe($expected); }); }); describe("::values()", function () { it("returns the wrapped data when no path is defined", function () { $data = ['title' => 'new title']; expect(Validator::values($data))->toBe([$data]); }); }); });