Files
wx_pbzc/tests/badge-state.test.js
T
2026-07-29 11:45:20 +08:00

66 lines
2.2 KiB
JavaScript

const test = require('node:test')
const assert = require('node:assert/strict')
const {
getBadgeProgress,
getBadgePositions,
getBadgeSegments,
getBadgeDisplayLabel,
getBadgeCelebration
} = require('../utils/badge-state')
const badges = [
{ days: 3, name: '抖登' },
{ days: 7, name: '中登' },
{ days: 14, name: '老登' },
{ days: 30, name: '神登' },
{ days: 60, name: '上古神登' },
{ days: 80, name: '洪荒神登' },
{ days: 100, name: '究极登祖' }
]
test('badge progress remains zero before the first milestone', () => {
assert.equal(getBadgeProgress(badges, 1), 0)
assert.equal(getBadgeProgress(badges, 2), 0)
assert.equal(getBadgeProgress(badges, 3), 4)
})
test('milestones use equal spacing and overall fill stays aligned', () => {
assert.deepEqual(getBadgePositions(badges), [4, 19.3, 34.7, 50, 65.3, 80.7, 96])
assert.equal(getBadgeProgress(badges, 7), 19.3)
assert.equal(getBadgeProgress(badges, 60), 65.3)
assert.equal(getBadgeProgress(badges, 100), 100)
})
test('only the active badge connection is partially green', () => {
assert.deepEqual(getBadgeSegments(badges, 16), [
{ left: 4, width: 15.3, progress: 100 },
{ left: 19.3, width: 15.4, progress: 100 },
{ left: 34.7, width: 15.3, progress: 12.5 },
{ left: 50, width: 15.3, progress: 0 },
{ left: 65.3, width: 15.4, progress: 0 },
{ left: 80.7, width: 15.3, progress: 0 }
])
})
test('equal spacing keeps full unlocked badge names readable', () => {
assert.equal(getBadgeDisplayLabel(badges[3], true), '神登')
assert.equal(getBadgeDisplayLabel(badges[4], true), '上古神登')
assert.equal(getBadgeDisplayLabel(badges[6], false), '100天')
})
test('badge celebration keeps prior milestones seen after records are deleted', () => {
const afterDeletion = getBadgeCelebration([3], [])
assert.deepEqual(afterDeletion, { newly: [], seen: [3] })
const afterRetraining = getBadgeCelebration(afterDeletion.seen, [3])
assert.deepEqual(afterRetraining, { newly: [], seen: [3] })
})
test('badge celebration only reports milestones never seen before', () => {
assert.deepEqual(getBadgeCelebration([3], [3, 7]), {
newly: [7],
seen: [3, 7]
})
})