providesRequestsWithASuspiciousUserAgentHeader()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 61
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 24
c 1
b 0
f 0
dl 0
loc 61
rs 9.536
cc 1
nc 1
nop 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace DanBettles\Defence\Tests\Factory;
6
7
use Closure;
8
use DanBettles\Defence\Envelope;
9
use DanBettles\Defence\Factory\FilterFactory;
10
use DanBettles\Defence\Filter\InvalidHeaderFilter;
11
use DanBettles\Defence\Logger\NullLogger;
12
use DanBettles\Defence\Tests\AbstractTestCase;
13
use Psr\Log\LogLevel;
14
use Symfony\Component\HttpFoundation\Request;
15
16
use const false;
17
use const true;
18
19
class CreatesuspicioususeragentheaderfilterTest extends AbstractTestCase
20
{
21
    public function testFactoryMethodCreatesAnInvalidheaderfilter(): void
22
    {
23
        $filter = (new FilterFactory())->createSuspiciousUserAgentHeaderFilter();
24
25
        $this->assertInstanceOf(InvalidHeaderFilter::class, $filter);
26
        $this->assertSame('User-Agent', $filter->getSelector());
27
        $this->assertInstanceOf(Closure::class, $filter->getValidator());
28
    }
29
30
    public function testFactoryMethodAcceptsOptions(): void
31
    {
32
        $filter = (new FilterFactory())->createSuspiciousUserAgentHeaderFilter([
33
            'foo' => 'bar',
34
        ]);
35
36
        $this->assertSame([
37
            'log_level' => LogLevel::WARNING,
38
            'foo' => 'bar',
39
        ], $filter->getOptions());
40
    }
41
42
    /** @return array<mixed[]> */
43
    public function providesRequestsWithASuspiciousUserAgentHeader(): array
44
    {
45
        $requestFactory = $this->getRequestFactory();
46
47
        return [
48
            // OK
49
            [
50
                false,
51
                $requestFactory->createWithHeaders(['User-Agent' => 'Something']),
52
            ],
53
            // [NEW] OK (at least one alpha)
54
            [
55
                false,
56
                $requestFactory->createWithHeaders(['User-Agent' => 'a']),
57
            ],
58
            // [NEW] OK (at least one alpha)
59
            [
60
                false,
61
                $requestFactory->createWithHeaders(['User-Agent' => 'a1']),
62
            ],
63
64
            // Suspicious (blank)
65
            [
66
                true,
67
                $requestFactory->createWithHeaders(['User-Agent' => '']),
68
            ],
69
            // Suspicious (non-existent)
70
            [
71
                true,
72
                $requestFactory->createWithHeaders([]),
73
            ],
74
            // Suspicious (only whitespace)
75
            [
76
                true,
77
                $requestFactory->createWithHeaders(['User-Agent' => ' ']),
78
            ],
79
            // Suspicious (only whitespace)
80
            [
81
                true,
82
                $requestFactory->createWithHeaders(['User-Agent' => '   ']),
83
            ],
84
            // Suspicious (dash)
85
            [
86
                true,
87
                $requestFactory->createWithHeaders(['User-Agent' => '-']),
88
            ],
89
            // Suspicious (dash)
90
            [
91
                true,
92
                $requestFactory->createWithHeaders(['User-Agent' => ' - ']),
93
            ],
94
95
            // [NEW] Suspicious (just numbers)
96
            [
97
                true,
98
                $requestFactory->createWithHeaders(['User-Agent' => '1']),
99
            ],
100
            // [NEW] Suspicious (no alpha)
101
            [
102
                true,
103
                $requestFactory->createWithHeaders(['User-Agent' => '!@£123']),
104
            ],
105
        ];
106
    }
107
108
    /** @dataProvider providesRequestsWithASuspiciousUserAgentHeader */
109
    public function testInvokeReturnsTrueIfTheUserAgentHeaderIsSuspicious(
110
        bool $requestIsSuspicious,
111
        Request $request
112
    ): void {
113
        $envelope = new Envelope($request, new NullLogger());
114
        $filter = (new FilterFactory())->createSuspiciousUserAgentHeaderFilter();
115
116
        $this->assertSame($requestIsSuspicious, $filter($envelope));
117
    }
118
}
119