Skip to content

Commit 020e6f1

Browse files
authored
de-duplicate test bootstrap logic (#271)
1 parent 4d44219 commit 020e6f1

File tree

8 files changed

+89
-129
lines changed

8 files changed

+89
-129
lines changed

.github/workflows/phpstan.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,16 @@ jobs:
1818
include:
1919
- php-version: "8.0"
2020
db-image: 'mysql:8.0'
21+
reflector: "mysqli"
2122
- php-version: "8.1"
2223
db-image: 'mysql:8.0'
24+
reflector: "mysqli"
2325
- php-version: '8.1'
2426
db-image: 'mariadb:latest'
27+
reflector: "mysqli"
28+
29+
env:
30+
DBA_REFLECTOR: ${{ matrix.reflector }}
2531

2632
# https://docs.github.com/en/free-pro-team@latest/actions/guides/about-service-containers
2733
services:
@@ -65,6 +71,12 @@ jobs:
6571
matrix:
6672
include:
6773
- php-version: "8.1"
74+
reflector: "mysqli"
75+
mode: "replay"
76+
77+
env:
78+
DBA_REFLECTOR: ${{ matrix.reflector }}
79+
DBA_MODE: ${{ matrix.mode }}
6880

6981
steps:
7082
- uses: actions/checkout@v2

.github/workflows/tests.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,16 @@ jobs:
1818
include:
1919
- php-version: "8.0"
2020
db-image: 'mysql:8.0'
21+
reflector: "mysqli"
2122
- php-version: "8.1"
2223
db-image: 'mysql:8.0'
24+
reflector: "mysqli"
2325
- php-version: '8.1'
2426
db-image: 'mariadb:latest'
27+
reflector: "mysqli"
28+
29+
env:
30+
DBA_REFLECTOR: ${{ matrix.reflector }}
2531

2632
# https://docs.github.com/en/free-pro-team@latest/actions/guides/about-service-containers
2733
services:
@@ -67,6 +73,12 @@ jobs:
6773
matrix:
6874
include:
6975
- php-version: "8.1"
76+
reflector: "mysqli"
77+
mode: "replay"
78+
79+
env:
80+
DBA_REFLECTOR: ${{ matrix.reflector }}
81+
DBA_MODE: ${{ matrix.mode }}
7082

7183
steps:
7284
- uses: actions/checkout@v2

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"autoload-dev": {
3131
"psr-4": {
3232
"staabm\\PHPStanDba\\Tests\\Fixture\\": "tests/default/Fixture/",
33-
"staabm\\PHPStanDba\\Tests\\": "tests/default/"
33+
"staabm\\PHPStanDba\\Tests\\": "tests/"
3434
}
3535
},
3636
"scripts": {

tests/ReflectorFactory.php

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
3+
namespace staabm\PHPStanDba\Tests;
4+
5+
use mysqli;
6+
use staabm\PHPStanDba\QueryReflection\MysqliQueryReflector;
7+
use staabm\PHPStanDba\QueryReflection\QueryReflector;
8+
use staabm\PHPStanDba\QueryReflection\RecordingQueryReflector;
9+
use staabm\PHPStanDba\QueryReflection\ReflectionCache;
10+
use staabm\PHPStanDba\QueryReflection\ReplayQueryReflector;
11+
12+
final class ReflectorFactory
13+
{
14+
public static function create(string $cacheFile): QueryReflector
15+
{
16+
if (false !== getenv('GITHUB_ACTION')) {
17+
$host = '127.0.0.1';
18+
$user = 'root';
19+
$password = 'root';
20+
$dbname = 'phpstan_dba';
21+
} else {
22+
$host = 'mysql80.ab';
23+
$user = 'testuser';
24+
$password = 'test';
25+
$dbname = 'phpstan_dba';
26+
}
27+
28+
$mode = getenv('DBA_MODE') ?: 'recording';
29+
$reflector = getenv('DBA_REFLECTOR') ?: 'mysqli';
30+
if ('recording' === $mode) {
31+
if ('mysqli' === $reflector) {
32+
$mysqli = @new mysqli($host, $user, $password, $dbname);
33+
$reflector = new MysqliQueryReflector($mysqli);
34+
} else {
35+
throw new \RuntimeException('Unknown reflector: '.$reflector);
36+
}
37+
38+
$reflector = new RecordingQueryReflector(
39+
ReflectionCache::create(
40+
$cacheFile
41+
),
42+
$reflector
43+
);
44+
} elseif ('replay' === $mode) {
45+
$reflector = new ReplayQueryReflector(
46+
ReflectionCache::create(
47+
$cacheFile
48+
)
49+
);
50+
} else {
51+
throw new \RuntimeException('Unknown mode: '.$mode);
52+
}
53+
54+
return $reflector;
55+
}
56+
}

tests/default/config/bootstrap.php

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
<?php
22

3-
use staabm\PHPStanDba\QueryReflection\MysqliQueryReflector;
43
use staabm\PHPStanDba\QueryReflection\QueryReflection;
5-
use staabm\PHPStanDba\QueryReflection\RecordingQueryReflector;
6-
use staabm\PHPStanDba\QueryReflection\ReflectionCache;
7-
use staabm\PHPStanDba\QueryReflection\ReplayQueryReflector;
84
use staabm\PHPStanDba\QueryReflection\RuntimeConfiguration;
5+
use staabm\PHPStanDba\Tests\ReflectorFactory;
96

107
require_once __DIR__.'/../../../vendor/autoload.php';
118

@@ -21,34 +18,7 @@
2118
$config->errorMode(RuntimeConfiguration::ERROR_MODE_EXCEPTION);
2219
// $config->debugMode(true);
2320

24-
try {
25-
if (false !== getenv('GITHUB_ACTION')) {
26-
$mysqli = @new mysqli('127.0.0.1', 'root', 'root', 'phpstan_dba');
27-
} else {
28-
$mysqli = new mysqli('mysql80.ab', 'testuser', 'test', 'phpstan_dba');
29-
}
30-
31-
$reflector = new MysqliQueryReflector($mysqli);
32-
$reflector = new RecordingQueryReflector(
33-
ReflectionCache::create(
34-
$cacheFile
35-
),
36-
$reflector
37-
);
38-
} catch (mysqli_sql_exception $e) {
39-
if (MysqliQueryReflector::MYSQL_HOST_NOT_FOUND !== $e->getCode()) {
40-
throw $e;
41-
}
42-
43-
echo "\nWARN: Could not connect to MySQL.\nUsing cached reflection.\n";
44-
45-
// when we can't connect to the database, we rely on replaying pre-recorded db-reflection information
46-
$reflector = new ReplayQueryReflector(
47-
ReflectionCache::create(
48-
$cacheFile
49-
)
50-
);
51-
}
21+
$reflector = ReflectorFactory::create($cacheFile);
5222

5323
QueryReflection::setupReflector(
5424
$reflector,

tests/defaultFetchAssoc/config/bootstrap.php

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
<?php
22

3-
use staabm\PHPStanDba\QueryReflection\MysqliQueryReflector;
43
use staabm\PHPStanDba\QueryReflection\QueryReflection;
54
use staabm\PHPStanDba\QueryReflection\QueryReflector;
6-
use staabm\PHPStanDba\QueryReflection\RecordingQueryReflector;
7-
use staabm\PHPStanDba\QueryReflection\ReflectionCache;
8-
use staabm\PHPStanDba\QueryReflection\ReplayQueryReflector;
95
use staabm\PHPStanDba\QueryReflection\RuntimeConfiguration;
6+
use staabm\PHPStanDba\Tests\ReflectorFactory;
107

118
require_once __DIR__.'/../../../vendor/autoload.php';
129

@@ -23,34 +20,7 @@
2320
$config->defaultFetchMode(QueryReflector::FETCH_TYPE_ASSOC);
2421
// $config->debugMode(true);
2522

26-
try {
27-
if (false !== getenv('GITHUB_ACTION')) {
28-
$mysqli = @new mysqli('127.0.0.1', 'root', 'root', 'phpstan_dba');
29-
} else {
30-
$mysqli = new mysqli('mysql80.ab', 'testuser', 'test', 'phpstan_dba');
31-
}
32-
33-
$reflector = new MysqliQueryReflector($mysqli);
34-
$reflector = new RecordingQueryReflector(
35-
ReflectionCache::create(
36-
$cacheFile
37-
),
38-
$reflector
39-
);
40-
} catch (mysqli_sql_exception $e) {
41-
if (MysqliQueryReflector::MYSQL_HOST_NOT_FOUND !== $e->getCode()) {
42-
throw $e;
43-
}
44-
45-
echo "\nWARN: Could not connect to MySQL.\nUsing cached reflection.\n";
46-
47-
// when we can't connect to the database, we rely on replaying pre-recorded db-reflection information
48-
$reflector = new ReplayQueryReflector(
49-
ReflectionCache::create(
50-
$cacheFile
51-
)
52-
);
53-
}
23+
$reflector = ReflectorFactory::create($cacheFile);
5424

5525
QueryReflection::setupReflector(
5626
$reflector,

tests/defaultFetchNumeric/config/bootstrap.php

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
<?php
22

3-
use staabm\PHPStanDba\QueryReflection\MysqliQueryReflector;
43
use staabm\PHPStanDba\QueryReflection\QueryReflection;
54
use staabm\PHPStanDba\QueryReflection\QueryReflector;
6-
use staabm\PHPStanDba\QueryReflection\RecordingQueryReflector;
7-
use staabm\PHPStanDba\QueryReflection\ReflectionCache;
8-
use staabm\PHPStanDba\QueryReflection\ReplayQueryReflector;
95
use staabm\PHPStanDba\QueryReflection\RuntimeConfiguration;
6+
use staabm\PHPStanDba\Tests\ReflectorFactory;
107

118
require_once __DIR__.'/../../../vendor/autoload.php';
129

@@ -23,34 +20,7 @@
2320
$config->defaultFetchMode(QueryReflector::FETCH_TYPE_NUMERIC);
2421
// $config->debugMode(true);
2522

26-
try {
27-
if (false !== getenv('GITHUB_ACTION')) {
28-
$mysqli = @new mysqli('127.0.0.1', 'root', 'root', 'phpstan_dba');
29-
} else {
30-
$mysqli = new mysqli('mysql80.ab', 'testuser', 'test', 'phpstan_dba');
31-
}
32-
33-
$reflector = new MysqliQueryReflector($mysqli);
34-
$reflector = new RecordingQueryReflector(
35-
ReflectionCache::create(
36-
$cacheFile
37-
),
38-
$reflector
39-
);
40-
} catch (mysqli_sql_exception $e) {
41-
if (MysqliQueryReflector::MYSQL_HOST_NOT_FOUND !== $e->getCode()) {
42-
throw $e;
43-
}
44-
45-
echo "\nWARN: Could not connect to MySQL.\nUsing cached reflection.\n";
46-
47-
// when we can't connect to the database, we rely on replaying pre-recorded db-reflection information
48-
$reflector = new ReplayQueryReflector(
49-
ReflectionCache::create(
50-
$cacheFile
51-
)
52-
);
53-
}
23+
$reflector = ReflectorFactory::create($cacheFile);
5424

5525
QueryReflection::setupReflector(
5626
$reflector,

tests/stringify/config/bootstrap.php

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
<?php
22

3-
use staabm\PHPStanDba\QueryReflection\MysqliQueryReflector;
43
use staabm\PHPStanDba\QueryReflection\QueryReflection;
5-
use staabm\PHPStanDba\QueryReflection\RecordingQueryReflector;
6-
use staabm\PHPStanDba\QueryReflection\ReflectionCache;
7-
use staabm\PHPStanDba\QueryReflection\ReplayQueryReflector;
84
use staabm\PHPStanDba\QueryReflection\RuntimeConfiguration;
5+
use staabm\PHPStanDba\Tests\ReflectorFactory;
96

107
require_once __DIR__.'/../../../vendor/autoload.php';
118

@@ -21,34 +18,7 @@
2118
$config->errorMode(RuntimeConfiguration::ERROR_MODE_EXCEPTION);
2219
$config->stringifyTypes(true);
2320

24-
try {
25-
if (false !== getenv('GITHUB_ACTION')) {
26-
$mysqli = @new mysqli('127.0.0.1', 'root', 'root', 'phpstan_dba');
27-
} else {
28-
$mysqli = new mysqli('mysql80.ab', 'testuser', 'test', 'phpstan_dba');
29-
}
30-
31-
$reflector = new MysqliQueryReflector($mysqli);
32-
$reflector = new RecordingQueryReflector(
33-
ReflectionCache::create(
34-
$cacheFile
35-
),
36-
$reflector
37-
);
38-
} catch (mysqli_sql_exception $e) {
39-
if (MysqliQueryReflector::MYSQL_HOST_NOT_FOUND !== $e->getCode()) {
40-
throw $e;
41-
}
42-
43-
echo "\nWARN: Could not connect to MySQL.\nUsing cached reflection.\n";
44-
45-
// when we can't connect to the database, we rely on replaying pre-recorded db-reflection information
46-
$reflector = new ReplayQueryReflector(
47-
ReflectionCache::create(
48-
$cacheFile
49-
)
50-
);
51-
}
21+
$reflector = ReflectorFactory::create($cacheFile);
5222

5323
QueryReflection::setupReflector(
5424
$reflector,

0 commit comments

Comments
 (0)