Skip to content

Commit 30d0144

Browse files
committed
Raise MSI to 100%
1 parent ccc880d commit 30d0144

File tree

3 files changed

+75
-27
lines changed

3 files changed

+75
-27
lines changed

infection.json.dist

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,13 @@
1111
"json": "./var/infection.json",
1212
"perMutator": "./var/infection-per-mutator.md"
1313
},
14+
"minMsi": 100,
15+
"minCoveredMsi": 100,
16+
"ignoreMsiWithNoMutations": true,
1417
"mutators": {
15-
"@default": true
18+
"@default": true,
19+
"GreaterThan": false,
20+
"GreaterThanOrEqualTo": false
1621
},
1722
"phpUnit": {
1823
"configDir": "./etc/qa/"

src/WithRandomHeadersMiddleware.php

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
use Psr\Http\Message\ServerRequestInterface;
99
use React\Promise\PromiseInterface;
1010

11-
use function array_values;
1211
use function count;
1312
use function random_int;
1413
use function React\Promise\resolve;
@@ -27,7 +26,7 @@ final class WithRandomHeadersMiddleware
2726

2827
public function __construct(Header ...$headers)
2928
{
30-
$this->headers = array_values($headers);
29+
$this->headers = $headers;
3130
}
3231

3332
public function withMinimum(int $minimum): self
@@ -57,12 +56,11 @@ public function __invoke(ServerRequestInterface $request, callable $next): Promi
5756
shuffle($headers);
5857
$i = 0;
5958
do {
60-
$header = $headers[$i];
61-
if (! ($header instanceof Header)) {
62-
continue;
63-
}
64-
65-
$response = $response->withHeader($header->header, $header->contents);
59+
/**
60+
* @psalm-suppress MixedPropertyFetch
61+
* @psalm-suppress MixedArgument
62+
*/
63+
$response = $response->withHeader($headers[$i]->header, $headers[$i]->contents);
6664
} while (++$i < $count);
6765

6866
return $response;

tests/WithRandomHeadersMiddlewareTest.php

Lines changed: 63 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,36 +8,52 @@
88
use Psr\Http\Message\ServerRequestInterface;
99
use React\Http\Message\Response;
1010
use React\Http\Message\ServerRequest;
11+
use ReflectionProperty;
1112
use WyriHaximus\AsyncTestUtilities\AsyncTestCase;
1213
use WyriHaximus\React\Http\Middleware\Header;
1314
use WyriHaximus\React\Http\Middleware\WithRandomHeadersMiddleware;
1415

16+
use function array_key_exists;
17+
use function array_map;
18+
use function array_values;
19+
use function count;
1520
use function React\Async\await;
21+
use function strlen;
22+
use function strtoupper;
1623

1724
final class WithRandomHeadersMiddlewareTest extends AsyncTestCase
1825
{
19-
public function testWithRandomHeaders(): void
26+
/** @test */
27+
public function withRandomHeaders(): void
2028
{
21-
$headers = [
22-
new Header('X-Hamsterred-By', 'ReactPHP 7'),
23-
new Header('X-Foo', 'Bar'),
24-
new Header('X-Bar', 'Foo'),
25-
];
26-
$middleware = new WithRandomHeadersMiddleware(...$headers);
29+
$headers = [];
30+
for ($char = 'a'; strlen($char) === 1; $char++) {
31+
$headers['X-' . strtoupper($char)] = new Header('X-' . strtoupper($char), $char);
32+
}
33+
34+
$middleware = (new WithRandomHeadersMiddleware(...$headers))->withMinimum(count($headers));
2735
$request = new ServerRequest('GET', 'https://example.com/');
2836
$requestWithHeaders = await($middleware($request, static fn (ServerRequestInterface $request): ResponseInterface => new Response()));
2937

30-
$count = 0;
31-
32-
foreach ($headers as $header) {
33-
if (! $requestWithHeaders->hasHeader($header->header)) {
38+
$requestHeaders = [];
39+
foreach ($requestWithHeaders->getHeaders() as $headerName => $value) {
40+
if (! array_key_exists($headerName, $headers)) {
3441
continue;
3542
}
3643

37-
$count++;
44+
$requestHeaders[] = $headerName;
3845
}
3946

40-
self::assertSame(2, $count);
47+
self::assertCount(count($headers), $requestHeaders);
48+
self::assertNotSame(
49+
[
50+
...array_map(
51+
static fn (Header $header): string => $header->header,
52+
array_values($headers),
53+
),
54+
],
55+
$requestHeaders,
56+
);
4157
}
4258

4359
/** @test */
@@ -51,14 +67,43 @@ public function immutability(): void
5167
self::assertNotSame($b, $middleware);
5268
}
5369

54-
/** @test */
55-
public function minMaxMath(): void
70+
/**
71+
* @test
72+
* @dataProvider minMaxMAthDataProvider
73+
*/
74+
public function minMaxMath(int $min, int $max, int $expectedMin, int $expectedMax): void
5675
{
57-
$a = new WithRandomHeadersMiddleware(new Header('Foo', 'bar'), new Header('Foo', 'bar'), new Header('Foo', 'bar'), new Header('Foo', 'bar'), new Header('Foo', 'bar'));
58-
$b = $a->withMinimum(5);
59-
$middleware = $b->withMaximum(1);
76+
$a = new WithRandomHeadersMiddleware(new Header('A', 'a'), new Header('Foo', 'bar'), new Header('Foo', 'bar'), new Header('Foo', 'bar'), new Header('Foo', 'bar'));
77+
$b = $a->withMinimum($min);
78+
79+
self::assertSame($expectedMin, self::getPropertyValue($b, 'minimum'));
80+
81+
$middleware = $b->withMaximum($max);
6082
self::assertNotSame($a, $b);
6183
self::assertNotSame($a, $middleware);
6284
self::assertNotSame($b, $middleware);
85+
86+
self::assertSame($expectedMin, self::getPropertyValue($middleware, 'minimum'));
87+
self::assertSame($expectedMax, self::getPropertyValue($middleware, 'maximum'));
88+
}
89+
90+
/** @return iterable<array<int>> */
91+
public static function minMaxMAthDataProvider(): iterable
92+
{
93+
yield 'Same' => [1, 1, 1, 1];
94+
yield 'Max higher than Min' => [1, 2, 1, 2];
95+
yield 'Same but with 2 instead of 1 ' => [2, 2, 2, 2];
96+
yield 'Min higher than Max so they are both pulled to Max' => [2, 1, 2, 2];
97+
yield 'Min and Max can\'t be higher than the 5 headers we put into it, but with Max lower than Min' => [13, 1, 5, 5];
98+
yield 'Min and Max can\'t be higher than the 5 headers we put into it' => [6, 13, 5, 5];
99+
}
100+
101+
private static function getPropertyValue(WithRandomHeadersMiddleware $middleware, string $propertyName): int
102+
{
103+
$property = (new ReflectionProperty(WithRandomHeadersMiddleware::class, $propertyName));
104+
$property->setAccessible(true);
105+
106+
/** @phpstan-ignore-next-line */
107+
return $property->getValue($middleware);
63108
}
64109
}

0 commit comments

Comments
 (0)