lewan 发货强制 expectedUid 并取消无 UID 旧路径回落;任务详情展示 UID 匹配态;领取页匹配后可一键兑换;补充 identity 单测并收口短链说明。
101 lines
3.1 KiB
TypeScript
101 lines
3.1 KiB
TypeScript
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)
|
|
})
|