import { describe, expect, it } from "vitest";
import { upgradeFileToV7 } from "./upgrade-6-to-7";
describe("upgradeFileToV7 (#367) — simple 1:1 specifier rewrites", () => {
it("rewrites @decocms/start/vite", () => {
const r = upgradeFileToV7(`import { decoVitePlugin } from "@decocms/start/vite";`);
expect(r.changed).toBe(true);
expect(r.content).toBe(`import { decoVitePlugin } from "@decocms/tanstack/vite";`);
});
it("rewrites @decocms/start/sdk/cookiePassthrough", () => {
const r = upgradeFileToV7(
`import { getRequestCookieHeader } from "@decocms/start/sdk/cookiePassthrough";`,
);
expect(r.content).toBe(
`import { getRequestCookieHeader } from "@decocms/tanstack/sdk/cookiePassthrough";`,
);
});
it("rewrites @decocms/start/sdk/workerEntry and sdk/router to @decocms/tanstack root", () => {
const r = upgradeFileToV7(
[
`import { createDecoWorkerEntry } from "@decocms/start/sdk/workerEntry";`,
`import { createDecoRouter } from "@decocms/start/sdk/router";`,
].join("\n"),
);
expect(r.content).toBe(
[
`import { createDecoWorkerEntry } from "@decocms/tanstack";`,
`import { createDecoRouter } from "@decocms/tanstack";`,
].join("\n"),
);
});
it("rewrites generic @decocms/start/sdk/* to @decocms/blocks/sdk/*", () => {
const r = upgradeFileToV7(
[
`import { useScript } from "@decocms/start/sdk/useScript";`,
`import { useDevice } from "@decocms/start/sdk/useDevice";`,
`import { clx } from "@decocms/start/sdk/clx";`,
].join("\n"),
);
expect(r.content).toBe(
[
`import { useScript } from "@decocms/blocks/sdk/useScript";`,
`import { useDevice } from "@decocms/blocks/sdk/useDevice";`,
`import { clx } from "@decocms/blocks/sdk/clx";`,
].join("\n"),
);
});
it("rewrites @decocms/start/cms, /setup, /types/widgets, /admin", () => {
const r = upgradeFileToV7(
[
`import { resolveDecoPage } from "@decocms/start/cms";`,
`import { createSiteSetup } from "@decocms/start/setup";`,
`import type { ImageWidget } from "@decocms/start/types/widgets";`,
`import { handleMeta } from "@decocms/start/admin";`,
].join("\n"),
);
expect(r.content).toContain(`from "@decocms/blocks/cms"`);
expect(r.content).toContain(`from "@decocms/blocks/setup"`);
expect(r.content).toContain(`from "@decocms/blocks/types/widgets"`);
expect(r.content).toContain(`from "@decocms/blocks-admin"`);
});
it("rewrites @decocms/apps/commerce/components/Image to @decocms/blocks/hooks", () => {
const r = upgradeFileToV7(`import { Image } from "@decocms/apps/commerce/components/Image";`);
expect(r.content).toBe(`import { Image } from "@decocms/blocks/hooks";`);
});
it("rewrites @decocms/apps/commerce/* to @decocms/apps-commerce/*", () => {
const r = upgradeFileToV7(`import type { Product } from "@decocms/apps/commerce/types";`);
expect(r.content).toBe(`import type { Product } from "@decocms/apps-commerce/types";`);
});
it("rewrites @decocms/apps/vtex/* to @decocms/apps-vtex/*", () => {
const r = upgradeFileToV7(`import { getUser } from "@decocms/apps/vtex/loaders/user";`);
expect(r.content).toBe(`import { getUser } from "@decocms/apps-vtex/loaders/user";`);
});
it("is a no-op for a file already on the 7.x split packages", () => {
const src = `import { createDecoWorkerEntry } from "@decocms/tanstack";\nimport { resolveDecoPage } from "@decocms/blocks/cms";\n`;
const r = upgradeFileToV7(src);
expect(r.changed).toBe(false);
expect(r.content).toBe(src);
expect(r.notes).toEqual([]);
});
});
describe("upgradeFileToV7 (#367) — @decocms/start/routes fan-out", () => {
it("moves cmsRouteConfig/cmsHomeRouteConfig to @decocms/tanstack root", () => {
const r = upgradeFileToV7(
`import { cmsRouteConfig, cmsHomeRouteConfig } from "@decocms/start/routes";`,
);
expect(r.content).toBe(
`import { cmsRouteConfig, cmsHomeRouteConfig } from "@decocms/tanstack";`,
);
});
it("splits deferredSectionLoader into its own subpath import", () => {
const r = upgradeFileToV7(
`import { cmsRouteConfig, deferredSectionLoader } from "@decocms/start/routes";`,
);
expect(r.content).toContain(`import { cmsRouteConfig } from "@decocms/tanstack";`);
expect(r.content).toContain(
`import { deferredSectionLoader } from "@decocms/tanstack/sdk/deferredSectionLoader";`,
);
});
it("renames decoMetaRoute/decoRenderRoute/decoInvokeRoute to their *RouteConfig factory names and flags a MANUAL call-site note", () => {
const src = [
`import { decoMetaRoute, decoRenderRoute, decoInvokeRoute } from "@decocms/start/routes";`,
`export const Route = createFileRoute("/deco/meta")({ ...decoMetaRoute });`,
].join("\n");
const r = upgradeFileToV7(src);
expect(r.content).toContain(
`import { decoMetaRouteConfig, decoRenderRouteConfig, decoInvokeRouteConfig } from "@decocms/tanstack";`,
);
expect(r.content).toContain("...decoMetaRouteConfig }");
expect(r.notes.some((n) => n.includes("decoMetaRoute") && n.includes("factory"))).toBe(true);
});
});
describe("upgradeFileToV7 (#367) — @decocms/start/hooks fan-out", () => {
it("moves DecoPageRenderer/DecoRootLayout/PreviewProviders to @decocms/tanstack root", () => {
const r = upgradeFileToV7(
`import { DecoPageRenderer, DecoRootLayout, PreviewProviders } from "@decocms/start/hooks";`,
);
expect(r.content).toBe(
`import { DecoPageRenderer, DecoRootLayout, PreviewProviders } from "@decocms/tanstack";`,
);
});
it("renames RenderSection to SectionRenderer at the import and every usage", () => {
const src = [
`import { RenderSection } from "@decocms/start/hooks";`,
`export const x = ;`,
].join("\n");
const r = upgradeFileToV7(src);
expect(r.content).toContain(`import { SectionRenderer } from "@decocms/tanstack";`);
expect(r.content).toContain("");
expect(r.content).not.toContain("RenderSection");
});
});