From 98b1c75a4512b4efd3f2c1a592fa7af8f5f5dff4 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 17 Dec 2025 17:14:33 +0000 Subject: [PATCH] Add PHPUnit tests for data adapters - Added deterministic tests for MySQLPDOAdapter, MySQLDBALAdapter, RedisAdapter, RedisPredisAdapter, and MongoDatabaseAdapter. - Verified construction, contract implementation, and getDriver() behavior. - Implemented graceful skipping when driver dependencies are missing. - Used stubs to prevent real connection attempts. --- tests/Adapters/MongoDatabaseAdapterTest.php | 54 +++++++++++++++++++++ tests/Adapters/MySQLDBALAdapterTest.php | 54 +++++++++++++++++++++ tests/Adapters/MySQLPDOAdapterTest.php | 54 +++++++++++++++++++++ tests/Adapters/RedisAdapterTest.php | 54 +++++++++++++++++++++ tests/Adapters/RedisPredisAdapterTest.php | 54 +++++++++++++++++++++ 5 files changed, 270 insertions(+) create mode 100644 tests/Adapters/MongoDatabaseAdapterTest.php create mode 100644 tests/Adapters/MySQLDBALAdapterTest.php create mode 100644 tests/Adapters/MySQLPDOAdapterTest.php create mode 100644 tests/Adapters/RedisAdapterTest.php create mode 100644 tests/Adapters/RedisPredisAdapterTest.php diff --git a/tests/Adapters/MongoDatabaseAdapterTest.php b/tests/Adapters/MongoDatabaseAdapterTest.php new file mode 100644 index 0000000..5ac3fc1 --- /dev/null +++ b/tests/Adapters/MongoDatabaseAdapterTest.php @@ -0,0 +1,54 @@ +markTestSkipped('MongoDB\Database class is not available.'); + } + } + + public function test_it_implements_adapter_interface(): void + { + $driver = $this->createStub('MongoDB\Database'); + $adapter = new MongoDatabaseAdapter($driver); + + $this->assertInstanceOf(AdapterInterface::class, $adapter); + } + + public function test_construction_and_get_driver(): void + { + $driver = $this->createStub('MongoDB\Database'); + $adapter = new MongoDatabaseAdapter($driver); + + $this->assertSame($driver, $adapter->getDriver()); + } + + public function test_get_driver_returns_correct_type(): void + { + $driver = $this->createStub('MongoDB\Database'); + $adapter = new MongoDatabaseAdapter($driver); + + $this->assertInstanceOf('MongoDB\Database', $adapter->getDriver()); + } + + public function test_repeated_calls_return_same_instance(): void + { + $driver = $this->createStub('MongoDB\Database'); + $adapter = new MongoDatabaseAdapter($driver); + + $first = $adapter->getDriver(); + $second = $adapter->getDriver(); + + $this->assertSame($first, $second); + } +} diff --git a/tests/Adapters/MySQLDBALAdapterTest.php b/tests/Adapters/MySQLDBALAdapterTest.php new file mode 100644 index 0000000..c698f34 --- /dev/null +++ b/tests/Adapters/MySQLDBALAdapterTest.php @@ -0,0 +1,54 @@ +markTestSkipped('Doctrine DBAL Connection class is not available.'); + } + } + + public function test_it_implements_adapter_interface(): void + { + $driver = $this->createStub('Doctrine\DBAL\Connection'); + $adapter = new MySQLDBALAdapter($driver); + + $this->assertInstanceOf(AdapterInterface::class, $adapter); + } + + public function test_construction_and_get_driver(): void + { + $driver = $this->createStub('Doctrine\DBAL\Connection'); + $adapter = new MySQLDBALAdapter($driver); + + $this->assertSame($driver, $adapter->getDriver()); + } + + public function test_get_driver_returns_correct_type(): void + { + $driver = $this->createStub('Doctrine\DBAL\Connection'); + $adapter = new MySQLDBALAdapter($driver); + + $this->assertInstanceOf('Doctrine\DBAL\Connection', $adapter->getDriver()); + } + + public function test_repeated_calls_return_same_instance(): void + { + $driver = $this->createStub('Doctrine\DBAL\Connection'); + $adapter = new MySQLDBALAdapter($driver); + + $first = $adapter->getDriver(); + $second = $adapter->getDriver(); + + $this->assertSame($first, $second); + } +} diff --git a/tests/Adapters/MySQLPDOAdapterTest.php b/tests/Adapters/MySQLPDOAdapterTest.php new file mode 100644 index 0000000..cd06720 --- /dev/null +++ b/tests/Adapters/MySQLPDOAdapterTest.php @@ -0,0 +1,54 @@ +markTestSkipped('PDO class is not available.'); + } + } + + public function test_it_implements_adapter_interface(): void + { + $driver = $this->createStub(\PDO::class); + $adapter = new MySQLPDOAdapter($driver); + + $this->assertInstanceOf(AdapterInterface::class, $adapter); + } + + public function test_construction_and_get_driver(): void + { + $driver = $this->createStub(\PDO::class); + $adapter = new MySQLPDOAdapter($driver); + + $this->assertSame($driver, $adapter->getDriver()); + } + + public function test_get_driver_returns_correct_type(): void + { + $driver = $this->createStub(\PDO::class); + $adapter = new MySQLPDOAdapter($driver); + + $this->assertInstanceOf(\PDO::class, $adapter->getDriver()); + } + + public function test_repeated_calls_return_same_instance(): void + { + $driver = $this->createStub(\PDO::class); + $adapter = new MySQLPDOAdapter($driver); + + $first = $adapter->getDriver(); + $second = $adapter->getDriver(); + + $this->assertSame($first, $second); + } +} diff --git a/tests/Adapters/RedisAdapterTest.php b/tests/Adapters/RedisAdapterTest.php new file mode 100644 index 0000000..d2e0b85 --- /dev/null +++ b/tests/Adapters/RedisAdapterTest.php @@ -0,0 +1,54 @@ +markTestSkipped('Redis class is not available.'); + } + } + + public function test_it_implements_adapter_interface(): void + { + $driver = $this->createStub(\Redis::class); + $adapter = new RedisAdapter($driver); + + $this->assertInstanceOf(AdapterInterface::class, $adapter); + } + + public function test_construction_and_get_driver(): void + { + $driver = $this->createStub(\Redis::class); + $adapter = new RedisAdapter($driver); + + $this->assertSame($driver, $adapter->getDriver()); + } + + public function test_get_driver_returns_correct_type(): void + { + $driver = $this->createStub(\Redis::class); + $adapter = new RedisAdapter($driver); + + $this->assertInstanceOf(\Redis::class, $adapter->getDriver()); + } + + public function test_repeated_calls_return_same_instance(): void + { + $driver = $this->createStub(\Redis::class); + $adapter = new RedisAdapter($driver); + + $first = $adapter->getDriver(); + $second = $adapter->getDriver(); + + $this->assertSame($first, $second); + } +} diff --git a/tests/Adapters/RedisPredisAdapterTest.php b/tests/Adapters/RedisPredisAdapterTest.php new file mode 100644 index 0000000..55de73c --- /dev/null +++ b/tests/Adapters/RedisPredisAdapterTest.php @@ -0,0 +1,54 @@ +markTestSkipped('Predis\Client class is not available.'); + } + } + + public function test_it_implements_adapter_interface(): void + { + $driver = $this->createStub('Predis\Client'); + $adapter = new RedisPredisAdapter($driver); + + $this->assertInstanceOf(AdapterInterface::class, $adapter); + } + + public function test_construction_and_get_driver(): void + { + $driver = $this->createStub('Predis\Client'); + $adapter = new RedisPredisAdapter($driver); + + $this->assertSame($driver, $adapter->getDriver()); + } + + public function test_get_driver_returns_correct_type(): void + { + $driver = $this->createStub('Predis\Client'); + $adapter = new RedisPredisAdapter($driver); + + $this->assertInstanceOf('Predis\Client', $adapter->getDriver()); + } + + public function test_repeated_calls_return_same_instance(): void + { + $driver = $this->createStub('Predis\Client'); + $adapter = new RedisPredisAdapter($driver); + + $first = $adapter->getDriver(); + $second = $adapter->getDriver(); + + $this->assertSame($first, $second); + } +}