ghp / packages /server /test /platformMembershipMigration.test.ts
QSLY's picture
deploy: build Hugging Face Space from source
00a912e
Raw
History Blame Contribute Delete
2.63 kB
import assert from 'node:assert/strict'
import Database from 'better-sqlite3'
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-platform-membership-migration-'))
const databasePath = path.join(testDataDir, 'test.db')
process.env.DATABASE_URL = `file:${databasePath}`
process.env.LOG_LEVEL = 'silent'
const seedDb = new Database(databasePath)
seedDb.exec(`
CREATE TABLE users (
id TEXT PRIMARY KEY,
nickname TEXT NOT NULL DEFAULT '',
avatar_url TEXT,
password_hash TEXT,
role TEXT NOT NULL DEFAULT 'user',
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
last_seen_at INTEGER NOT NULL
);
CREATE TABLE platform_auth (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
platform TEXT NOT NULL,
cookie_encrypted TEXT NOT NULL,
nickname_snapshot TEXT,
vip_type INTEGER NOT NULL DEFAULT 0,
vip_label TEXT,
vip_level INTEGER,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
);
`)
const insertAuth = seedDb.prepare(`
INSERT INTO platform_auth (
id, user_id, platform, cookie_encrypted, nickname_snapshot,
vip_type, vip_label, vip_level, created_at, updated_at
) VALUES (?, 'user', ?, 'cookie', 'nickname', ?, ?, ?, 1, 1)
`)
insertAuth.run('qq', 'tencent', 1, 'VIP', null)
insertAuth.run('kugou', 'kugou', 2, 'SVIP', 5)
insertAuth.run('netease', 'netease', 110, 'VIP·伍', 5)
seedDb.close()
const { db } = await import('../src/repositories/database.js')
after(() => {
db.close()
rmSync(testDataDir, { recursive: true, force: true })
})
test('startup migration removes legacy QQ credentials and normalizes other provider tiers', () => {
const rows = db
.prepare<
[],
{ platform: string; vip_type: number; vip_label: string | null; vip_level: number | null }
>('SELECT platform, vip_type, vip_label, vip_level FROM platform_auth ORDER BY platform')
.all()
assert.deepEqual(rows, [
{ platform: 'kugou', vip_type: 2, vip_label: null, vip_level: 5 },
{ platform: 'netease', vip_type: 1, vip_label: 'VIP·伍', vip_level: 5 },
])
assert.deepEqual(db.prepare('SELECT id FROM schema_migrations ORDER BY id').all(), [
{ id: '20260729_normalize_platform_membership' },
{ id: '20260729_reclassify_kugou_concept_listening_vip' },
{ id: '20260729_revalidate_kugou_standard_membership' },
{ id: '20260801_revalidate_tencent_identity_membership' },
{ id: '20260807_reset_tencent_credentials_for_refresh' },
])
})