优化勋章分段进度展示

This commit is contained in:
2026-07-29 11:45:20 +08:00
parent 11d49a26df
commit 903951aee0
5 changed files with 109 additions and 20 deletions
+40 -2
View File
@@ -1,9 +1,23 @@
const test = require('node:test')
const assert = require('node:assert/strict')
const { getBadgeProgress, getBadgeCelebration } = require('../utils/badge-state')
const {
getBadgeProgress,
getBadgePositions,
getBadgeSegments,
getBadgeDisplayLabel,
getBadgeCelebration
} = require('../utils/badge-state')
const badges = [{ days: 3 }, { days: 7 }, { days: 14 }]
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)
@@ -11,6 +25,30 @@ test('badge progress remains zero before the first milestone', () => {
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] })