Completed
Push — master ( 0b5326...c053b9 )
by Alejandro
12s queued 10s
created

InputFactoryTraitTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 4
eloc 32
dl 0
loc 61
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ShlinkioTest\Shlink\Common\Validation;
6
7
use PHPUnit\Framework\TestCase;
8
use Shlinkio\Shlink\Common\Validation\InputFactoryTrait;
9
use Zend\Filter;
10
use Zend\InputFilter\Input;
11
use Zend\Validator;
12
13
use function Functional\map;
14
use function get_class;
15
16
class InputFactoryTraitTest extends TestCase
17
{
18
    use InputFactoryTrait;
19
20
    /**
21
     * @test
22
     * @dataProvider provideRequired
23
     */
24
    public function basicInputIsCreatedWithDefaultFilters(bool $required): void
25
    {
26
        $input = $this->createInput('foo', $required);
27
        $filters = $this->getFiltersFromInput($input);
28
29
        $this->assertEquals($required, $input->isRequired());
30
        $this->assertCount(2, $filters);
31
        $this->assertContains(Filter\StripTags::class, $filters);
32
        $this->assertContains(Filter\StringTrim::class, $filters);
33
    }
34
35
    /**
36
     * @test
37
     * @dataProvider provideRequired
38
     */
39
    public function booleanInputIsCreatedAsExpected(bool $required): void
40
    {
41
        $input = $this->createBooleanInput('foo', $required);
42
        $filters = $this->getFiltersFromInput($input);
43
        $validators = $input->getValidatorChain()->getValidators();
44
45
        $this->assertEquals($required, $input->isRequired());
46
        $this->assertCount(1, $validators);
47
        $this->assertCount(3, $filters);
48
        $this->assertContains(Filter\StripTags::class, $filters);
49
        $this->assertContains(Filter\StringTrim::class, $filters);
50
        $this->assertContains(Filter\Boolean::class, $filters);
51
52
        /** @var Validator\NotEmpty $notEmptyValidator */
53
        $notEmptyValidator = $validators[0]['instance'];
54
        $calculateTypeValue = (fn (array $type) => $this->calculateTypeValue($type))->bindTo(
55
            $notEmptyValidator,
56
            Validator\NotEmpty::class,
57
        );
58
        $this->assertInstanceOf(Validator\NotEmpty::class, $notEmptyValidator);
59
        $this->assertEquals($calculateTypeValue([
60
            Validator\NotEmpty::OBJECT,
61
            Validator\NotEmpty::SPACE,
62
            Validator\NotEmpty::NULL,
63
            Validator\NotEmpty::EMPTY_ARRAY,
64
            Validator\NotEmpty::STRING,
65
        ]), $notEmptyValidator->getType());
66
    }
67
68
    public function provideRequired(): iterable
69
    {
70
        yield [true];
71
        yield [false];
72
    }
73
74
    private function getFiltersFromInput(Input $input): array
75
    {
76
        return map(
77
            $input->getFilterChain()->getFilters()->toArray(),
78
            fn (Filter\FilterInterface $filter): string => get_class($filter),
0 ignored issues
show
Bug introduced by
A parse error occurred: Syntax error, unexpected ':', expecting T_DOUBLE_ARROW on line 78 at column 47
Loading history...
79
        );
80
    }
81
}
82