fix(config): VersionResolver 改为 4 层逐级回退(agent/game/channel/market 每层 merge 全字段)
原实现资源字段 game_zip/game_version 只在 game/channel/market 三层覆盖、app 字段只在 market 层,漏了 agent 层。按 4 层模型:每个字段取最深命中层非空值、深层缺省逐级回退到根。 Acc 合并为单个 merge() 每层调用。新增 agent层回退/app上浮回退/四层全覆盖 3 个单测。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
763ee42345
commit
a6ef891507
@@ -143,5 +143,47 @@ export default function versionResolverTest() {
|
||||
expect(d.gameDownload).assertEqual('http://tsgames.daoqi88.cn/zip2/gamehall.zip');
|
||||
expect(d.appVersion).assertEqual(49);
|
||||
});
|
||||
|
||||
it('agent_level_resource_fallback', 0, () => {
|
||||
// 4 层回退:game_zip/game_version 仅在 agent(1) 层;game/channel/market 命中但不携带 → 回退取 agent 层
|
||||
const remote: RemoteConfig = {
|
||||
agentlist: [{
|
||||
agentid: 'A1', game_version: 200, game_zip: 'agent.zip', game_size: '9.9M',
|
||||
gamelist: [{ gameid: 'G1',
|
||||
channellist: [{ channelid: 'C1',
|
||||
marketlist: [{ marketid: 3 }] }] }],
|
||||
}],
|
||||
};
|
||||
const d: VersionDecision = VersionResolver.resolve(remote, keys);
|
||||
expect(d.gameVersion).assertEqual(200);
|
||||
expect(d.gameDownload).assertEqual('agent.zip');
|
||||
expect(d.gameSize).assertEqual('9.9M');
|
||||
});
|
||||
|
||||
it('app_fields_fall_back_above_market', 0, () => {
|
||||
// 4 层回退:app 字段在 channel(3) 层;market(4) 命中但无 app → 回退取 channel 层
|
||||
const remote: RemoteConfig = {
|
||||
agentlist: [{ agentid: 'A1',
|
||||
gamelist: [{ gameid: 'G1',
|
||||
channellist: [{ channelid: 'C1', app_version: 70, app_download: 'ch.apk',
|
||||
marketlist: [{ marketid: 3 }] }] }] }],
|
||||
};
|
||||
const d: VersionDecision = VersionResolver.resolve(remote, keys);
|
||||
expect(d.appVersion).assertEqual(70);
|
||||
expect(d.appDownload).assertEqual('ch.apk');
|
||||
});
|
||||
|
||||
it('deepest_market_overrides_agent_resource', 0, () => {
|
||||
// 4 层全部携带 game_zip:market(4) 最深,应覆盖 agent/game/channel
|
||||
const remote: RemoteConfig = {
|
||||
agentlist: [{ agentid: 'A1', game_zip: 'a.zip', game_version: 10,
|
||||
gamelist: [{ gameid: 'G1', game_zip: 'g.zip', game_version: 20,
|
||||
channellist: [{ channelid: 'C1', game_zip: 'c.zip', game_version: 30,
|
||||
marketlist: [{ marketid: 3, game_zip: 'm.zip', game_version: 40 }] }] }] }],
|
||||
};
|
||||
const d: VersionDecision = VersionResolver.resolve(remote, keys);
|
||||
expect(d.gameVersion).assertEqual(40);
|
||||
expect(d.gameDownload).assertEqual('m.zip');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user