新增订阅消息额度记账表与模块

This commit is contained in:
yuming
2026-08-15 17:34:46 +08:00
parent 68acbb3809
commit 8d63b47577
3 changed files with 119 additions and 0 deletions
+51
View File
@@ -0,0 +1,51 @@
const test = require('node:test')
const assert = require('node:assert')
const { useTempDb } = require('./helper')
useTempDb() // 必须在 require quota/db 之前
const quota = require('../src/quota')
test('未记录过的用户余额为 0', () => {
assert.strictEqual(quota.getBalance('u_new'), 0)
})
test('grant 纯累加,不去重', () => {
quota.grant('u1', 1)
quota.grant('u1', 1)
quota.grant('u1', 1)
assert.strictEqual(quota.getBalance('u1'), 3)
})
test('consume 扣减余额', () => {
quota.grant('u2', 5)
quota.consume('u2', 2)
assert.strictEqual(quota.getBalance('u2'), 3)
})
test('consume 不会把余额扣成负数', () => {
quota.grant('u3', 1)
quota.consume('u3', 10)
assert.strictEqual(quota.getBalance('u3'), 0)
})
test('reset 把余额归零', () => {
quota.grant('u4', 8)
quota.reset('u4')
assert.strictEqual(quota.getBalance('u4'), 0)
})
test('grant 对非法 count 做兜底', () => {
quota.grant('u5', 'abc')
assert.strictEqual(quota.getBalance('u5'), 1)
quota.grant('u5', -5)
assert.strictEqual(quota.getBalance('u5'), 2)
quota.grant('u5', 9999)
assert.strictEqual(quota.getBalance('u5'), 52) // 单次上限 50
})
test('各用户额度互不影响', () => {
quota.grant('a', 3)
quota.grant('b', 1)
assert.strictEqual(quota.getBalance('a'), 3)
assert.strictEqual(quota.getBalance('b'), 1)
})