"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const discord_js_1 = require("discord.js"); const sign_up_1 = require("../../src/commands/sign-up"); const tour_schedule_1 = require("../../src/tour-schedule"); jest.mock("../../src/tour-schedule", () => ({ getTourSchedule: jest.fn(), })); describe("signUpCommand", () => { const queue = { join: jest.fn(), leave: jest.fn(), list: jest.fn(), clear: jest.fn(), next: jest.fn(), }; beforeEach(() => { jest.clearAllMocks(); tour_schedule_1.getTourSchedule.mockReturnValue(queue); }); function createInteraction(action) { return { inGuild: () => true, guildId: "guild-1", user: { id: "user-1" }, guild: { id: "guild-1" }, memberPermissions: { has: jest.fn((permission) => permission === discord_js_1.PermissionFlagsBits.ManageChannels), }, options: { getSubcommand: () => action, }, reply: jest.fn().mockResolvedValue(undefined), }; } it("joins queue and replies with position", async () => { queue.join.mockReturnValue({ joined: true, position: 2 }); const interaction = createInteraction("join"); await sign_up_1.signUpCommand.execute(interaction); expect(queue.join).toHaveBeenCalledWith("guild-1", "user-1"); expect(interaction.reply).toHaveBeenCalledWith({ content: "Added to queue at position 2.", ephemeral: true, }); }); it("lists queue in FIFO order", async () => { queue.list.mockReturnValue(["user-1", "user-2"]); const interaction = createInteraction("list"); await sign_up_1.signUpCommand.execute(interaction); expect(interaction.reply).toHaveBeenCalledWith({ content: "1. <@user-1>\n2. <@user-2>", ephemeral: true, }); }); it("blocks next action when missing Manage Channels", async () => { const interaction = createInteraction("next"); interaction.memberPermissions.has = jest.fn().mockReturnValue(false); await sign_up_1.signUpCommand.execute(interaction); expect(interaction.reply).toHaveBeenCalledWith({ content: "Need Manage Channels permission for this action.", ephemeral: true, }); }); it("advances queue and announces stage status", async () => { queue.next.mockResolvedValue({ nextUserId: "user-7", remaining: 3, stageResult: "promoted", }); const interaction = createInteraction("next"); await sign_up_1.signUpCommand.execute(interaction); expect(interaction.reply).toHaveBeenCalledWith({ content: "Now up: <@user-7>\nQueue remaining: 3\nStage speaker promoted.", ephemeral: false, }); }); }); //# sourceMappingURL=sign-up.test.js.map