From 3ff1f4a6a383bacff569b53c3453c4809ddc6328 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Tue, 5 May 2026 16:27:26 +0200 Subject: [PATCH] feat(core-*): add Vitest configs + composition tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit core-api: appRouter exposes all 4 feature routers + blog procedure shape. core-cms: payloadConfig registers all collections + globals. core-trpc: client + provider exports verified. Spec: §6.1, §6.6 --- packages/core-api/package.json | 7 +++-- packages/core-api/src/router.test.ts | 19 ++++++++++++++ packages/core-api/tsconfig.json | 8 ++++-- packages/core-api/vitest.config.ts | 7 +++++ packages/core-cms/package.json | 7 +++-- packages/core-cms/src/payload.config.test.ts | 20 +++++++++++++++ packages/core-cms/tsconfig.json | 8 ++++-- packages/core-cms/vitest.config.ts | 7 +++++ packages/core-trpc/package.json | 10 ++++++-- packages/core-trpc/src/client.test.ts | 12 +++++++++ packages/core-trpc/tsconfig.json | 8 ++++-- packages/core-trpc/vitest.config.ts | 7 +++++ pnpm-lock.yaml | 27 ++++++++++++++++++++ 13 files changed, 135 insertions(+), 12 deletions(-) create mode 100644 packages/core-api/src/router.test.ts create mode 100644 packages/core-api/vitest.config.ts create mode 100644 packages/core-cms/src/payload.config.test.ts create mode 100644 packages/core-cms/vitest.config.ts create mode 100644 packages/core-trpc/src/client.test.ts create mode 100644 packages/core-trpc/vitest.config.ts diff --git a/packages/core-api/package.json b/packages/core-api/package.json index 25c7fb5..cae8df3 100644 --- a/packages/core-api/package.json +++ b/packages/core-api/package.json @@ -9,7 +9,8 @@ "scripts": { "build": "tsc --noEmit", "lint": "eslint .", - "typecheck": "tsc --noEmit" + "typecheck": "tsc --noEmit", + "test": "vitest run --passWithNoTests" }, "dependencies": { "@repo/auth": "workspace:*", @@ -21,7 +22,9 @@ }, "devDependencies": { "@repo/core-eslint": "workspace:*", + "@repo/core-testing": "workspace:*", "@repo/core-typescript": "workspace:*", - "@types/node": "^22.0.0" + "@types/node": "^22.0.0", + "vitest": "^3.0.0" } } diff --git a/packages/core-api/src/router.test.ts b/packages/core-api/src/router.test.ts new file mode 100644 index 0000000..3dab3a1 --- /dev/null +++ b/packages/core-api/src/router.test.ts @@ -0,0 +1,19 @@ +import { describe, it, expect } from "vitest"; +import { appRouter } from "./root"; + +describe("appRouter composition", () => { + it("exposes auth, blog, marketingPages, navigation routers", () => { + const procedures = appRouter._def.procedures; + const keys = Object.keys(procedures); + expect(keys.some((k) => k.startsWith("auth."))).toBe(true); + expect(keys.some((k) => k.startsWith("blog."))).toBe(true); + expect(keys.some((k) => k.startsWith("marketingPages."))).toBe(true); + expect(keys.some((k) => k.startsWith("navigation."))).toBe(true); + }); + + it("blog router has expected procedures", () => { + const procedures = appRouter._def.procedures; + expect(procedures).toHaveProperty("blog.articleBySlug"); + expect(procedures).toHaveProperty("blog.listArticles"); + }); +}); diff --git a/packages/core-api/tsconfig.json b/packages/core-api/tsconfig.json index 318b900..4dd11ab 100644 --- a/packages/core-api/tsconfig.json +++ b/packages/core-api/tsconfig.json @@ -2,9 +2,13 @@ "extends": "@repo/core-typescript/base.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src", + "rootDir": ".", "declaration": false, - "declarationMap": false + "declarationMap": false, + "types": ["vitest/globals"], + "paths": { + "@/*": ["./src/*"] + } }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"] diff --git a/packages/core-api/vitest.config.ts b/packages/core-api/vitest.config.ts new file mode 100644 index 0000000..c933396 --- /dev/null +++ b/packages/core-api/vitest.config.ts @@ -0,0 +1,7 @@ +import path from "node:path"; +import { mergeConfig } from "vitest/config"; +import { nodeVitestConfig } from "@repo/core-typescript/vitest.base.node"; + +export default mergeConfig(nodeVitestConfig, { + resolve: { alias: { "@": path.resolve(__dirname, "./src") } }, +}); diff --git a/packages/core-cms/package.json b/packages/core-cms/package.json index 7b065fd..9b7aa99 100644 --- a/packages/core-cms/package.json +++ b/packages/core-cms/package.json @@ -10,7 +10,8 @@ "scripts": { "build": "tsc --noEmit", "lint": "eslint .", - "typecheck": "tsc --noEmit" + "typecheck": "tsc --noEmit", + "test": "vitest run --passWithNoTests" }, "dependencies": { "@repo/auth": "workspace:*", @@ -24,7 +25,9 @@ }, "devDependencies": { "@repo/core-eslint": "workspace:*", + "@repo/core-testing": "workspace:*", "@repo/core-typescript": "workspace:*", - "@types/node": "^22.0.0" + "@types/node": "^22.0.0", + "vitest": "^3.0.0" } } diff --git a/packages/core-cms/src/payload.config.test.ts b/packages/core-cms/src/payload.config.test.ts new file mode 100644 index 0000000..0315a08 --- /dev/null +++ b/packages/core-cms/src/payload.config.test.ts @@ -0,0 +1,20 @@ +import { describe, it, expect } from "vitest"; +import config from "./payload.config"; + +describe("payloadConfig composition", () => { + it("registers all feature collections", async () => { + const resolved = await config; + const slugs = resolved.collections?.map((c) => c.slug) ?? []; + expect(slugs).toEqual( + expect.arrayContaining(["users", "articles", "pages", "media"]), + ); + }); + + it("registers all feature globals", async () => { + const resolved = await config; + const slugs = resolved.globals?.map((g) => g.slug) ?? []; + expect(slugs).toEqual( + expect.arrayContaining(["site-settings", "header"]), + ); + }); +}); diff --git a/packages/core-cms/tsconfig.json b/packages/core-cms/tsconfig.json index 47ced51..2ef7087 100644 --- a/packages/core-cms/tsconfig.json +++ b/packages/core-cms/tsconfig.json @@ -2,8 +2,12 @@ "extends": "@repo/core-typescript/base.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src", - "lib": ["ES2022", "DOM"] + "rootDir": ".", + "lib": ["ES2022", "DOM"], + "types": ["vitest/globals"], + "paths": { + "@/*": ["./src/*"] + } }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"] diff --git a/packages/core-cms/vitest.config.ts b/packages/core-cms/vitest.config.ts new file mode 100644 index 0000000..c933396 --- /dev/null +++ b/packages/core-cms/vitest.config.ts @@ -0,0 +1,7 @@ +import path from "node:path"; +import { mergeConfig } from "vitest/config"; +import { nodeVitestConfig } from "@repo/core-typescript/vitest.base.node"; + +export default mergeConfig(nodeVitestConfig, { + resolve: { alias: { "@": path.resolve(__dirname, "./src") } }, +}); diff --git a/packages/core-trpc/package.json b/packages/core-trpc/package.json index 5bfda39..bc81356 100644 --- a/packages/core-trpc/package.json +++ b/packages/core-trpc/package.json @@ -11,7 +11,8 @@ "scripts": { "build": "tsc --noEmit", "lint": "eslint .", - "typecheck": "tsc --noEmit" + "typecheck": "tsc --noEmit", + "test": "vitest run --passWithNoTests" }, "dependencies": { "@repo/core-api": "workspace:*", @@ -25,7 +26,12 @@ }, "devDependencies": { "@repo/core-eslint": "workspace:*", + "@repo/core-testing": "workspace:*", "@repo/core-typescript": "workspace:*", - "@types/react": "^19.0.0" + "@testing-library/jest-dom": "^6.5.0", + "@testing-library/react": "^16.0.0", + "@types/react": "^19.0.0", + "jsdom": "^25.0.0", + "vitest": "^3.0.0" } } diff --git a/packages/core-trpc/src/client.test.ts b/packages/core-trpc/src/client.test.ts new file mode 100644 index 0000000..e998a06 --- /dev/null +++ b/packages/core-trpc/src/client.test.ts @@ -0,0 +1,12 @@ +import { describe, it, expect } from "vitest"; +import { useTRPC, TRPCProvider } from "./client"; + +describe("core-trpc client exports", () => { + it("exports useTRPC hook", () => { + expect(useTRPC).toBeTypeOf("function"); + }); + + it("exports TRPCProvider component", () => { + expect(TRPCProvider).toBeTypeOf("function"); + }); +}); diff --git a/packages/core-trpc/tsconfig.json b/packages/core-trpc/tsconfig.json index ac8180a..cd8d483 100644 --- a/packages/core-trpc/tsconfig.json +++ b/packages/core-trpc/tsconfig.json @@ -2,11 +2,15 @@ "extends": "@repo/core-typescript/base.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src", + "rootDir": ".", "lib": ["ES2022", "DOM"], "jsx": "preserve", "declaration": false, - "declarationMap": false + "declarationMap": false, + "types": ["vitest/globals", "@testing-library/jest-dom"], + "paths": { + "@/*": ["./src/*"] + } }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"] diff --git a/packages/core-trpc/vitest.config.ts b/packages/core-trpc/vitest.config.ts new file mode 100644 index 0000000..ccf910f --- /dev/null +++ b/packages/core-trpc/vitest.config.ts @@ -0,0 +1,7 @@ +import path from "node:path"; +import { mergeConfig } from "vitest/config"; +import { jsdomVitestConfig } from "@repo/core-typescript/vitest.base.jsdom"; + +export default mergeConfig(jsdomVitestConfig, { + resolve: { alias: { "@": path.resolve(__dirname, "./src") } }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f7dc5f9..92171f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -330,12 +330,18 @@ importers: '@repo/core-eslint': specifier: workspace:* version: link:../core-eslint + '@repo/core-testing': + specifier: workspace:* + version: link:../core-testing '@repo/core-typescript': specifier: workspace:* version: link:../core-typescript '@types/node': specifier: ^22.0.0 version: 22.19.17 + vitest: + specifier: ^3.0.0 + version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) packages/core-cms: dependencies: @@ -367,12 +373,18 @@ importers: '@repo/core-eslint': specifier: workspace:* version: link:../core-eslint + '@repo/core-testing': + specifier: workspace:* + version: link:../core-testing '@repo/core-typescript': specifier: workspace:* version: link:../core-typescript '@types/node': specifier: ^22.0.0 version: 22.19.17 + vitest: + specifier: ^3.0.0 + version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) packages/core-eslint: devDependencies: @@ -517,12 +529,27 @@ importers: '@repo/core-eslint': specifier: workspace:* version: link:../core-eslint + '@repo/core-testing': + specifier: workspace:* + version: link:../core-testing '@repo/core-typescript': specifier: workspace:* version: link:../core-typescript + '@testing-library/jest-dom': + specifier: ^6.5.0 + version: 6.9.1 + '@testing-library/react': + specifier: ^16.0.0 + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@types/react': specifier: ^19.0.0 version: 19.2.14 + jsdom: + specifier: ^25.0.0 + version: 25.0.1 + vitest: + specifier: ^3.0.0 + version: 3.2.4(@types/debug@4.1.13)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.99.0)(tsx@4.21.0) packages/core-typescript: devDependencies: