mirror of
https://github.com/Respect/Validation.git
synced 2026-03-17 07:45:45 +01:00
116 lines
4.8 KiB
PHP
116 lines
4.8 KiB
PHP
<?php
|
|
|
|
/*
|
|
* Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com>
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
test('Default: fail, fail', catchAll(
|
|
fn() => v::allOf(v::intType(), v::negative())->assert('string'),
|
|
fn(string $message, string $fullMessage, array $messages) => expect()
|
|
->and($message)->toBe('"string" must be an integer')
|
|
->and($fullMessage)->toBe(<<<'FULL_MESSAGE'
|
|
- "string" must pass all the rules
|
|
- "string" must be an integer
|
|
- "string" must be a negative number
|
|
FULL_MESSAGE)
|
|
->and($messages)->toBe([
|
|
'__root__' => '"string" must pass all the rules',
|
|
'intType' => '"string" must be an integer',
|
|
'negative' => '"string" must be a negative number',
|
|
]),
|
|
));
|
|
|
|
test('Default: fail, pass', catchAll(
|
|
fn() => v::allOf(v::intType(), v::stringType())->assert('string'),
|
|
fn(string $message, string $fullMessage, array $messages) => expect()
|
|
->and($message)->toBe('"string" must be an integer')
|
|
->and($fullMessage)->toBe('- "string" must be an integer')
|
|
->and($messages)->toBe(['intType' => '"string" must be an integer']),
|
|
));
|
|
|
|
test('Default: fail, fail, pass', catchAll(
|
|
fn() => v::allOf(v::intType(), v::positive(), v::stringType())->assert('string'),
|
|
fn(string $message, string $fullMessage, array $messages) => expect()
|
|
->and($message)->toBe('"string" must be an integer')
|
|
->and($fullMessage)->toBe(<<<'FULL_MESSAGE'
|
|
- "string" must pass the rules
|
|
- "string" must be an integer
|
|
- "string" must be a positive number
|
|
FULL_MESSAGE)
|
|
->and($messages)->toBe([
|
|
'__root__' => '"string" must pass the rules',
|
|
'intType' => '"string" must be an integer',
|
|
'positive' => '"string" must be a positive number',
|
|
]),
|
|
));
|
|
|
|
test('Inverted: pass, pass', catchAll(
|
|
fn() => v::not(v::allOf(v::intType(), v::negative()))->assert(-1),
|
|
fn(string $message, string $fullMessage, array $messages) => expect()
|
|
->and($message)->toBe('-1 must not be an integer')
|
|
->and($fullMessage)->toBe(<<<'FULL_MESSAGE'
|
|
- -1 must pass the rules
|
|
- -1 must not be an integer
|
|
- -1 must not be a negative number
|
|
FULL_MESSAGE)
|
|
->and($messages)->toBe([
|
|
'__root__' => '-1 must pass the rules',
|
|
'intType' => '-1 must not be an integer',
|
|
'negative' => '-1 must not be a negative number',
|
|
]),
|
|
));
|
|
|
|
test('Inverted: pass, fail, fail', catchAll(
|
|
fn() => v::allOf(v::intType(), v::alpha(), v::stringType())->assert(2),
|
|
fn(string $message, string $fullMessage, array $messages) => expect()
|
|
->and($message)->toBe('2 must contain only letters (a-z)')
|
|
->and($fullMessage)->toBe(<<<'FULL_MESSAGE'
|
|
- 2 must pass the rules
|
|
- 2 must contain only letters (a-z)
|
|
- 2 must be a string
|
|
FULL_MESSAGE)
|
|
->and($messages)->toBe([
|
|
'__root__' => '2 must pass the rules',
|
|
'alpha' => '2 must contain only letters (a-z)',
|
|
'stringType' => '2 must be a string',
|
|
]),
|
|
));
|
|
|
|
test('Wrapping "not"', catchAll(
|
|
fn() => v::allOf(v::not(v::intType()), v::greaterThan(2))->assert(4),
|
|
fn(string $message, string $fullMessage, array $messages) => expect()
|
|
->and($message)->toBe('4 must not be an integer')
|
|
->and($fullMessage)->toBe('- 4 must not be an integer')
|
|
->and($messages)->toBe(['notIntType' => '4 must not be an integer']),
|
|
));
|
|
|
|
test('With a single template', catchAll(
|
|
fn() => v::allOf(v::stringType(), v::arrayType())->assert(5, 'This is a single template'),
|
|
fn(string $message, string $fullMessage, array $messages) => expect()
|
|
->and($message)->toBe('This is a single template')
|
|
->and($fullMessage)->toBe('- This is a single template')
|
|
->and($messages)->toBe(['allOf' => 'This is a single template']),
|
|
));
|
|
|
|
test('With multiple templates', catchAll(
|
|
fn() => v::allOf(v::stringType(), v::uppercase())->assert(5, [
|
|
'__root__' => 'Two things are wrong',
|
|
'stringType' => 'Template for "stringType"',
|
|
'uppercase' => 'Template for "uppercase"',
|
|
]),
|
|
fn(string $message, string $fullMessage, array $messages) => expect()
|
|
->and($message)->toBe('Template for "stringType"')
|
|
->and($fullMessage)->toBe(<<<'FULL_MESSAGE'
|
|
- Two things are wrong
|
|
- Template for "stringType"
|
|
- Template for "uppercase"
|
|
FULL_MESSAGE)
|
|
->and($messages)->toBe([
|
|
'__root__' => 'Two things are wrong',
|
|
'stringType' => 'Template for "stringType"',
|
|
'uppercase' => 'Template for "uppercase"',
|
|
]),
|
|
));
|