Files
wxserver/server/test/subscribeApi.test.js
T
yuming b1949ac73e 新增 /api/subscribe 接口:授权上报与风险查询
- grantQuota/getQuotaStatus 从 index.js 导出供测试直接调用
- app.listen 加 require.main 守卫,避免测试 require 本文件时
  真的起服务占用端口、cron 定时器让进程无法退出
2026-08-15 17:55:40 +08:00

59 lines
2.1 KiB
JavaScript

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('乙'), '时间靠后的乙必然有风险')
})