assertSame('stable', UpdateChannels::main()); $this->assertSame('stable', UpdateChannels::bin()); $this->assertSame('stable', UpdateChannels::fanout()); } public function testEachChannelReadsItsOwnSetting(): void { SettingsManager::set([ 'update_channel_main' => 'beta', 'update_channel_bin' => 'stable', 'update_channel_fanout' => 'beta', ]); $this->assertSame('beta', UpdateChannels::main()); $this->assertSame('stable', UpdateChannels::bin()); $this->assertSame('beta', UpdateChannels::fanout()); } public function testUnstableIsALegacyAliasForBeta(): void { SettingsManager::set(['update_channel_main' => 'unstable']); $this->assertSame('beta', UpdateChannels::main()); } public function testUnknownOrEmptyValueFallsBackToStable(): void { SettingsManager::set(['update_channel_bin' => 'nightly']); $this->assertSame('stable', UpdateChannels::bin()); SettingsManager::set(['update_channel_bin' => '']); $this->assertSame('stable', UpdateChannels::bin()); } public function testForRepoDispatchesToTheOwningChannel(): void { SettingsManager::set([ 'update_channel_main' => 'stable', 'update_channel_bin' => 'beta', 'update_channel_fanout' => 'beta', ]); $this->assertSame('beta', UpdateChannels::forRepo(GIT_REPO_BIN), 'BIN repo → bin channel'); $this->assertSame('beta', UpdateChannels::forRepo(GIT_REPO_FANOUT), 'FANOUT repo → fanout channel'); $this->assertSame('stable', UpdateChannels::forRepo(GIT_REPO_MAIN), 'MAIN repo → main channel'); } public function testForRepoFollowsMainForUnknownRepos(): void { SettingsManager::set([ 'update_channel_main' => 'beta', 'update_channel_bin' => 'stable', ]); // UPDATE (GeoLite/ASN) and PROXY have no channel of their own → follow MAIN. $this->assertSame('beta', UpdateChannels::forRepo('XC_VM_Data')); $this->assertSame('beta', UpdateChannels::forRepo('some-unknown-repo')); } }