Skip to content

Commit 2db7ab0

Browse files
committed
testDialectAndServerVersionShareSingleSelectVersionQuery を 2 順序網羅に拡張
レビュー指摘 (nits): 既存テストのコメントが「regardless of order」と謳いながら serverVersion → dialect の 1 順序しか検証していなかった。将来 dialect() が serverVersion() 経由をやめた場合に dialect 先行順序の不変条件が抜ける リファクタ耐性問題を解消する。 DataProvider で 2 順序 (serverVersion 先行 / dialect 先行) を網羅し、 どちらの順序でも SELECT VERSION() が 1 回のみ実行されることを保証。
1 parent 9ec5142 commit 2db7ab0

1 file changed

Lines changed: 24 additions & 5 deletions

File tree

tests/Unit/Database/ConnectionTest.php

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use PDO;
99
use Pdo\Sqlite;
1010
use PDOStatement;
11+
use PHPUnit\Framework\Attributes\DataProvider;
1112
use PHPUnit\Framework\TestCase;
1213
use RuntimeException;
1314
use Sloop\Database\Connection;
@@ -527,7 +528,22 @@ public function testServerVersionCachesResultAcrossCalls(): void
527528
$this->assertSame($first, $second);
528529
}
529530

530-
public function testDialectAndServerVersionShareSingleSelectVersionQuery(): void
531+
/**
532+
* @return array<string, array{0: list<string>}>
533+
*/
534+
public static function interleavedDialectAndServerVersionCallProvider(): array
535+
{
536+
return [
537+
'serverVersion first' => [['serverVersion', 'dialect', 'serverVersion', 'dialect']],
538+
'dialect first' => [['dialect', 'serverVersion', 'dialect', 'serverVersion']],
539+
];
540+
}
541+
542+
/**
543+
* @param list<string> $callOrder
544+
*/
545+
#[DataProvider('interleavedDialectAndServerVersionCallProvider')]
546+
public function testDialectAndServerVersionShareSingleSelectVersionQuery(array $callOrder): void
531547
{
532548
// Both getters are independently lazy via ??= but must share a single
533549
// `SELECT VERSION()` execution regardless of which is called first or
@@ -543,10 +559,13 @@ public function testDialectAndServerVersionShareSingleSelectVersionQuery(): void
543559

544560
$connection = new Connection($pdo, 'test');
545561

546-
$connection->serverVersion();
547-
$connection->dialect();
548-
$connection->serverVersion();
549-
$connection->dialect();
562+
foreach ($callOrder as $method) {
563+
if ($method === 'dialect') {
564+
$connection->dialect();
565+
} else {
566+
$connection->serverVersion();
567+
}
568+
}
550569

551570
$this->assertSame(Dialect::MariaDB, $connection->dialect());
552571
$this->assertSame('10.11.11-MariaDB', $connection->serverVersion());

0 commit comments

Comments
 (0)