providesRequestsContainingAnInvalidParameter()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 44
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 32
dl 0
loc 44
rs 9.408
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DanBettles\Defence\Tests\Factory;
6
7
use Psr\Log\LogLevel;
8
use DanBettles\Defence\Envelope;
9
use DanBettles\Defence\Factory\FilterFactory;
10
use DanBettles\Defence\Filter\InvalidParameterFilter;
11
use DanBettles\Defence\Logger\NullLogger;
12
use DanBettles\Defence\Tests\AbstractTestCase;
13
use Symfony\Component\HttpFoundation\Request;
14
15
use const false;
16
use const null;
17
use const true;
18
19
/**
20
 * @phpstan-import-type Selector from InvalidParameterFilter
21
 */
22
class CreateinvalidmachinedateparameterfilterTest extends AbstractTestCase
23
{
24
    /** @return array<mixed[]> */
25
    public function providesFactoryMethodArgs(): array
26
    {
27
        return [[
28
            'selector' => ['starts_on', 'ends_on'],
29
            'validator' => '/^[\d\-]*$/',
30
        ], [
31
            'selector' => '/_on$/',
32
            'validator' => '/^[\d\-]*$/',
33
        ]];
34
    }
35
36
    /**
37
     * @dataProvider providesFactoryMethodArgs
38
     * @phpstan-param Selector $selector
39
     */
40
    public function testFactoryMethodCreatesAnInvalidparameterfilter(
41
        $selector,
42
        string $validator
43
    ): void {
44
        $filter = (new FilterFactory())->createInvalidMachineDateParameterFilter($selector);
45
46
        $this->assertInstanceOf(InvalidParameterFilter::class, $filter);
47
        $this->assertSame($selector, $filter->getSelector());
48
        $this->assertSame($validator, $filter->getValidator());
49
    }
50
51
    public function testFactoryMethodAcceptsOptions(): void
52
    {
53
        $filter = (new FilterFactory())->createInvalidMachineDateParameterFilter(['ends_on'], [
54
            'baz' => 'qux',
55
        ]);
56
57
        $this->assertSame([
58
            'log_level' => LogLevel::WARNING,
59
            'type' => null,
60
            'baz' => 'qux',
61
        ], $filter->getOptions());
62
    }
63
64
    /** @return array<mixed[]> */
65
    public function providesRequestsContainingAnInvalidParameter(): array
66
    {
67
        $requestFactory = $this->getRequestFactory();
68
69
        return [[
70
            false,
71
            ['starts_on'],
72
            $requestFactory->createGet(['starts_on' => '2020-03-12']),
73
        ], [
74
            false,
75
            ['starts_on'],
76
            $requestFactory->createGet(['starts_on' => '0000-00-00']),
77
        ], [
78
            false,
79
            ['starts_on'],
80
            $requestFactory->createGet(['starts_on' => '12-03-2020']),
81
        ], [
82
            false,
83
            ['starts_on'],
84
            $requestFactory->createGet(['starts_on' => '00-00-0000']),
85
        ], [
86
            false,
87
            ['starts_on'],
88
            $requestFactory->createGet(['starts_on' => '']),
89
        ], [
90
            true,
91
            ['starts_on'],
92
            $requestFactory->createGet(['starts_on' => "71094'A=0"]),
93
        ], [
94
            true,
95
            ['starts_on'],
96
            $requestFactory->createGet(['starts_on' => "'"]),
97
        ], [
98
            true,
99
            ['starts_on'],
100
            $requestFactory->createGet(['starts_on' => ' 2020-03-12 ']),
101
        ], [
102
            true,
103
            ['starts_on'],
104
            $requestFactory->createGet(['starts_on' => ' 12-03-2020 ']),
105
        ], [
106
            true,
107
            ['starts_on'],
108
            $requestFactory->createGet(['starts_on' => ' ']),
109
        ]];
110
    }
111
112
    /**
113
     * @dataProvider providesRequestsContainingAnInvalidParameter
114
     * @phpstan-param Selector $selector
115
     */
116
    public function testInvokeReturnsTrueIfTheValueOfAParameterIsInvalid(
117
        bool $requestIsSuspicious,
118
        $selector,
119
        Request $request
120
    ): void {
121
        $filter = (new FilterFactory())->createInvalidMachineDateParameterFilter($selector);
122
        $envelope = new Envelope($request, new NullLogger());
123
124
        $this->assertSame($requestIsSuspicious, $filter($envelope));
125
    }
126
}
127