66 lines
2.2 KiB
JavaScript
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]
|
|
})
|
|
})
|