import { describe, it, expect } from "vitest"; import type { PlopTypes } from "@turbo/gen"; import generator from "./config"; describe("core-package generator", () => { it("is registered with realtime and events in choices list", () => { const captured: Array<{ name: string; def: PlopTypes.PlopGeneratorConfig }> = []; const plopMock = { setHelper: () => {}, setGenerator: (name: string, def: PlopTypes.PlopGeneratorConfig) => captured.push({ name, def }), } as unknown as PlopTypes.NodePlopAPI; generator(plopMock); const corePkg = captured.find((c) => c.name === "core-package"); expect(corePkg).toBeDefined(); const prompts = corePkg!.def.prompts as Array<{ name: string; choices: unknown[] }>; expect(prompts[0]!.name).toBe("name"); expect(prompts[0]!.choices).toContain("realtime"); expect(prompts[0]!.choices).toContain("events"); expect(prompts[0]!.choices).toContain("trpc"); expect(prompts[0]!.choices).toContain("ui"); }); }); describe("core-package realtime", () => { it("emits actions covering package files, transpilePackages, and ESLint rules", () => { // Capture the actions returned by the realtime entry. const captured: Array<{ name: string; def: PlopTypes.PlopGeneratorConfig }> = []; const plop = { setHelper: () => {}, setGenerator: (n: string, d: unknown) => captured.push({ name: n, def: d as PlopTypes.PlopGeneratorConfig }), } as unknown as PlopTypes.NodePlopAPI; generator(plop); const corePkg = captured.find((c) => c.name === "core-package")!.def; const actions = (corePkg.actions as (a: { name: string }) => PlopTypes.ActionType[])( { name: "realtime" }, ); // Expectations: at least one assertNotPresent guard, multiple `add` actions, and a transpilePackages action. expect(actions.length).toBeGreaterThan(20); // 28 files + extras }); }); describe("core-package events", () => { it("emits actions covering package files, transpilePackages, and ESLint rule splice", () => { const captured: Array<{ name: string; def: PlopTypes.PlopGeneratorConfig }> = []; const plop = { setHelper: () => {}, setGenerator: (n: string, d: unknown) => captured.push({ name: n, def: d as PlopTypes.PlopGeneratorConfig }), } as unknown as PlopTypes.NodePlopAPI; generator(plop); const corePkg = captured.find((c) => c.name === "core-package")!.def; const actions = (corePkg.actions as (a: { name: string }) => PlopTypes.ActionType[])( { name: "events" }, ); // 1 guard + 15 template files + transpilePackages + ESLint splice + printNextSteps = 19 expect(actions.length).toBeGreaterThanOrEqual(18); }); });