Files
hera-web/scripts/tiangongApi.test.cjs
T

55 lines
3.3 KiB
JavaScript
Raw Normal View History

const test = require('node:test')
const assert = require('node:assert/strict')
const fs = require('node:fs')
const path = require('node:path')
const vm = require('node:vm')
const ts = require('typescript')
function harness(respond = async () => ({ id: 1 })) {
const calls = [], exports = {}
const source = fs.readFileSync(path.join(__dirname, '../src/services/tiangongApi.ts'), 'utf8')
vm.runInNewContext(ts.transpileModule(source, { compilerOptions: { module: ts.ModuleKind.CommonJS } }).outputText, {
exports, require: () => ({ request: (...args) => { calls.push(JSON.parse(JSON.stringify(args))); return respond(...args) } })
})
return { api: exports.tiangongApi, calls }
}
test('上香、祈愿、回向按新编码提交,各类型不混传明细或接收账号', async () => {
const { api, calls } = harness()
await api.offer(726, 1)
await api.offer(726, 2, '愿顺遂')
await api.dedicate(726, '家人', '平安')
await api.dedicate(726, '众生', '')
assert.deepEqual(calls, [
['/api/user/virtual-items/offerings', { method: 'POST', data: { userVirtualItemId: 726, offeringType: 1, incenseCount: 3 } }],
['/api/user/virtual-items/offerings', { method: 'POST', data: { userVirtualItemId: 726, offeringType: 2, prayerContent: '愿顺遂' } }],
['/api/user/virtual-items/dedications', { method: 'POST', data: { userVirtualItemId: 726, dedicationTarget: '家人', dedicationContent: '平安' } }],
['/api/user/virtual-items/dedications', { method: 'POST', data: { userVirtualItemId: 726, dedicationTarget: '众生' } }]
])
})
test('请神送神调用独立生命周期接口', async () => {
const { api, calls } = harness()
await api.lifecycle(726, 1); await api.lifecycle(726, 2)
assert.deepEqual(calls.map(call => call[1].data), [{ userVirtualItemId: 726, actionType: 1 }, { userVirtualItemId: 726, actionType: 2 }])
assert.ok(calls.every(call => call[0] === '/api/user/virtual-items/lifecycle'))
})
test('列表通过持有ID和字典ID共同关联状态,不把未绑定或其他资产当作已送神', async () => {
const { api } = harness(async url => url.startsWith('/api/tiangong') ? [
{ id: 81, holdingId: 726, active: false, incenseCount: 7 }, { id: 82, holdingId: 727, active: false }, { id: 83, active: false }
] : [{ id: 726, virtualItemId: 81, status: 0 }, { id: 727, virtualItemId: 999, status: 0 }])
const rows = await api.load()
assert.equal(rows[0].holdingStatus, 0); assert.equal(rows[0].incenseCount, 7)
assert.equal(rows[1].holdingStatus, undefined); assert.equal(rows[2].holdingStatus, undefined)
})
test('查询保留后端按当前用户和神仙返回的最新祈愿及回向', async () => {
const { api } = harness(async url => url.startsWith('/api/tiangong') ? [
{ id: 81, holdingId: 726, active: true,
latestPrayer: { offeringId: 10, prayerContent: '愿顺遂' },
latestDedication: { offeringId: 11, dedicationTarget: '众生', dedicationContent: null } },
{ id: 82, latestPrayer: null, latestDedication: null }
] : [{ id: 726, virtualItemId: 81, status: 1 }])
const rows = await api.load()
assert.equal(rows[0].latestPrayer.prayerContent, '愿顺遂')
assert.equal(rows[0].latestDedication.dedicationTarget, '众生')
assert.equal(rows[0].latestDedication.dedicationContent, null)
assert.equal(rows[1].latestPrayer, null)
assert.equal(rows[1].latestDedication, null)
})