优化勋章分段进度展示
This commit is contained in:
@@ -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] })
|
||||
|
||||
Reference in New Issue
Block a user