markTestSkipped('UNSANDBOX_PUBLIC_KEY and UNSANDBOX_SECRET_KEY required'); } $this->client = new Unsandbox(); } public function testHealthCheck(): void { $result = Unsandbox::healthCheck(); $this->assertIsBool($result); } public function testValidateKeys(): void { $info = $this->client->validateKeys(); $this->assertIsArray($info); $this->assertArrayHasKey('valid', $info); $this->assertTrue($info['valid']); } public function testGetLanguages(): void { $langs = $this->client->getLanguages(); $this->assertIsArray($langs); $this->assertNotEmpty($langs); $this->assertContains('python', $langs); } public function testExecute(): void { $result = $this->client->executeCode('python', "print('hello from PHP SDK')"); $this->assertIsArray($result); $this->assertStringContainsString('hello from PHP SDK', $result['stdout'] ?? ''); $this->assertEquals(0, $result['exit_code'] ?? -1); } public function testExecuteError(): void { $result = $this->client->executeCode('python', 'import sys; sys.exit(1)'); $this->assertIsArray($result); $this->assertEquals(1, $result['exit_code'] ?? -1); } public function testSessionList(): void { $sessions = $this->client->listSessions(); $this->assertIsArray($sessions); } public function testSessionLifecycle(): void { $session = $this->client->createSession('python'); $this->assertIsArray($session); $this->assertArrayHasKey('id', $session); $sessionId = $session['id']; $this->client->deleteSession($sessionId); } public function testServiceList(): void { $services = $this->client->listServices(); $this->assertIsArray($services); } public function testSnapshotList(): void { $snapshots = $this->client->listSnapshots(); $this->assertIsArray($snapshots); } public function testImageList(): void { $images = $this->client->listImages(); $this->assertIsArray($images); } }