Harden bot, storage and web API

This commit is contained in:
Shinuwa 2026-06-30 17:25:00 +02:00
parent e974bc6660
commit 20624a5c9c
43 changed files with 1265 additions and 1012 deletions

52
test/musicQueue.test.js Normal file
View file

@ -0,0 +1,52 @@
import test from "node:test";
import assert from "node:assert/strict";
Object.assign(process.env, {
NODE_ENV: "test",
DISCORD_GUILD_ID: "1",
SHINUWA_USER_ID: "1",
WEB_SERVER_PORT: "3000",
WEB_API_KEY: "test-key",
DISCORD_APPLICATION_ID: "1",
DISCORD_TOKEN: "test-token",
VOICE_CHANNEL_ID: "1",
TEXT_CHANNEL_ID: "1",
GAME_SERVERS_MESSAGE_ID: "1",
});
const { MusicQueue } = await import("../src/music/queue.js");
test("playNext shares one in-flight operation", async () => {
const queue = Object.create(MusicQueue.prototype);
queue.playNextPromise = null;
let calls = 0;
let resolveOperation;
queue.runPlayNext = () => {
calls += 1;
return new Promise((resolve) => {
resolveOperation = resolve;
});
};
const first = queue.playNext();
const second = queue.playNext();
assert.equal(first, second);
assert.equal(calls, 1);
resolveOperation();
await first;
assert.equal(queue.playNextPromise, null);
});
test("queue snapshots do not expose filesystem paths", () => {
const queue = Object.create(MusicQueue.prototype);
queue.currentTrack = { id: "current", path: "/private/current.mp3" };
queue.queue = [{ id: "next", path: "/private/next.mp3" }];
queue.playbackStatus = "playing";
assert.deepEqual(queue.snapshot(), {
current: { id: "current" },
upcoming: [{ id: "next" }],
status: "playing",
});
});