import assert from 'node:assert/strict' import test from 'node:test' import { appendUidToUrl, assertLewanAutoFulfillmentUidReady, assertValidClaimUid, buildClaimIdentityAdminSummary, isClaimUidMatched, normalizeClaimUid, } from './claim-identity.js' test('normalizeClaimUid trims and removes spaces', () => { assert.equal(normalizeClaimUid(' 166 909 256 '), '166909256') }) test('assertValidClaimUid accepts common game uid', () => { assert.equal(assertValidClaimUid('166909256'), '166909256') }) test('assertValidClaimUid rejects empty value', () => { assert.throws(() => assertValidClaimUid(''), /请输入游戏 UID/) }) test('isClaimUidMatched compares normalized values', () => { assert.equal(isClaimUidMatched('166909256', '166909256'), true) assert.equal(isClaimUidMatched('166909256', '999'), false) }) test('appendUidToUrl sets uid query param', () => { const source = 'http://skin-exchange.yiquyou.icu/h5/bind?code=eyJpdi&product_name=%E5%A5%97%E8%A3%85' const next = appendUidToUrl(source, '166909256') const url = new URL(next) assert.equal(url.searchParams.get('uid'), '166909256') assert.equal(url.searchParams.get('code'), 'eyJpdi') }) test('appendUidToUrl overwrites existing uid', () => { const next = appendUidToUrl('https://example.com/h5/bind?code=abc&uid=old', 'new-uid') assert.equal(new URL(next).searchParams.get('uid'), 'new-uid') }) test('assertLewanAutoFulfillmentUidReady rejects legacy task without uid', () => { assert.throws( () => assertLewanAutoFulfillmentUidReady({ context_json: JSON.stringify({ kuaishouCloudFulfillment: {} }), }), /尚未填写游戏 UID/, ) }) test('assertLewanAutoFulfillmentUidReady allows mock without uid', () => { assert.equal( assertLewanAutoFulfillmentUidReady({ context_json: JSON.stringify({ kuaishouCloudFulfillment: { mock: { enabled: true } }, }), }), '', ) }) test('assertLewanAutoFulfillmentUidReady accepts submitted uid', () => { assert.equal( assertLewanAutoFulfillmentUidReady({ context_json: JSON.stringify({ claimIdentity: { expectedUid: '10001', submittedAt: '2026-07-10T00:00:00.000Z' }, kuaishouCloudFulfillment: {}, }), }), '10001', ) }) test('buildClaimIdentityAdminSummary reports match state', () => { const summary = buildClaimIdentityAdminSummary( { claimIdentity: { expectedUid: '10001', submittedAt: 't', source: 'claim_page' }, }, { flowLike: { binding: { roleId: '10001', roleName: '测试角色' }, role: { rid: '10001', name: '测试角色' }, }, }, ) assert.equal(summary.ready, true) assert.equal(summary.uidMatched, true) assert.equal(summary.compatibilityMode, 'uid') assert.equal(summary.boundUid, '10001') }) test('buildClaimIdentityAdminSummary marks legacy without uid', () => { const summary = buildClaimIdentityAdminSummary({}, { flowLike: { binding: {} } }) assert.equal(summary.ready, false) assert.equal(summary.compatibilityMode, 'legacy_no_uid') assert.equal(summary.uidMatched, null) })