Skip to content

Commit 9eede9d

Browse files
dmealingclaude
andcommitted
chore: genericize sibling-project naming in codegen test fixtures
Nine TypeScript test files used a sibling project's name as a metadata package and an abbreviated private scope as a fake npm scope. Both are placeholder fixture values with no behavioural meaning; they are now `shop` and `@acme/`. codegen-ts 1300 pass / 0 fail, codegen-ts-react 26/26, codegen-ts-tanstack 79/79. (Two codegen-ts failures seen first time round were a fresh-worktree precondition — runtime-ts had no dist — and reproduce with these edits stashed.) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent 4bda8b7 commit 9eede9d

9 files changed

Lines changed: 43 additions & 43 deletions

File tree

server/typescript/packages/cli/test/integration/gen-multi-target.test.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ function setupRepo(): string {
1818
children: [
1919
{ "object.entity": {
2020
name: "Program",
21-
package: "mikes::commerce",
21+
package: "shop::commerce",
2222
children: [
2323
{ "source.rdb": {} },
2424
{ "field.long": { name: "id", children: [
@@ -38,10 +38,10 @@ import { entityFile, queriesFile, routesFile } from "@metaobjectsdev/codegen-ts/
3838
import { tanstackQuery } from "@metaobjectsdev/codegen-ts-tanstack";
3939
export default defineConfig({
4040
outDir: ${JSON.stringify(join(root, "packages/database/src/generated"))},
41-
importBase: "@mf/database/generated",
41+
importBase: "@acme/database/generated",
4242
extStyle: "none", dbImport: "../index", dialect: "sqlite", outputLayout: "package", apiPrefix: "/api",
4343
targets: {
44-
api: { outDir: ${JSON.stringify(join(root, "apps/api/src/generated"))}, dbImport: "@mf/database" },
44+
api: { outDir: ${JSON.stringify(join(root, "apps/api/src/generated"))}, dbImport: "@acme/database" },
4545
web: { outDir: ${JSON.stringify(join(root, "apps/web/src/generated"))} },
4646
},
4747
generators: [ entityFile(), queriesFile(), routesFile({ target: "api" }), tanstackQuery({ target: "web" }) ],
@@ -57,20 +57,20 @@ describe("meta gen — multi-target end-to-end", () => {
5757
const exit = await run(["gen", "--cwd", root]);
5858
expect(exit).toBe(0);
5959

60-
const entityPath = join(root, "packages/database/src/generated/mikes/commerce/Program.ts");
61-
const routesPath = join(root, "apps/api/src/generated/mikes/commerce/Program.routes.ts");
62-
const hooksPath = join(root, "apps/web/src/generated/mikes/commerce/Program.hooks.ts");
60+
const entityPath = join(root, "packages/database/src/generated/shop/commerce/Program.ts");
61+
const routesPath = join(root, "apps/api/src/generated/shop/commerce/Program.routes.ts");
62+
const hooksPath = join(root, "apps/web/src/generated/shop/commerce/Program.hooks.ts");
6363
expect(existsSync(entityPath)).toBe(true);
6464
expect(existsSync(routesPath)).toBe(true);
6565
expect(existsSync(hooksPath)).toBe(true);
6666

6767
const routes = readFileSync(routesPath, "utf-8");
68-
expect(routes).toContain("@mf/database/generated/mikes/commerce/Program");
69-
expect(routes).toContain('from "@mf/database"'); // per-target db import
68+
expect(routes).toContain("@acme/database/generated/shop/commerce/Program");
69+
expect(routes).toContain('from "@acme/database"'); // per-target db import
7070
expect(routes).not.toContain('"./Program"');
7171

7272
const hooks = readFileSync(hooksPath, "utf-8");
73-
expect(hooks).toContain("@mf/database/generated/mikes/commerce/Program");
73+
expect(hooks).toContain("@acme/database/generated/shop/commerce/Program");
7474
expect(hooks).not.toContain('"./Program"');
7575
} finally {
7676
rmSync(root, { recursive: true, force: true });

server/typescript/packages/codegen-ts-react/test/cross-target.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { FileSource } from "@metaobjectsdev/metadata/core";
88
// Product lives in package "shop::commerce" → package-layout path "shop/commerce/Product".
99
const FIXTURE = resolve(import.meta.dir, "fixtures", "packaged-entity.json");
1010

11-
const model: ResolvedTarget = { name: "default", outDir: "db/gen", importBase: "@mf/db/generated", outputLayout: "package", dbImport: "../index", runtime: true };
11+
const model: ResolvedTarget = { name: "default", outDir: "db/gen", importBase: "@acme/db/generated", outputLayout: "package", dbImport: "../index", runtime: true };
1212
const web: ResolvedTarget = { name: "web", outDir: "web/gen", importBase: undefined, outputLayout: "package", dbImport: "../index", runtime: true };
1313

1414
async function ctxFor(self: ResolvedTarget, em: ResolvedTarget) {
@@ -28,7 +28,7 @@ describe("form-file — cross target", () => {
2828
it("imports entity via importBase package path, not relative", async () => {
2929
const { entity, ctx } = await ctxFor(web, model);
3030
const out = renderFormFile(entity, ctx);
31-
expect(out).toContain(`from "@mf/db/generated/shop/commerce/Product"`);
31+
expect(out).toContain(`from "@acme/db/generated/shop/commerce/Product"`);
3232
expect(out).not.toContain(`from "./Product"`);
3333
});
3434
it("same target stays relative", async () => {

server/typescript/packages/codegen-ts-tanstack/test/cross-target.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { FileSource } from "@metaobjectsdev/metadata/core";
99
// Product lives in package "shop::commerce" → package-layout path "shop/commerce/Product".
1010
const FIXTURE = resolve(import.meta.dir, "fixtures", "packaged-grid-entity.json");
1111

12-
const model: ResolvedTarget = { name: "default", outDir: "db/gen", importBase: "@mf/db/generated", outputLayout: "package", dbImport: "../index", runtime: true };
12+
const model: ResolvedTarget = { name: "default", outDir: "db/gen", importBase: "@acme/db/generated", outputLayout: "package", dbImport: "../index", runtime: true };
1313
const web: ResolvedTarget = { name: "web", outDir: "web/gen", importBase: undefined, outputLayout: "package", dbImport: "../index", runtime: true };
1414

1515
async function ctxFor(self: ResolvedTarget, em: ResolvedTarget) {
@@ -29,7 +29,7 @@ describe("hooks-file — cross target", () => {
2929
it("imports entity via importBase package path, not relative", async () => {
3030
const { entity, ctx } = await ctxFor(web, model);
3131
const out = renderHooksFile(entity, ctx);
32-
expect(out).toContain(`from "@mf/db/generated/shop/commerce/Product"`);
32+
expect(out).toContain(`from "@acme/db/generated/shop/commerce/Product"`);
3333
expect(out).not.toContain(`from "./Product"`);
3434
});
3535
it("same target stays relative", async () => {
@@ -42,7 +42,7 @@ describe("columns-file — cross target", () => {
4242
it("imports entity types via importBase package path, not relative", async () => {
4343
const { entity, ctx } = await ctxFor(web, model);
4444
const out = renderColumnsFile(entity, ctx);
45-
expect(out).toContain(`from "@mf/db/generated/shop/commerce/Product"`);
45+
expect(out).toContain(`from "@acme/db/generated/shop/commerce/Product"`);
4646
expect(out).not.toContain(`from "./Product"`);
4747
});
4848
});

server/typescript/packages/codegen-ts/test/import-path.test.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
} from "../src/import-path.js";
1414

1515
const model = (over: Partial<ResolvedTarget> = {}): ResolvedTarget => ({
16-
name: "default", outDir: "db/gen", importBase: "@mf/db/generated",
16+
name: "default", outDir: "db/gen", importBase: "@acme/db/generated",
1717
outputLayout: "package", dbImport: "../index", runtime: true, ...over,
1818
});
1919
const web = (over: Partial<ResolvedTarget> = {}): ResolvedTarget => ({
@@ -23,50 +23,50 @@ const web = (over: Partial<ResolvedTarget> = {}): ResolvedTarget => ({
2323

2424
describe("entityModuleSpecifier", () => {
2525
it("same target → relative (honors extStyle), package layout", () => {
26-
expect(entityModuleSpecifier(model(), model(), "mikes::commerce", "Program", "none"))
26+
expect(entityModuleSpecifier(model(), model(), "shop::commerce", "Program", "none"))
2727
.toBe("./Program");
28-
expect(entityModuleSpecifier(model(), model(), "mikes::commerce", "Program", "js"))
28+
expect(entityModuleSpecifier(model(), model(), "shop::commerce", "Program", "js"))
2929
.toBe("./Program.js");
3030
});
3131
it("same target → relative, flat layout", () => {
32-
expect(entityModuleSpecifier(model({ outputLayout: "flat" }), model({ outputLayout: "flat" }), "mikes::commerce", "Program", "none"))
32+
expect(entityModuleSpecifier(model({ outputLayout: "flat" }), model({ outputLayout: "flat" }), "shop::commerce", "Program", "none"))
3333
.toBe("./Program");
3434
});
3535
it("cross target, package layout → extension-less importBase path (extStyle ignored)", () => {
36-
expect(entityModuleSpecifier(web(), model(), "mikes::commerce", "Program", "js"))
37-
.toBe("@mf/db/generated/mikes/commerce/Program");
36+
expect(entityModuleSpecifier(web(), model(), "shop::commerce", "Program", "js"))
37+
.toBe("@acme/db/generated/shop/commerce/Program");
3838
});
3939
it("cross target, flat layout → importBase + entity, no package path", () => {
40-
expect(entityModuleSpecifier(web({ outputLayout: "flat" }), model({ outputLayout: "flat" }), "mikes::commerce", "Program", "none"))
41-
.toBe("@mf/db/generated/Program");
40+
expect(entityModuleSpecifier(web({ outputLayout: "flat" }), model({ outputLayout: "flat" }), "shop::commerce", "Program", "none"))
41+
.toBe("@acme/db/generated/Program");
4242
});
4343
it("cross target, entity at root package → importBase + entity", () => {
4444
expect(entityModuleSpecifier(web(), model(), undefined, "Tag", "none"))
45-
.toBe("@mf/db/generated/Tag");
45+
.toBe("@acme/db/generated/Tag");
4646
});
4747
it("cross target without importBase → throws", () => {
48-
expect(() => entityModuleSpecifier(web(), model({ importBase: undefined }), "mikes::commerce", "Program", "none"))
48+
expect(() => entityModuleSpecifier(web(), model({ importBase: undefined }), "shop::commerce", "Program", "none"))
4949
.toThrow(/importBase/);
5050
});
5151
});
5252

5353
describe("siblingSpecifier", () => {
5454
it("always same-target relative, package layout", () => {
55-
expect(siblingSpecifier(web(), "mikes::commerce", "Program.columns", "none")).toBe("./Program.columns");
55+
expect(siblingSpecifier(web(), "shop::commerce", "Program.columns", "none")).toBe("./Program.columns");
5656
});
5757
it("honors extStyle", () => {
58-
expect(siblingSpecifier(web(), "mikes::commerce", "Program.columns", "js")).toBe("./Program.columns.js");
58+
expect(siblingSpecifier(web(), "shop::commerce", "Program.columns", "js")).toBe("./Program.columns.js");
5959
});
6060
});
6161

6262
describe("barrelModuleSpecifier", () => {
6363
it("same target (package) → './<pkg-path>/<entity>'", () => {
64-
expect(barrelModuleSpecifier(model(), model(), "mikes::commerce", "Program", "none"))
65-
.toBe("./mikes/commerce/Program");
64+
expect(barrelModuleSpecifier(model(), model(), "shop::commerce", "Program", "none"))
65+
.toBe("./shop/commerce/Program");
6666
});
6767
it("cross target → extension-less importBase path", () => {
68-
expect(barrelModuleSpecifier(web(), model(), "mikes::commerce", "Program", "none"))
69-
.toBe("@mf/db/generated/mikes/commerce/Program");
68+
expect(barrelModuleSpecifier(web(), model(), "shop::commerce", "Program", "none"))
69+
.toBe("@acme/db/generated/shop/commerce/Program");
7070
});
7171
});
7272

server/typescript/packages/codegen-ts/test/metaobjects-config.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ describe("resolveTargets", () => {
66
const base = { outDir: "db/gen", extStyle: "none" as const, dbImport: "../index", dialect: "sqlite" as const, generators: [] };
77

88
test("synthesizes a 'default' target from top-level fields", () => {
9-
const t = resolveTargets({ ...base, importBase: "@mf/db/generated", outputLayout: "package" });
9+
const t = resolveTargets({ ...base, importBase: "@acme/db/generated", outputLayout: "package" });
1010
expect(t[DEFAULT_TARGET_NAME]).toEqual({
11-
name: "default", outDir: "db/gen", importBase: "@mf/db/generated",
11+
name: "default", outDir: "db/gen", importBase: "@acme/db/generated",
1212
outputLayout: "package", dbImport: "../index", runtime: true,
1313
});
1414
});
@@ -21,13 +21,13 @@ describe("resolveTargets", () => {
2121

2222
test("named targets resolve; outputLayout + dbImport fall back to top-level, importBase does NOT inherit", () => {
2323
const t = resolveTargets({
24-
...base, outputLayout: "package", importBase: "@mf/db/generated",
24+
...base, outputLayout: "package", importBase: "@acme/db/generated",
2525
targets: {
26-
api: { outDir: "api/gen", dbImport: "@mf/database" },
26+
api: { outDir: "api/gen", dbImport: "@acme/database" },
2727
web: { outDir: "web/gen" },
2828
},
2929
});
30-
expect(t.api).toEqual({ name: "api", outDir: "api/gen", importBase: undefined, outputLayout: "package", dbImport: "@mf/database", runtime: true });
30+
expect(t.api).toEqual({ name: "api", outDir: "api/gen", importBase: undefined, outputLayout: "package", dbImport: "@acme/database", runtime: true });
3131
expect(t.web).toEqual({ name: "web", outDir: "web/gen", importBase: undefined, outputLayout: "package", dbImport: "../index", runtime: true });
3232
});
3333

server/typescript/packages/codegen-ts/test/render-context.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ describe("makeRenderContext — targets", () => {
2020
});
2121

2222
it("passes through explicit selfTarget + entityModuleTarget", () => {
23-
const em: ResolvedTarget = { name: "default", outDir: "db/gen", importBase: "@mf/db/generated", outputLayout: "package", dbImport: "../index", runtime: true };
23+
const em: ResolvedTarget = { name: "default", outDir: "db/gen", importBase: "@acme/db/generated", outputLayout: "package", dbImport: "../index", runtime: true };
2424
const web: ResolvedTarget = { name: "web", outDir: "web/gen", importBase: undefined, outputLayout: "package", dbImport: "../index", runtime: true };
2525
const ctx = makeRenderContext({ ...baseInput, outputLayout: "package", selfTarget: web, entityModuleTarget: em });
2626
expect(ctx.selfTarget.name).toBe("web");
27-
expect(ctx.entityModuleTarget.importBase).toBe("@mf/db/generated");
27+
expect(ctx.entityModuleTarget.importBase).toBe("@acme/db/generated");
2828
});
2929
});
3030

server/typescript/packages/codegen-ts/test/runner.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ describe("runGen — multi-target", () => {
153153
const result = await runGen({
154154
config: defineConfig({
155155
outDir: tmp, extStyle: "none", dbImport: "../index", dialect: "sqlite",
156-
importBase: "@mf/db/generated",
156+
importBase: "@acme/db/generated",
157157
targets: { api: { outDir: apiDir } },
158158
generators: [entity, routes],
159159
}),

server/typescript/packages/codegen-ts/test/templates/barrel.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { GENERATED_HEADER } from "../../src/constants.js";
44
import type { ResolvedTarget } from "../../src/import-path.js";
55

66
const tgt = (outputLayout: "flat" | "package"): ResolvedTarget =>
7-
({ name: "default", outDir: "x", importBase: "@mf/db/generated", outputLayout, dbImport: "../index", runtime: true });
7+
({ name: "default", outDir: "x", importBase: "@acme/db/generated", outputLayout, dbImport: "../index", runtime: true });
88

99
describe("renderBarrel", () => {
1010
test("emits alphabetical exports + @generated header", () => {

server/typescript/packages/codegen-ts/test/templates/cross-target.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ async function ctxFor(self: ResolvedTarget, em: ResolvedTarget) {
2525
return { entity, ctx };
2626
}
2727

28-
const model: ResolvedTarget = { name: "default", outDir: "db/gen", importBase: "@mf/db/generated", outputLayout: "package", dbImport: "../index", runtime: true };
29-
const api: ResolvedTarget = { name: "api", outDir: "api/gen", importBase: undefined, outputLayout: "package", dbImport: "@mf/database", runtime: true };
28+
const model: ResolvedTarget = { name: "default", outDir: "db/gen", importBase: "@acme/db/generated", outputLayout: "package", dbImport: "../index", runtime: true };
29+
const api: ResolvedTarget = { name: "api", outDir: "api/gen", importBase: undefined, outputLayout: "package", dbImport: "@acme/database", runtime: true };
3030

3131
describe("queries-file — same target stays relative", () => {
3232
it("imports entity via './<Entity>'", async () => {
@@ -39,8 +39,8 @@ describe("routes-file — cross target", () => {
3939
it("imports entity via importBase package path, db via per-target dbImport", async () => {
4040
const { entity, ctx } = await ctxFor(api, model);
4141
const out = renderRoutesFile(entity, ctx);
42-
expect(out).toContain(`from "@mf/db/generated/shop/commerce/${entity.name}"`);
43-
expect(out).toContain(`from "@mf/database"`); // per-target db import
42+
expect(out).toContain(`from "@acme/db/generated/shop/commerce/${entity.name}"`);
43+
expect(out).toContain(`from "@acme/database"`); // per-target db import
4444
expect(out).not.toContain(`from "./${entity.name}"`);
4545
});
4646
});

0 commit comments

Comments
 (0)