58 lines
2.1 KiB
TypeScript
58 lines
2.1 KiB
TypeScript
import { test } from 'node:test';
|
||
import assert from 'node:assert/strict';
|
||
import { resolveIdentity } from '../../YouleNexus/assets/framework/config/identity.ts';
|
||
import { BUILD_IDENTITY } from '../../YouleNexus/assets/framework/config/sources/defaults.ts';
|
||
|
||
test('BUILD_IDENTITY 含全部字段且 gameid 为固定 token', () => {
|
||
assert.ok(BUILD_IDENTITY.gameid.length > 0);
|
||
assert.ok('agentid' in BUILD_IDENTITY);
|
||
assert.ok('channelid' in BUILD_IDENTITY);
|
||
assert.ok('marketid' in BUILD_IDENTITY);
|
||
assert.equal(typeof BUILD_IDENTITY.version, 'number'); // 协议 version = 数字 versionCode
|
||
});
|
||
|
||
test('resolveIdentity:后面的 source 覆盖前面的', () => {
|
||
const id = resolveIdentity([
|
||
() => BUILD_IDENTITY,
|
||
() => ({ agentid: 'A2' }),
|
||
() => ({ agentid: 'A3', channelid: 'C3' }),
|
||
]);
|
||
assert.equal(id.agentid, 'A3');
|
||
assert.equal(id.channelid, 'C3');
|
||
assert.equal(id.gameid, BUILD_IDENTITY.gameid); // 未被覆盖
|
||
});
|
||
|
||
test('resolveIdentity:undefined / null / 空串 不覆盖', () => {
|
||
const id = resolveIdentity([
|
||
() => BUILD_IDENTITY,
|
||
() => ({ agentid: undefined as any, channelid: '' , marketid: null as any }),
|
||
]);
|
||
assert.equal(id.agentid, BUILD_IDENTITY.agentid);
|
||
assert.equal(id.channelid, BUILD_IDENTITY.channelid);
|
||
assert.equal(id.marketid, BUILD_IDENTITY.marketid);
|
||
});
|
||
|
||
test('resolveIdentity:marketid=0 是有效值,应覆盖', () => {
|
||
const id = resolveIdentity([() => BUILD_IDENTITY, () => ({ marketid: 0 })]);
|
||
assert.equal(id.marketid, 0);
|
||
});
|
||
|
||
test('resolveIdentity:不完整身份显式拒绝,完整结果被冻结', () => {
|
||
assert.throws(
|
||
() => resolveIdentity([() => ({ gameid: 'G', version: 1 })]),
|
||
/identity.*agentid.*channelid.*marketid/i,
|
||
);
|
||
assert.equal(Object.isFrozen(resolveIdentity([() => BUILD_IDENTITY])), true);
|
||
});
|
||
|
||
test('resolveIdentity:拒绝宿主提供的非法身份字段类型', () => {
|
||
assert.throws(
|
||
() => resolveIdentity([() => ({ ...BUILD_IDENTITY, agentid: true as any })]),
|
||
/identity.*agentid.*type/i,
|
||
);
|
||
assert.throws(
|
||
() => resolveIdentity([() => ({ ...BUILD_IDENTITY, version: Number.NaN })]),
|
||
/identity.*version.*type/i,
|
||
);
|
||
});
|