Skip to content

Commit eed6eea

Browse files
authored
Chore mutation tests (#2213)
* refactor: reduce mutation tests just to core library * fix: test failing on lowest depednencies versions * feat: use phpstan with infection
1 parent 6077379 commit eed6eea

13 files changed

Lines changed: 782 additions & 203 deletions

File tree

compose.yml.dist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ services:
6161
environment:
6262
- SERVICES=s3
6363
- DEBUG=1
64-
- DATA_DIR=/tmp/localstack/data
64+
- DATA_DIR=/var/localstack/data
6565
volumes:
66-
- "./var/localstack:/tmp/localstack"
66+
- "./var/localstack:/var/localstack"
6767
otel-collector:
6868
image: otel/opentelemetry-collector-contrib:0.115.1
6969
container_name: flow-php-otel-collector

infection.json

Lines changed: 9 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -1,145 +1,22 @@
11
{
22
"source": {
33
"directories": [
4-
"src/core/etl/src",
5-
"src/lib/array-dot/src",
6-
"src/lib/doctrine-dbal-bulk/src",
7-
"src/lib/filesystem/src",
8-
"src/lib/parquet/src",
9-
"src/lib/telemetry/src",
10-
"src/bridge/monolog/telemetry/src",
11-
"src/bridge/psr7/telemetry/src",
12-
"src/bridge/psr18/telemetry/src",
13-
"src/bridge/symfony/http-foundation-telemetry/src",
14-
"src/bridge/symfony/telemetry-bundle/src",
15-
"src/bridge/telemetry/otlp/src"
4+
"src/core/etl/src"
165
],
176
"excludes": [
18-
"{.*/DSL.*}",
19-
"Flow/ETL/Attribute",
20-
"Flow/Calculator/Exception",
21-
"Flow/Serializer/Exception",
22-
"Flow/ETL/Exception",
23-
"Flow/Types/Exception",
24-
"Flow/Doctrine/Bulk/Exception",
25-
"Flow/Filesystem/Exception",
26-
"Flow/Parquet/Exception",
27-
"Flow/Parquet/ThriftModel",
28-
"Flow/ArrayDot/Exception",
29-
"Flow/Telemetry/Exception",
30-
"Flow/Telemetry/Provider/Void",
31-
"Flow/Telemetry/Provider/Console",
32-
"Flow/Bridge/Telemetry/OTLP/Exception",
33-
"Flow/Bridge/Monolog/Telemetry/Exception",
34-
"Flow/Bridge/Psr7/Telemetry/Exception",
35-
"Flow/Bridge/Psr18/Telemetry/Exception",
36-
"Flow/Bridge/Symfony/HttpFoundationTelemetry/Exception",
37-
"Flow/Bridge/Symfony/TelemetryBundle/Exception"
7+
"{.*/DSL.*}"
388
]
399
},
4010
"logs": {
4111
"text": "./var/infection/infection.log",
4212
"html": "./var/infection/infection.html",
4313
"summary": "./var/infection/infection_summary.log",
44-
"debug": "./var/infection/infection_summary.log",
4514
"stryker": {
4615
"badge": "1.x"
4716
}
4817
},
4918
"mutators": {
50-
"@default": true,
51-
"ArrayItem": {
52-
"ignore": [
53-
"*::__serialize"
54-
]
55-
},
56-
"ArrayItemRemoval": {
57-
"ignore": [
58-
"*::__serialize",
59-
"Flow\\ETL\\Adapter\\Logger\\Logger\\DumpLogger::log"
60-
]
61-
},
62-
"Throw_": {
63-
"ignore": [
64-
"Flow\\Doctrine\\Bulk\\QueryFactory\\DbalQueryFactory"
65-
]
66-
},
67-
"DecrementInteger": {
68-
"ignore": [
69-
"Flow\\ETL\\Extractor\\MemoryExtractor::extract",
70-
"Flow\\Doctrine\\Bulk\\Exception\\RuntimeException::__construct",
71-
"Flow\\Doctrine\\Bulk\\BulkData::toSqlParameters"
72-
]
73-
},
74-
"IncrementInteger": {
75-
"ignore": [
76-
"Flow\\ETL\\Extractor\\MemoryExtractor::extract",
77-
"Flow\\Doctrine\\Bulk\\BulkData::toSqlParameters"
78-
]
79-
},
80-
"Identical": {
81-
"ignore": [
82-
"Flow\\Doctrine\\Bulk\\DbalPlatform"
83-
]
84-
},
85-
"UnwrapArrayFilter": {
86-
"ignore": [
87-
"Flow\\Doctrine\\Bulk\\BulkData"
88-
]
89-
},
90-
"UnwrapRtrim": {
91-
"ignore": [
92-
"Flow\\Calculator\\Calculator::*"
93-
]
94-
},
95-
"LogicalAnd": {
96-
"ignore": [
97-
"Flow\\ArrayComparison\\ArrayComparison::equals"
98-
]
99-
},
100-
"LogicalOr": {
101-
"ignore": [
102-
"Flow\\ArrayComparison\\ArrayComparison::equals"
103-
]
104-
},
105-
"AssignCoalesce": {
106-
"ignore": [
107-
"Flow\\ETL\\Config\\ConfigBuilder::build"
108-
]
109-
},
110-
"Coalesce": {
111-
"ignore": [
112-
"Flow\\ETL\\Cache\\Implementation\\FilesystemCache::__construct",
113-
"Flow\\ETL\\Config\\Cache\\CacheConfigBuilder::build"
114-
]
115-
},
116-
"CloneRemoval": {
117-
"ignore": [
118-
"Flow\\ETL\\DataFrame::count",
119-
"Flow\\ETL\\DataFrame::fetch",
120-
"Flow\\ETL\\DataFrame::run",
121-
"Flow\\ETL\\DataFrame::get*"
122-
]
123-
},
124-
"MethodCallRemoval": {
125-
"ignore": [
126-
"Flow\\ETL\\DataFrame::autoCast",
127-
"Flow\\ETL\\DataFrame::aggregate",
128-
"Flow\\ETL\\DataFrame::match"
129-
]
130-
},
131-
"BitwiseAnd": {
132-
"ignore": [
133-
"Flow\\Parquet\\Data\\*"
134-
]
135-
},
136-
"Assignment": {
137-
"ignore": [
138-
"Flow\\Parquet\\Writer\\*::addRow",
139-
"Flow\\Parquet\\Writer\\*::addBytes",
140-
"Flow\\Parquet\\Data\\*::*"
141-
]
142-
}
19+
"@default": true
14320
},
14421
"bootstrap": "vendor/autoload.php",
14522
"phpUnit": {
@@ -148,5 +25,10 @@
14825
},
14926
"tmpDir": "var/infection/cache",
15027
"minMsi": 30,
151-
"minCoveredMsi": 70
28+
"minCoveredMsi": 70,
29+
"staticAnalysisTool" : "phpstan",
30+
"phpStan": {
31+
"configDir": "tools/infection",
32+
"customPath": "tools/phpstan/vendor/bin/phpstan"
33+
}
15234
}

phpstan.neon

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ parameters:
9797
- src/bridge/symfony/telemetry-bundle/tests/Flow/Bridge/Symfony/TelemetryBundle/Tests/Fixtures/Cache/*
9898
- src/bridge/symfony/telemetry-bundle/src/Flow/Bridge/Symfony/TelemetryBundle/Instrumentation/Doctrine/DBAL/V3/*
9999
- src/bridge/symfony/telemetry-bundle/src/Flow/Bridge/Symfony/TelemetryBundle/Instrumentation/Doctrine/DBAL/V4/*
100+
- src/bridge/symfony/telemetry-bundle/tests/Flow/Bridge/Symfony/TelemetryBundle/Tests/Unit/Instrumentation/Doctrine/DBAL/*
100101

101102
tmpDir: var/phpstan/cache
102103

phpunit.xml.dist

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@
3030
<env name="OTEL_COLLECTOR_HTTP_ENDPOINT" value="http://localhost:4318"/>
3131
<env name="OTEL_COLLECTOR_OUTPUT_DIR" value="./var/otel"/>
3232
<env name="FLOW_LOCAL_FILESYSTEM_CACHE_DIR" value="./var/cache"/>
33-
<env name="FLOW_PARQUET_TESTS_DEBUG"
34-
value="0"/> <!-- change to 1 in order to display logs in parquet integration tests -->
33+
<env name="FLOW_PARQUET_TESTS_DEBUG" value="0"/> <!-- change to 1 in order to display logs in parquet integration tests -->
3534
</php>
3635
<testsuites>
3736
<testsuite name="etl-unit">
@@ -229,15 +228,15 @@
229228
</testsuites>
230229
<source>
231230
<include>
232-
<directory suffix=".php">src/adapter/**/src</directory>
233-
<directory suffix=".php">src/bridge/**/**/src</directory>
234-
<directory suffix=".php">src/core/**/src</directory>
235-
<directory suffix=".php">src/cli/src</directory>
236-
<directory suffix=".php">src/lib/**/src</directory>
231+
<directory>src/adapter/**/src</directory>
232+
<directory>src/bridge/**/**/src</directory>
233+
<directory>src/core/**/src</directory>
234+
<directory>src/cli/src</directory>
235+
<directory>src/lib/**/src</directory>
237236
</include>
238237
<exclude>
239-
<directory suffix=".php">src/lib/parquet/src/Flow/Parquet/Thrift</directory>
240-
<directory suffix=".php">src/lib/postgresql/src/Flow/PostgreSql/Protobuf</directory>
238+
<directory>src/lib/parquet/src/Flow/Parquet/Thrift</directory>
239+
<directory>src/lib/postgresql/src/Flow/PostgreSql/Protobuf</directory>
241240
<file>src/core/etl/src/Flow/ETL/DSL/functions.php</file>
242241
<file>src/lib/postgresql/src/Flow/PostgreSql/DSL/functions.php</file>
243242
<file>src/functions.php</file>

src/bridge/symfony/telemetry-bundle/tests/Flow/Bridge/Symfony/TelemetryBundle/Tests/Fixtures/TestKernel.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,13 @@ public function addTestExtensionConfig(string $extension, array $config) : void
7070
#[\Override]
7171
public function getCacheDir() : string
7272
{
73-
return __DIR__ . '/../../../../../../../var/flow_telemetry_bundle_test/' . $this->environment . '/cache';
73+
return __DIR__ . '/../../../../../../../var/flow_telemetry_bundle_test/' . $this->environment . '/' . $this->testId . '/cache';
7474
}
7575

7676
#[\Override]
7777
public function getLogDir() : string
7878
{
79-
return __DIR__ . '/../../../../../../../var/flow_telemetry_bundle_test/' . $this->environment . '/log';
79+
return __DIR__ . '/../../../../../../../var/flow_telemetry_bundle_test/' . $this->environment . '/' . $this->testId . '/log';
8080
}
8181

8282
#[\Override]

src/bridge/symfony/telemetry-bundle/tests/Flow/Bridge/Symfony/TelemetryBundle/Tests/Unit/Instrumentation/Doctrine/DBAL/TracingConnectionTest.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Flow\Bridge\Symfony\TelemetryBundle\Tests\Unit\Instrumentation\Doctrine\DBAL;
66

77
use Doctrine\DBAL\Driver\{Connection as ConnectionInterface, Result, Statement as DriverStatement};
8-
use Doctrine\DBAL\ParameterType;
8+
use Doctrine\DBAL\{ParameterType, VersionAwarePlatformDriver};
99
use Flow\Bridge\Symfony\TelemetryBundle\Instrumentation\Doctrine\DBAL\V4\TracingConnection;
1010
use Flow\Telemetry\Context\MemoryContextStorage;
1111
use Flow\Telemetry\Logger\LoggerProvider;
@@ -21,6 +21,13 @@
2121
#[CoversClass(TracingConnection::class)]
2222
final class TracingConnectionTest extends TestCase
2323
{
24+
protected function setUp() : void
25+
{
26+
if (\interface_exists(VersionAwarePlatformDriver::class)) {
27+
self::markTestSkipped('Test requires Doctrine DBAL 4.x');
28+
}
29+
}
30+
2431
public function test_prepare_uses_truncation() : void
2532
{
2633
$spanProcessor = new MemorySpanProcessor(new MemorySpanExporter());
@@ -328,8 +335,7 @@ public function rowCount() : int
328335
};
329336
}
330337

331-
/** @phpstan-ignore missingType.parameter, missingType.parameter */
332-
public function quote($value, $type = ParameterType::STRING) : string
338+
public function quote(string $value) : string
333339
{
334340
return "'{$value}'";
335341
}

src/bridge/symfony/telemetry-bundle/tests/Flow/Bridge/Symfony/TelemetryBundle/Tests/Unit/Instrumentation/Doctrine/DBAL/TracingDriverTest.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
use Doctrine\DBAL\Driver\API\ExceptionConverter;
88
use Doctrine\DBAL\Driver\{Connection, Result, Statement};
9-
use Doctrine\DBAL\{Driver, ServerVersionProvider};
9+
use Doctrine\DBAL\{Driver, ServerVersionProvider, VersionAwarePlatformDriver};
1010
use Doctrine\DBAL\Platforms\{AbstractPlatform, DB2Platform, MariaDBPlatform, MySQL80Platform, OraclePlatform, PostgreSQLPlatform, SQLServerPlatform, SQLitePlatform};
1111
use Flow\Bridge\Symfony\TelemetryBundle\Instrumentation\Doctrine\DBAL\V4\TracingDriver;
1212
use Flow\Telemetry\Context\MemoryContextStorage;
@@ -23,6 +23,13 @@
2323
#[CoversClass(TracingDriver::class)]
2424
final class TracingDriverTest extends TestCase
2525
{
26+
protected function setUp() : void
27+
{
28+
if (\interface_exists(VersionAwarePlatformDriver::class)) {
29+
self::markTestSkipped('Test requires Doctrine DBAL 4.x');
30+
}
31+
}
32+
2633
public function test_get_semantic_db_system_defaults_to_other_sql() : void
2734
{
2835
$spanProcessor = new MemorySpanProcessor(new MemorySpanExporter());

0 commit comments

Comments
 (0)