import { describe, expect, it } from "vitest"; import { scumSourceRCONChatRequest, scumSourceRCONCommandRequest } from "./scumManagementRcon"; describe("SCUM management Source RCON schema", () => { it("builds a direct RCON job request without connection material", () => { const stamp = Date.UTC(2026, 7, 3, 8, 0, 0); expect(scumSourceRCONCommandRequest("server/unsafe", " ListPlayers ", stamp)).toEqual({ kind: "command", command: "#ListPlayers", idempotencyKey: `web:scum-rcon:server-unsafe:${stamp}` }); }); it("formats direct commands and rejects framed text", () => { expect(scumSourceRCONChatRequest("server-1", "Restart in ten minutes", 42)).toEqual({ kind: "chat", chatType: 4, message: "Restart in ten minutes", idempotencyKey: "web:scum-rcon-chat:server-1:42" }); expect(scumSourceRCONCommandRequest("server-1", "#SetTime 12").command).toBe("#SetTime 12"); expect(() => scumSourceRCONCommandRequest("server-1", "ListPlayers\nSetTime 12")).toThrow("管理指令必须是单行文本"); }); });