import { readFileSync } from 'node:fs'; import { test } from 'node:test'; import assert from 'node:assert/strict'; import { parseUrlServers } from '../../YouleNexus/assets/framework/config/remote-config.ts'; const single = JSON.parse(readFileSync( new URL('../fixtures/contracts/remote-config-single.json', import.meta.url), 'utf8', )) as unknown; const array = JSON.parse(readFileSync( new URL('../fixtures/contracts/remote-config-array.json', import.meta.url), 'utf8', )) as unknown; test('parseUrlServers:读取 data.urlserver 字符串并补 ws://', () => { assert.deepEqual(parseUrlServers(single), ['ws://10.0.0.1:3088']); }); test('parseUrlServers:读取 data.urlserver 数组并保留已有 wss://', () => { assert.deepEqual(parseUrlServers(array), ['ws://10.0.0.1:3088', 'wss://backup.example/ws']); }); test('parseUrlServers:拒绝旧的 *_server_tcp 字段', () => { assert.throws( () => parseUrlServers({ data: { player_server_tcp: 'wrong:1' } }), /data\.urlserver/, ); }); test('parseUrlServers:保留原顺序和重复项,并冻结结果', () => { const servers = parseUrlServers({ data: { urlserver: ['same:1', 'same:1', 'ws://last:2'] } }); assert.deepEqual(servers, ['ws://same:1', 'ws://same:1', 'ws://last:2']); assert.equal(Object.isFrozen(servers), true); }); test('parseUrlServers:拒绝空字符串、空数组和非字符串数组项', () => { assert.throws(() => parseUrlServers({ data: { urlserver: '' } }), /data\.urlserver/); assert.throws(() => parseUrlServers({ data: { urlserver: [] } }), /data\.urlserver/); assert.throws(() => parseUrlServers({ data: { urlserver: ['ok:1', ''] } }), /data\.urlserver/); assert.throws(() => parseUrlServers({ data: { urlserver: ['ok:1', 2] } }), /data\.urlserver/); });