84 lines
2.9 KiB
TypeScript
84 lines
2.9 KiB
TypeScript
import test from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
import {
|
|
normalizeRestrictionHours,
|
|
resolveSubmissionRestrictionPolicy
|
|
} from '../../server/utils/submission-restriction-policy.ts'
|
|
|
|
test('时长归一化只接受正整数,其余视为未配置', () => {
|
|
assert.equal(normalizeRestrictionHours(null), null)
|
|
assert.equal(normalizeRestrictionHours(undefined), null)
|
|
assert.equal(normalizeRestrictionHours(''), null)
|
|
assert.equal(normalizeRestrictionHours('abc'), null)
|
|
assert.equal(normalizeRestrictionHours(0), null)
|
|
assert.equal(normalizeRestrictionHours(-3), null)
|
|
assert.equal(normalizeRestrictionHours(1), 1)
|
|
assert.equal(normalizeRestrictionHours('24'), 24)
|
|
assert.equal(normalizeRestrictionHours(24.7), 24)
|
|
})
|
|
|
|
test('关闭重复投稿限制后不做任何限制,普通用户可重复投稿已排期歌曲', () => {
|
|
const policy = resolveSubmissionRestrictionPolicy({
|
|
enableSubmissionRestriction: false,
|
|
sameSongRestrictionHours: null,
|
|
sameArtistRestrictionHours: null,
|
|
submissionRestrictionScope: 'all'
|
|
})
|
|
assert.equal(policy.mode, 'none')
|
|
})
|
|
|
|
test('开关关闭但残留时长也不生效,避免脏数据绕过开关', () => {
|
|
const policy = resolveSubmissionRestrictionPolicy({
|
|
enableSubmissionRestriction: false,
|
|
sameSongRestrictionHours: 48,
|
|
sameArtistRestrictionHours: null
|
|
})
|
|
assert.equal(policy.mode, 'none')
|
|
})
|
|
|
|
test('系统设置缺失时按不限制降级', () => {
|
|
assert.equal(resolveSubmissionRestrictionPolicy(null).mode, 'none')
|
|
assert.equal(resolveSubmissionRestrictionPolicy(undefined).mode, 'none')
|
|
assert.equal(resolveSubmissionRestrictionPolicy({}).mode, 'none')
|
|
})
|
|
|
|
test('开启限制但未配置时长时沿用本学期查重规则', () => {
|
|
const policy = resolveSubmissionRestrictionPolicy({
|
|
enableSubmissionRestriction: true,
|
|
sameSongRestrictionHours: null,
|
|
sameArtistRestrictionHours: null
|
|
})
|
|
assert.equal(policy.mode, 'semester')
|
|
})
|
|
|
|
test('开启限制且时长非法时退回本学期查重规则', () => {
|
|
const policy = resolveSubmissionRestrictionPolicy({
|
|
enableSubmissionRestriction: true,
|
|
sameSongRestrictionHours: 0,
|
|
sameArtistRestrictionHours: 'abc'
|
|
})
|
|
assert.equal(policy.mode, 'semester')
|
|
})
|
|
|
|
test('开启限制且配置时长时按冷却窗口判定', () => {
|
|
const policy = resolveSubmissionRestrictionPolicy({
|
|
enableSubmissionRestriction: true,
|
|
sameSongRestrictionHours: 24,
|
|
sameArtistRestrictionHours: 72,
|
|
submissionRestrictionScope: 'self'
|
|
})
|
|
assert.equal(policy.mode, 'window')
|
|
assert.equal(policy.sameSongHours, 24)
|
|
assert.equal(policy.sameArtistHours, 72)
|
|
assert.equal(policy.scope, 'self')
|
|
})
|
|
|
|
test('限制范围非法值回退为所有人', () => {
|
|
const policy = resolveSubmissionRestrictionPolicy({
|
|
enableSubmissionRestriction: true,
|
|
sameSongRestrictionHours: 24,
|
|
submissionRestrictionScope: 'everyone'
|
|
})
|
|
assert.equal(policy.scope, 'all')
|
|
})
|