Files
order_site/apps/backend/src/services/session/session-redeem.test.ts
T
2026-05-21 17:39:34 +08:00

90 lines
2.4 KiB
TypeScript

import test from 'node:test'
import assert from 'node:assert/strict'
import {
classifyTencentRedeemResult,
isCaptchaRejectedResult,
resolveTencentRedeemMessage,
} from './session-redeem.js'
test('resolveTencentRedeemMessage prefers popup detail over generic title', () => {
assert.equal(
resolveTencentRedeemMessage({
popup: {
text: '兑换结果',
detail: '兑换码错误,请确认兑换码信息是否准确。',
},
}),
'兑换码错误,请确认兑换码信息是否准确。',
)
})
test('classifyTencentRedeemResult marks used codes as replacement retries', () => {
const result = classifyTencentRedeemResult({
popup: {
text: '兑换结果',
detail: '兑换码已使用。',
},
})
assert.equal(result.outcome, 'code_used')
assert.equal(result.success, false)
assert.equal(result.retryWithReplacementCode, true)
})
test('classifyTencentRedeemResult marks invalid codes as replacement retries', () => {
const result = classifyTencentRedeemResult({
popup: {
text: '兑换结果',
detail: '兑换码错误,请确认兑换码信息是否准确。',
},
})
assert.equal(result.outcome, 'code_invalid')
assert.equal(result.success, false)
assert.equal(result.retryWithReplacementCode, true)
})
test('classifyTencentRedeemResult treats missing CDKEY responses as invalid replacement retries', () => {
const result = classifyTencentRedeemResult({
iRet: -183,
sMsg: '该CDKEY不存在,请您确认后输入!',
})
assert.equal(result.outcome, 'code_invalid')
assert.equal(result.success, false)
assert.equal(result.retryWithReplacementCode, true)
})
test('classifyTencentRedeemResult recognizes successful gift popup', () => {
const result = classifyTencentRedeemResult({
popup: {
text: '恭喜您获得了礼包:动作-干员庆生,请注意:游戏虚拟道具奖品将会在24小时内到账,请登录游戏查看邮件。',
detail: '',
},
})
assert.equal(result.outcome, 'success')
assert.equal(result.success, true)
})
test('isCaptchaRejectedResult only treats captcha problems as same-code retries', () => {
assert.equal(
isCaptchaRejectedResult({
iRet: -100,
sMsg: '验证码错误',
}),
true,
)
assert.equal(
isCaptchaRejectedResult({
popup: {
text: '兑换结果',
detail: '兑换码已使用。',
},
}),
false,
)
})