101 lines
3.1 KiB
TypeScript
101 lines
3.1 KiB
TypeScript
import assert from 'node:assert/strict'
|
|
import test from 'node:test'
|
|
|
|
import {
|
|
buildOrderClaimUrl,
|
|
pickOrderItemClaimTask,
|
|
resolveClaimTokenExpiration,
|
|
} from './claim-service.js'
|
|
|
|
test('领取链接默认可配置为长期有效', () => {
|
|
assert.equal(resolveClaimTokenExpiration('2026-08-11T08:00:00.000Z', 0), null)
|
|
})
|
|
|
|
test('领取链接保留正整数小时的限时配置能力', () => {
|
|
assert.equal(
|
|
resolveClaimTokenExpiration('2026-08-11T08:00:00.000Z', 24),
|
|
'2026-08-12T08:00:00.000Z',
|
|
)
|
|
})
|
|
|
|
test('所有来源统一生成 /h5/<订单号> 领取链接', () => {
|
|
const orderNo = '6919156612984680391'
|
|
|
|
assert.equal(
|
|
buildOrderClaimUrl(orderNo, 'https://x.ngrok-free.app/#/claim'),
|
|
`https://x.ngrok-free.app/h5/${orderNo}`,
|
|
)
|
|
assert.equal(
|
|
buildOrderClaimUrl(orderNo, 'https://x.ngrok-free.app/claim/'),
|
|
`https://x.ngrok-free.app/h5/${orderNo}`,
|
|
)
|
|
assert.equal(
|
|
buildOrderClaimUrl(orderNo, 'https://x.ngrok-free.app/custom'),
|
|
`https://x.ngrok-free.app/custom/h5/${orderNo}`,
|
|
)
|
|
assert.equal(
|
|
buildOrderClaimUrl(orderNo, 'https://x.ngrok-free.app/h5///'),
|
|
`https://x.ngrok-free.app/h5/${orderNo}`,
|
|
)
|
|
assert.equal(
|
|
buildOrderClaimUrl(orderNo, 'https://x.ngrok-free.app/h5/old-token'),
|
|
`https://x.ngrok-free.app/h5/${orderNo}`,
|
|
)
|
|
assert.equal(
|
|
buildOrderClaimUrl(orderNo, 'https://x.ngrok-free.app/claim/old-token'),
|
|
`https://x.ngrok-free.app/h5/${orderNo}`,
|
|
)
|
|
})
|
|
|
|
test('订单号或领取基址缺失/无效时返回空串', () => {
|
|
assert.equal(buildOrderClaimUrl('', 'https://x/claim'), '')
|
|
assert.equal(buildOrderClaimUrl(null, 'https://x/claim'), '')
|
|
assert.equal(buildOrderClaimUrl('6919156612984680391', ''), '')
|
|
assert.equal(buildOrderClaimUrl('6919156612984680391', 'not-a-url'), '')
|
|
})
|
|
|
|
test('pickOrderItemClaimTask 取该订单项 task id 最小且带 token 的单元', () => {
|
|
const picked = pickOrderItemClaimTask(
|
|
[
|
|
{ id: 12, order_item_id: 7, claim_token: 'token-12' },
|
|
{ id: 10, order_item_id: 7, primary_claim_token: 'token-10' },
|
|
{ id: 9, order_item_id: 7, claim_token: '' },
|
|
{ id: 11, order_item_id: 8, claim_token: 'token-11' },
|
|
],
|
|
7,
|
|
)
|
|
|
|
assert.deepEqual(picked, {
|
|
taskId: 10,
|
|
token: 'token-10',
|
|
taskCount: 3,
|
|
tokenTaskCount: 2,
|
|
})
|
|
})
|
|
|
|
test('pickOrderItemClaimTask 区分「有任务但没 token」与「压根没任务」', () => {
|
|
const withoutToken = pickOrderItemClaimTask(
|
|
[
|
|
{ id: 1, order_item_id: 7, claim_token: '' },
|
|
{ id: 2, order_item_id: 7, claim_token: '' },
|
|
],
|
|
7,
|
|
)
|
|
assert.equal(withoutToken.taskId, null)
|
|
assert.equal(withoutToken.token, '')
|
|
assert.equal(withoutToken.taskCount, 2)
|
|
assert.equal(withoutToken.tokenTaskCount, 0)
|
|
|
|
const empty = { taskId: null, token: '', taskCount: 0, tokenTaskCount: 0 }
|
|
assert.deepEqual(
|
|
pickOrderItemClaimTask([{ id: 1, order_item_id: 8, claim_token: 'x' }], 7),
|
|
empty,
|
|
)
|
|
assert.deepEqual(pickOrderItemClaimTask([], 7), empty)
|
|
assert.deepEqual(pickOrderItemClaimTask(null, 7), empty)
|
|
assert.deepEqual(
|
|
pickOrderItemClaimTask([{ id: 1, order_item_id: 7, claim_token: 'x' }], ''),
|
|
empty,
|
|
)
|
|
})
|