56 lines
3.3 KiB
JavaScript
56 lines
3.3 KiB
JavaScript
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)
|
|
})
|