import { describe, expect, it } from "@suaveplan/testing/runner"; import { TEST_VITE_CODES, TestViteError } from "../error-codes/error-codes.js"; import { createVitestBrowserConfig } from "./vitest-browser-config.js"; describe("createVitestBrowserConfig", () => { it("works with no arguments", { timeout: 5000 }, () => { const config = createVitestBrowserConfig(); expect(config.test?.fileParallelism).toBe(false); }); it("accepts a custom provider override", { timeout: 5000 }, () => { const provider = { name: "custom" }; const config = createVitestBrowserConfig({ provider }); const browser = config.test?.browser as { provider?: unknown }; expect(browser.provider).toBe(provider); }); it("defaults to chromium headless with fileParallelism off", { timeout: 5000, }, () => { const config = createVitestBrowserConfig({}); const browser = config.test?.browser as { provider?: { name?: string }; headless?: boolean; instances?: Array<{ browser: string }>; }; expect(browser.provider?.name).toBe("playwright"); expect(browser.headless).toBe(true); expect(browser.instances?.[0]?.browser).toBe("chromium"); expect(config.test?.fileParallelism).toBe(false); }); it("accepts multi-browser matrix", { timeout: 5000 }, () => { const config = createVitestBrowserConfig({ browsers: ["chromium", "firefox", "webkit"], headless: false, setupFiles: ["./setup.ts"], include: ["custom/**/*.test.ts"], }); const browser = config.test?.browser as { instances?: Array<{ browser: string }>; headless?: boolean; }; expect(browser.instances?.map((entry) => entry.browser)).toEqual([ "chromium", "firefox", "webkit", ]); expect(browser.headless).toBe(false); expect(config.test?.setupFiles).toEqual(["./setup.ts"]); expect(config.test?.include).toEqual(["custom/**/*.test.ts"]); }); it("throws INVALID_OPTIONS on empty browsers", { timeout: 5000 }, () => { let captured: unknown; try { createVitestBrowserConfig({ browsers: [] }); } catch (err) { captured = err; } expect(captured).toBeInstanceOf(TestViteError); expect((captured as TestViteError).code).toBe( TEST_VITE_CODES.INVALID_OPTIONS ); }); });