createStub(Database::class); $database->method('select')->willReturnMap([ ['cache', ['k'], ['`expires` >= ?', '2025-04-16 10:12:01'], [], $stmt], ]); $database->method('fetch')->willReturnOnConsecutiveCalls( ['k' => 'value1'], ['k' => 'value2'], ['k' => 'value3'], false ); $repo = new CacheRepository($database); $this->assertSame( [ 'value1', 'value2', 'value3', ], $repo->getAllKeysValidUntil('2025-04-16 10:12:01') ); } public function testGetAllKeysValidUntilThrowsException(): void { $database = $this->createStub(Database::class); $database->method('select')->willThrowException($this->createStub(Throwable::class)); $repo = new CacheRepository($database); $this->expectException(DatabaseException::class); $repo->getAllKeysValidUntil('2025-04-16 10:12:01'); } public function testGetAllKeysValidUntilWithPrefixReturnsArray(): void { $stmt = new \stdClass; $database = $this->createStub(Database::class); $database->method('select')->willReturnMap([ ['cache', ['k'], ['`expires` >= ?', '2025-04-16 10:12:01'], [], $stmt], ]); $database->method('fetch')->willReturnOnConsecutiveCalls( ['k' => 'value1'], ['k' => 'value2'], ['k' => 'value3'], false ); $repo = new CacheRepository($database); $this->assertSame( [ 'value1', 'value2', 'value3', ], $repo->getAllKeysValidUntilWithPrefix('2025-04-16 10:12:01', 'prefix') ); } public function testGetAllKeysValidUntilWithPrefixThrowsException(): void { $database = $this->createStub(Database::class); $database->method('select')->willThrowException($this->createStub(Throwable::class)); $repo = new CacheRepository($database); $this->expectException(DatabaseException::class); $repo->getAllKeysValidUntilWithPrefix('2025-04-16 10:12:01', 'prefix'); } }