mirror of
https://github.com/ZHANGTIANYAO1/teamspeak-music-bot.git
synced 2026-10-01 20:42:50 +08:00
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
59 lines
2.3 KiB
TypeScript
59 lines
2.3 KiB
TypeScript
import { describe, it, expect, afterEach } from "vitest";
|
|
import fs from "node:fs";
|
|
import path from "node:path";
|
|
import os from "node:os";
|
|
import { createDatabase, backfillMemberPermissions, type BotDatabase } from "./database.js";
|
|
import { createPermissionStore, CAPABILITIES } from "./permissions.js";
|
|
|
|
describe("backfillMemberPermissions", () => {
|
|
let dbFile: string;
|
|
let db: BotDatabase;
|
|
function fresh() {
|
|
dbFile = path.join(os.tmpdir(), `mig-${Date.now()}-${Math.random().toString(36).slice(2)}.db`);
|
|
db = createDatabase(dbFile);
|
|
}
|
|
afterEach(() => {
|
|
db.close();
|
|
for (const s of ["", "-wal", "-shm"]) {
|
|
try {
|
|
fs.rmSync(dbFile + s, { force: true });
|
|
} catch {}
|
|
}
|
|
});
|
|
|
|
it("grants existing members full access + bots.all, skips admins, once", () => {
|
|
fresh();
|
|
// simulate a pre-feature DB: clear the marker that createDatabase set, add users, no perm rows
|
|
db.db.prepare("DELETE FROM schema_meta WHERE key = 'perm_backfill_done'").run();
|
|
const now = Date.now();
|
|
const ins = db.db.prepare(
|
|
"INSERT INTO users (id,username,passwordHash,createdAt,updatedAt,role) VALUES (?,?,?,?,?,?)"
|
|
);
|
|
ins.run("m1", "mem", "x", now, now, "member");
|
|
ins.run("a1", "adm", "x", now, now, "admin");
|
|
|
|
backfillMemberPermissions(db.db);
|
|
|
|
const store = createPermissionStore(db.db);
|
|
expect(store.getCapabilities("m1").sort()).toEqual([...CAPABILITIES].sort());
|
|
expect(store.getBotAccess("m1")).toBe("all");
|
|
expect(store.getCapabilities("a1")).toEqual([]);
|
|
expect(store.getBotAccess("a1")).toEqual([]);
|
|
});
|
|
|
|
it("is idempotent — running again does not change or re-grant", () => {
|
|
fresh();
|
|
db.db.prepare("DELETE FROM schema_meta WHERE key = 'perm_backfill_done'").run();
|
|
const now = Date.now();
|
|
db.db
|
|
.prepare("INSERT INTO users (id,username,passwordHash,createdAt,updatedAt,role) VALUES (?,?,?,?,?,?)")
|
|
.run("m1", "mem", "x", now, now, "member");
|
|
backfillMemberPermissions(db.db);
|
|
// member restricted afterwards
|
|
createPermissionStore(db.db).setPermissions("m1", { capabilities: [], bots: [] });
|
|
// second run must NOT re-grant (marker present)
|
|
backfillMemberPermissions(db.db);
|
|
expect(createPermissionStore(db.db).getCapabilities("m1")).toEqual([]);
|
|
});
|
|
});
|