ghp / packages /server /test /membershipRefresh.test.ts
QSLY's picture
deploy: build Hugging Face Space from source
00a912e
Raw
History Blame Contribute Delete
5.97 kB
import assert from 'node:assert/strict'
import { mkdtempSync, rmSync } from 'node:fs'
import { tmpdir } from 'node:os'
import path from 'node:path'
import test, { after } from 'node:test'
const testDataDir = mkdtempSync(path.join(tmpdir(), 'music-together-membership-'))
process.env.DATABASE_URL = `file:${path.join(testDataDir, 'test.db')}`
const authService = await import('../src/services/authService.js')
const { db } = await import('../src/repositories/database.js')
const { platformAuthRepo } = await import('../src/repositories/platformAuthRepository.js')
db.prepare('INSERT INTO users (id, nickname, created_at, updated_at, last_seen_at) VALUES (?, ?, ?, ?, ?)').run(
'refresh-user',
'测试用户',
Date.now(),
Date.now(),
Date.now(),
)
after(() => {
authService.cleanupRoom('refresh-room')
authService.cleanupRoom('concept-refresh-room')
authService.cleanupRoom('standard-refresh-room')
authService.cleanupRoom('bilibili-refresh-room')
db.close()
rmSync(testDataDir, { recursive: true, force: true })
})
test('refreshes and persists missing membership details from a restored account', async () => {
authService.addCookie('refresh-room', 'netease', 'refresh-user', 'old-cookie', '旧昵称', 110, true)
const refreshed = await authService.refreshMissingMembershipDetails(
'refresh-room',
'refresh-user',
async (platform, cookie) => {
assert.equal(platform, 'netease')
assert.equal(cookie, 'old-cookie')
return {
ok: true,
data: {
nickname: '新昵称',
vipType: 1,
vipLabel: 'VIP·伍',
vipLevel: 5,
userId: 123,
},
}
},
)
assert.deepEqual(refreshed, ['netease'])
assert.deepEqual(authService.getUserAuthStatus('refresh-user', 'refresh-room')[0], {
platform: 'netease',
loggedIn: true,
nickname: '新昵称',
vipType: 1,
vipLabel: 'VIP·伍',
vipLevel: 5,
})
const persisted = platformAuthRepo.loadUser('refresh-user').find((entry) => entry.platform === 'netease')
assert.equal(persisted?.vipLabel, 'VIP·伍')
assert.equal(persisted?.vipLevel, 5)
})
test('keeps restored account data when membership refresh temporarily fails', async () => {
authService.addCookie('refresh-room', 'tencent', 'refresh-user', 'qq-cookie', 'QQ 用户', 1, true)
let attempts = 0
const refreshed = await authService.refreshMissingMembershipDetails('refresh-room', 'refresh-user', async () => {
attempts++
return { ok: false, reason: 'error' }
})
assert.deepEqual(refreshed, [])
assert.equal(attempts, 2)
const status = authService
.getUserAuthStatus('refresh-user', 'refresh-room')
.find((entry) => entry.platform === 'tencent')
assert.equal(status?.loggedIn, true)
assert.equal(status?.vipType, 1)
assert.equal(status?.vipLabel, undefined)
})
test('refreshes a restored Concept Edition account even when its stored tier is zero', async () => {
authService.addCookie(
'concept-refresh-room',
'kugou_concept',
'refresh-user',
'concept-cookie',
'概念版用户',
0,
true,
)
const refreshed = await authService.refreshMissingMembershipDetails(
'concept-refresh-room',
'refresh-user',
async (platform, cookie) => {
assert.equal(platform, 'kugou_concept')
assert.equal(cookie, 'concept-cookie')
return {
ok: true,
data: {
nickname: '概念版用户',
vipType: 1,
vipLabel: 'VIP',
userId: 123,
},
}
},
)
assert.deepEqual(refreshed, ['kugou_concept'])
const status = authService
.getUserAuthStatus('refresh-user', 'concept-refresh-room')
.find((entry) => entry.platform === 'kugou_concept')
assert.equal(status?.vipType, 1)
assert.equal(status?.vipLabel, 'VIP')
})
test('revalidates a detailed standard Kugou account and persists an expired membership', async () => {
authService.addCookie('standard-refresh-room', 'kugou', 'refresh-user', 'standard-cookie', '酷狗用户', 2, true, {
vipLabel: 'SVIP·Lv5',
vipLevel: 5,
})
let attempts = 0
const refreshed = await authService.refreshMissingMembershipDetails(
'standard-refresh-room',
'refresh-user',
async (platform, cookie) => {
attempts++
assert.equal(platform, 'kugou')
assert.equal(cookie, 'standard-cookie')
return {
ok: true,
data: { nickname: '酷狗用户', vipType: 0, userId: 123 },
}
},
)
assert.deepEqual(refreshed, ['kugou'])
const status = authService
.getUserAuthStatus('refresh-user', 'standard-refresh-room')
.find((entry) => entry.platform === 'kugou')
assert.equal(status?.vipType, 0)
assert.equal(status?.vipLabel, undefined)
const repeated = await authService.refreshMissingMembershipDetails(
'standard-refresh-room',
'refresh-user',
async () => {
attempts++
return { ok: false, reason: 'error' }
},
)
assert.deepEqual(repeated, [])
assert.equal(attempts, 1)
})
test('refreshes a restored Bilibili account to distinguish annual membership', async () => {
authService.addCookie('bilibili-refresh-room', 'bilibili', 'refresh-user', 'bilibili-cookie', 'B站用户', 1, true, {
vipLabel: 'VIP · 年度大会员',
})
const refreshed = await authService.refreshMissingMembershipDetails(
'bilibili-refresh-room',
'refresh-user',
async (platform, cookie) => {
assert.equal(platform, 'bilibili')
assert.equal(cookie, 'bilibili-cookie')
return {
ok: true,
data: { nickname: 'B站用户', vipType: 2, vipLabel: '年度大会员', userId: 123 },
}
},
)
assert.deepEqual(refreshed, ['bilibili'])
const status = authService
.getUserAuthStatus('refresh-user', 'bilibili-refresh-room')
.find((entry) => entry.platform === 'bilibili')
assert.equal(status?.vipType, 2)
assert.equal(status?.vipLabel, '年度大会员')
})