Task: #53687 Support instance-specific cfg write targets and add coverage V2 #4

Merged
norb merged 11 commits from 53687/task-support-instance-specific-cfg-write-target-v2 into master 2026-03-30 15:09:21 +00:00
5 changed files with 45 additions and 3 deletions
Showing only changes of commit adf5a98768 - Show all commits

Task: #53687 Handle missing mode fallback and add no-mode cfg tests

Alejandro Sosa 2026-03-26 09:31:07 +01:00

View file

@ -334,7 +334,7 @@ try {
elseif (is_readable($cfgFile = $cfg->buildFileName())) { elseif (is_readable($cfgFile = $cfg->buildFileName())) {
$cfg->load(require($cfgFile)); $cfg->load(require($cfgFile));
} }
} catch (Exception $e) { } catch (\Throwable $e) {
fwrite(STDERR, "Error: ".$e->getMessage().PHP_EOL); fwrite(STDERR, "Error: ".$e->getMessage().PHP_EOL);
exit(1); exit(1);
} }

View file

@ -159,7 +159,18 @@ class Settings implements \Iterator, \Countable
// if a mode was set in the constructor do not overwrite it // if a mode was set in the constructor do not overwrite it
if (! isset($this->mode)) { if (! isset($this->mode)) {
// if a localConf Mode is set use it, or take the default conf mode // if a localConf Mode is set use it, or take the default conf mode
$this->mode = (isset($localConf['mode'])) ? $localConf['mode'] : $this->settings['mode']; // if local/default config has no mode, fall back to the first known mode (normally "prod")
if (isset($localConf['mode']) && is_string($localConf['mode']) && $localConf['mode'] !== '') {
$this->mode = $localConf['mode'];
}
elseif (isset($this->settings['mode']) && is_string($this->settings['mode']) && $this->settings['mode'] !== '') {
$this->mode = $this->settings['mode'];
}
else {
// Backward-compatible fallback for configs without explicit mode.
$this->mode = (string)array_key_first($this->modes);
$this->settings['mode'] = $this->mode;
}
} else { } else {
$this->settings['mode'] = $this->mode; $this->settings['mode'] = $this->mode;
} }
@ -358,4 +369,4 @@ class Settings implements \Iterator, \Countable
/* jEdit buffer local properties {{{ /* jEdit buffer local properties {{{
* :folding=explicit:collapseFolds=1: * :folding=explicit:collapseFolds=1:
}}}*/ }}}*/

View file

@ -44,6 +44,25 @@ class CfgTest extends TestCase
$this->assertSame('218523', $cfg['auth']['projectId']); $this->assertSame('218523', $cfg['auth']['projectId']);
} }
public function testWriteWithoutModeFallsBackToDefaultMode(): void
{
file_put_contents(
$this->tmpDir.'/config/myCEESV.default.conf.php',
"<?php return [\n\t'auth' => [\n\t\t'projectId' => '',\n\t],\n];\n"
);
$result = $this->runCfg([
'-a',
$this->tmpDir,
'write',
'myCEESV',
'auth:projectId="218523"',
]);
$this->assertSame(0, $result['code'], $result['output']);
$this->assertFileExists($this->tmpDir.'/config/myCEESV.conf.php');
}
public function testWriteWithDirectoryNameCreatesAndWritesSiteConfig(): void public function testWriteWithDirectoryNameCreatesAndWritesSiteConfig(): void
{ {
$result = $this->runCfg([ $result = $this->runCfg([

View file

@ -192,6 +192,15 @@ class SettingsTest extends TestCase
$cfg = $this->appPath($cfg, 'localOverride')->load(); $cfg = $this->appPath($cfg, 'localOverride')->load();
$this->assertEquals(42, $cfg->answer); $this->assertEquals(42, $cfg->answer);
} }
public function testLoadWithoutModeFallsBackToFirstKnownMode(): void
{
$cfg = new Settings();
$cfg = $this->appPath($cfg, 'noMode')->load();
$this->assertEquals('prod', $cfg->mode);
$this->assertEquals('default', $cfg->testFiles);
}
/** /**
* @dataProvider fileNameData * @dataProvider fileNameData

View file

@ -0,0 +1,3 @@
<?php return [
'testFiles' => 'default',
];