新增 /api/subscribe 接口:授权上报与风险查询
- grantQuota/getQuotaStatus 从 index.js 导出供测试直接调用 - app.listen 加 require.main 守卫,避免测试 require 本文件时 真的起服务占用端口、cron 定时器让进程无法退出
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
const test = require('node:test')
|
||||
const assert = require('node:assert')
|
||||
const { useTempDb } = require('./helper')
|
||||
|
||||
useTempDb()
|
||||
const db = require('../src/db')
|
||||
const { grantQuota, getQuotaStatus } = require('../src/index')
|
||||
|
||||
const OPENID = 'o_test_1'
|
||||
|
||||
// 往指定用户名下插一条纪念日
|
||||
function seed(openid, id, personName, offsetDays, remindDays) {
|
||||
const d = new Date(Date.now() + offsetDays * 86400000)
|
||||
db.prepare(`
|
||||
INSERT OR REPLACE INTO anniversaries
|
||||
(id, openid, personId, personName, type, isLunar, solarYear, solarMonth, solarDay,
|
||||
importance, remindEnabled, remindDays, createTime, updateTime)
|
||||
VALUES (?, ?, 'p1', ?, 'birthday', 0, ?, ?, ?, 'high', 1, ?, 0, 0)
|
||||
`).run(id, openid, personName, d.getFullYear(), d.getMonth() + 1, d.getDate(), remindDays)
|
||||
}
|
||||
|
||||
seed(OPENID, 'seed1', '张三', 10, 3)
|
||||
|
||||
test('grant 累加并返回新余额', () => {
|
||||
assert.deepStrictEqual(grantQuota(OPENID, { count: 1 }), { success: true, balance: 1 })
|
||||
assert.deepStrictEqual(grantQuota(OPENID, { count: 1 }), { success: true, balance: 2 })
|
||||
})
|
||||
|
||||
test('grant 的 data 缺省时按 1 计', () => {
|
||||
const before = getQuotaStatus(OPENID).balance
|
||||
grantQuota(OPENID, undefined)
|
||||
assert.strictEqual(getQuotaStatus(OPENID).balance, before + 1)
|
||||
})
|
||||
|
||||
test('get 返回余额与风险信息', () => {
|
||||
const res = getQuotaStatus(OPENID)
|
||||
assert.strictEqual(res.success, true)
|
||||
assert.strictEqual(typeof res.balance, 'number')
|
||||
assert.ok(Array.isArray(res.atRiskNames))
|
||||
})
|
||||
|
||||
test('无纪念日时没有风险', () => {
|
||||
const res = getQuotaStatus('o_empty')
|
||||
assert.strictEqual(res.atRiskCount, 0)
|
||||
assert.deepStrictEqual(res.atRiskNames, [])
|
||||
})
|
||||
|
||||
test('纪念日多于余额时报出风险人名', () => {
|
||||
const OP = 'o_test_2'
|
||||
// 造两条近期纪念日,共 4 个提醒事件,但只给 1 点额度
|
||||
seed(OP, 'x1', '甲', 10, 3)
|
||||
seed(OP, 'x2', '乙', 20, 3)
|
||||
require('../src/quota').grant(OP, 1)
|
||||
|
||||
const res = getQuotaStatus(OP)
|
||||
assert.ok(res.atRiskCount >= 1, '应当报出风险')
|
||||
assert.ok(res.atRiskNames.includes('乙'), '时间靠后的乙必然有风险')
|
||||
})
|
||||
Reference in New Issue
Block a user