file = tempnam(sys_get_temp_dir(), 'cfg'); } protected function tearDown(): void { @unlink($this->file); } public function testDefaultsApplyWhenKeysAreMissing(): void { file_put_contents($this->file, 'file); self::assertSame('Europe/Berlin', $config->get('timezone')); self::assertSame('fixture', $config->get('data_source')); self::assertSame(['stations' => 300, 'measure' => 900, 'pressure' => 900, 'temperature' => 900, 'forecast' => 3600, 'radar' => 240], $config->get('cache_ttl')); self::assertSame([], $config->get('indoor_modules')); self::assertNull($config->get('netatmo_device_id')); } public function testFileValuesOverrideDefaults(): void { file_put_contents($this->file, ' "Europe/Amsterdam", "cache_ttl" => ["stations" => 60]];'); $config = Config::load($this->file); self::assertSame('Europe/Amsterdam', $config->get('timezone')); self::assertSame(['stations' => 60, 'measure' => 900, 'pressure' => 900, 'temperature' => 900, 'forecast' => 3600, 'radar' => 240], $config->get('cache_ttl')); } public function testUnknownKeyReturnsGivenDefault(): void { file_put_contents($this->file, 'file)->get('nope', 'x')); } public function testFileMustReturnArray(): void { file_put_contents($this->file, 'expectException(\RuntimeException::class); Config::load($this->file); } }