Files
order_site/apps/frontend/tests/claim-path.test.ts
T
yml2213 9ce29964c7 style(frontend): 格式化前端代码并修复 eslint 异步操作未标记告警
- 统一 prettier 代码风格;
- 为 AdminTaskDetailPage 与 AdminTasksPage 中未捕获的 Promise 添加 void 标记;
- 验证方式:npm --prefix apps/frontend run check 全流程通过。
2026-10-11 15:20:54 +08:00

62 lines
2.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import assert from 'node:assert/strict'
import test from 'node:test'
import {
isClaimPath,
isH5ClaimPath,
resolveClaimToken,
resolveH5ClaimOrderNo,
} from '../src/utils/claim-path.ts'
test('isClaimPath:只认路径式 /claim/<token>,容忍结尾斜杠', () => {
assert.equal(isClaimPath('/claim/abc123'), true)
assert.equal(isClaimPath('/claim/abc123/'), true)
assert.equal(isClaimPath('/claim/abc123//'), true)
})
test('isClaimPath:/claim、/claim/、多段路径、其它路径都不算', () => {
assert.equal(isClaimPath('/claim'), false)
assert.equal(isClaimPath('/claim/'), false)
assert.equal(isClaimPath('/claim/a/b'), false)
assert.equal(isClaimPath('/redeem'), false)
assert.equal(isClaimPath('/admin/claim/abc'), false)
assert.equal(isClaimPath('/'), false)
assert.equal(isClaimPath(''), false)
assert.equal(isClaimPath(null), false)
assert.equal(isClaimPath(undefined), false)
})
test('isClaimPath:打手页是 hash 路由,pathname 为 / 或 hash 串时不命中', () => {
// 打手链接形如 https://<域名>/#/claim/<token>:pathname 是 '/',hash 才是路由
assert.equal(isClaimPath('/'), false)
assert.equal(isClaimPath('#/claim/abc123'), false)
// 路径本身带 token 时,多出来的 hash 片段会被忽略
assert.equal(isClaimPath('/claim/abc123#/claim/other'), true)
})
test('resolveClaimToken:取出并解码 token 片段', () => {
assert.equal(resolveClaimToken('/claim/abc123'), 'abc123')
assert.equal(resolveClaimToken('/claim/abc123/?x=1'), 'abc123')
assert.equal(resolveClaimToken('/claim/a%2Fb'), 'a/b')
assert.equal(resolveClaimToken('/claim/%E4%B8%AD%E6%96%87'), '中文')
// 非法百分号编码退回原始片段,交给后端判定
assert.equal(resolveClaimToken('/claim/100%'), '100%')
assert.equal(resolveClaimToken('/redeem'), '')
})
test('isH5ClaimPath:只认路径式 /h5/<orderNo>,容忍结尾斜杠', () => {
assert.equal(isH5ClaimPath('/h5/2623001922675146'), true)
assert.equal(isH5ClaimPath('/h5/2623001922675146/'), true)
assert.equal(isH5ClaimPath('/h5'), false)
assert.equal(isH5ClaimPath('/h5/'), false)
assert.equal(isH5ClaimPath('/h5/a/b'), false)
assert.equal(isH5ClaimPath('/claim/123'), false)
})
test('resolveH5ClaimOrderNo:正确解析并解码订单号', () => {
assert.equal(resolveH5ClaimOrderNo('/h5/2623001922675146'), '2623001922675146')
assert.equal(resolveH5ClaimOrderNo('/h5/2623001922675146?from=sms'), '2623001922675146')
assert.equal(resolveH5ClaimOrderNo('/h5/ORDER-001/'), 'ORDER-001')
assert.equal(resolveH5ClaimOrderNo('/claim/123'), '')
})