Files
order_site/apps/backend/src/services/claim/claim-service.test.ts
T

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,
)
})