import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { setupUI } from "../src/ui.js"; const COMPOSER_BTN_SELECTOR = ".ocvd-btn"; function setupCallbacks() { return { onToggle: vi.fn(), onCancel: vi.fn(), }; } afterEach(() => { document.body.innerHTML = ""; }); describe("setupUI composer injection", () => { beforeEach(() => { vi.spyOn(console, "log").mockImplementation(() => {}); }); it("should inject mic button when prompt-input-v2 is present", () => { document.body.innerHTML = '
'; setupUI(setupCallbacks()); const btn = document.querySelector(COMPOSER_BTN_SELECTOR); expect(btn).not.toBeNull(); }); it("should inject mic button when prompt-input is present inside dock", () => { document.body.innerHTML = '
'; setupUI(setupCallbacks()); const btn = document.querySelector(COMPOSER_BTN_SELECTOR); expect(btn).not.toBeNull(); }); it("should NOT inject mic button when dock has no prompt-input (child session disabled block)", () => { document.body.innerHTML = '
Prompt is disabled
'; setupUI(setupCallbacks()); const btn = document.querySelector(COMPOSER_BTN_SELECTOR); expect(btn).toBeNull(); }); it("should NOT inject mic button when only session-prompt-dock exists without any composer inside", () => { document.body.innerHTML = '
'; setupUI(setupCallbacks()); const btn = document.querySelector(COMPOSER_BTN_SELECTOR); expect(btn).toBeNull(); }); it("should NOT inject composer mic button when question-custom-input is open (PR #31 regression guard)", () => { document.body.innerHTML = '
'; setupUI(setupCallbacks()); const dock = document.querySelector('[data-component="session-prompt-dock"]'); const composerContainer = dock?.querySelector(":scope > .ocvd-container"); expect(composerContainer).toBeNull(); }); });