import { test } from 'node:test'; import assert from 'node:assert/strict'; import { getParam, resolveServers, type RemoteConfig } from '../../YouleNexus/assets/framework/config/remote-config.ts'; import type { ChannelIdentity } from '../../YouleNexus/assets/framework/config/identity.ts'; const ID: ChannelIdentity = { agentid: 'A', channelid: 'C', gameid: 'G', marketid: 2, version: 1 }; const CONFIG: RemoteConfig = { data: { player_server_tcp: '1.1.1.1:1000', // 顶层默认 agentlist: [{ agentid: 'A', player_server_tcp: '2.2.2.2:2000', // agent 级覆盖 gamelist: [{ gameid: 'G', channellist: [{ channelid: 'C', player_server_tcp: '3.3.3.3:3000', // channel 级覆盖(最具体) visitor_server_tcp: '4.4.4.4:4000', marketlist: [{ marketid: 2 }], }], }], }], }, }; test('getParam:最具体层级胜出', () => { assert.equal(getParam(CONFIG, 'player_server_tcp', ID), '3.3.3.3:3000'); }); test('getParam:channel 未匹配时回退到 agent 级值', () => { const id2 = { ...ID, channelid: 'OTHER' }; assert.equal(getParam(CONFIG, 'player_server_tcp', id2), '2.2.2.2:2000'); }); test('getParam:agent 未匹配时回退到顶层默认', () => { const id3 = { ...ID, agentid: 'NONE' }; assert.equal(getParam(CONFIG, 'player_server_tcp', id3), '1.1.1.1:1000'); }); test('getParam:键不存在 → null', () => { assert.equal(getParam(CONFIG, 'not_a_key', ID), null); }); test('getParam:无 data → null', () => { assert.equal(getParam({}, 'player_server_tcp', ID), null); }); test('resolveServers:player 优先、visitor 回退,前缀 ws://', () => { assert.deepEqual(resolveServers(CONFIG, ID), ['ws://3.3.3.3:3000', 'ws://4.4.4.4:4000']); }); test('resolveServers:已带 ws:// 不重复前缀;无地址 → 空数组', () => { const cfg: RemoteConfig = { data: { player_server_tcp: 'ws://9.9.9.9:9' } }; assert.deepEqual(resolveServers(cfg, ID), ['ws://9.9.9.9:9']); assert.deepEqual(resolveServers({ data: {} }, ID), []); });