mirror of
https://github.com/ZHANGTIANYAO1/teamspeak-music-bot.git
synced 2026-10-02 04:52:50 +08:00
Library.vue: use Song type from store so SongCard's strict platform union accepts the data (was platform: string, broke after merge tightened SongCard prop type). database.test.ts: switch toEqual -> toMatchObject so getBotInstances() returning extra profile_* schema columns no longer fails the assertion. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
102 lines
2.8 KiB
TypeScript
102 lines
2.8 KiB
TypeScript
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
import { createDatabase, type BotDatabase, type BotInstance, type PlayHistoryEntry } from "./database.js";
|
|
|
|
describe("database", () => {
|
|
let botDb: BotDatabase;
|
|
|
|
beforeEach(() => {
|
|
botDb = createDatabase(":memory:");
|
|
});
|
|
|
|
afterEach(() => {
|
|
botDb.close();
|
|
});
|
|
|
|
it("creates tables on init", () => {
|
|
const tables = botDb.db
|
|
.prepare(
|
|
"SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"
|
|
)
|
|
.all() as Array<{ name: string }>;
|
|
const names = tables.map((t) => t.name);
|
|
expect(names).toContain("play_history");
|
|
expect(names).toContain("bot_instances");
|
|
});
|
|
|
|
it("records and retrieves play history", () => {
|
|
botDb.addPlayHistory({
|
|
botId: "bot1",
|
|
songId: "song1",
|
|
songName: "Test Song",
|
|
artist: "Test Artist",
|
|
album: "Test Album",
|
|
platform: "netease",
|
|
coverUrl: "https://example.com/cover.jpg",
|
|
});
|
|
|
|
botDb.addPlayHistory({
|
|
botId: "bot1",
|
|
songId: "song2",
|
|
songName: "Another Song",
|
|
artist: "Another Artist",
|
|
album: "Another Album",
|
|
platform: "qq",
|
|
coverUrl: "https://example.com/cover2.jpg",
|
|
});
|
|
|
|
const history = botDb.getPlayHistory("bot1", 10);
|
|
expect(history).toHaveLength(2);
|
|
expect(history[0].songName).toBe("Another Song");
|
|
expect(history[1].songName).toBe("Test Song");
|
|
});
|
|
|
|
it("saves and loads bot instances", () => {
|
|
const instance: BotInstance = {
|
|
id: "bot1",
|
|
name: "Music Bot",
|
|
serverAddress: "localhost",
|
|
serverPort: 9987,
|
|
nickname: "MusicBot",
|
|
defaultChannel: "Music",
|
|
channelPassword: "",
|
|
autoStart: true,
|
|
serverProtocol: "",
|
|
ts6ApiKey: "",
|
|
serverPassword: "",
|
|
};
|
|
|
|
botDb.saveBotInstance(instance);
|
|
const instances = botDb.getBotInstances();
|
|
expect(instances).toHaveLength(1);
|
|
expect(instances[0]).toMatchObject(instance);
|
|
expect(instances[0].autoStart).toBe(true);
|
|
|
|
// Test upsert
|
|
botDb.saveBotInstance({ ...instance, nickname: "UpdatedBot", autoStart: false });
|
|
const updated = botDb.getBotInstances();
|
|
expect(updated).toHaveLength(1);
|
|
expect(updated[0].nickname).toBe("UpdatedBot");
|
|
expect(updated[0].autoStart).toBe(false);
|
|
});
|
|
|
|
it("deletes bot instance", () => {
|
|
botDb.saveBotInstance({
|
|
id: "bot1",
|
|
name: "Music Bot",
|
|
serverAddress: "localhost",
|
|
serverPort: 9987,
|
|
nickname: "MusicBot",
|
|
defaultChannel: "Music",
|
|
channelPassword: "",
|
|
autoStart: false,
|
|
serverProtocol: "",
|
|
ts6ApiKey: "",
|
|
serverPassword: "",
|
|
});
|
|
|
|
expect(botDb.deleteBotInstance("bot1")).toBe(true);
|
|
expect(botDb.getBotInstances()).toHaveLength(0);
|
|
expect(botDb.deleteBotInstance("nonexistent")).toBe(false);
|
|
});
|
|
});
|