From 4c227cc404e51331c0514b0aaa07d96d8940c347 Mon Sep 17 00:00:00 2001 From: Akira HIGUCHI Date: Tue, 19 May 2026 23:59:48 +0900 Subject: [PATCH] refactor(sdk): colocate vitest tests next to their sources Drop the `src/vitest/__tests__/` directory; the test files live next to the modules they cover. Vitest discovers them via the existing `**/?(*.)+(spec|test).ts` include pattern, so the `**/__tests__/**/*.ts` entry has been removed from `vitest.config.ts`. The nested integration runner moves from `src/vitest/__tests__/integration/` to `src/vitest/integration/`. Pure refactor: no public API or behavior changes. --- .changeset/colocate-vitest-tests.md | 11 +++++++++++ packages/sdk/knip.json | 2 ++ .../vitest/{__tests__ => }/blocked-modules.test.ts | 2 +- packages/sdk/src/vitest/{__tests__ => }/index.test.ts | 2 +- .../src/vitest/{__tests__ => }/integration.test.ts | 2 +- .../integration/fixtures/uses-node-crypto-types.ts | 0 .../integration/fixtures/uses-node-crypto.ts | 0 .../integration/fixtures/uses-web-crypto.ts | 0 .../{__tests__ => }/integration/should-fail.test.ts | 0 .../{__tests__ => }/integration/should-pass.test.ts | 0 .../{__tests__ => }/integration/vitest.config.ts | 6 +++--- .../sdk/src/vitest/{__tests__ => }/mock-types.test.ts | 2 +- packages/sdk/src/vitest/{__tests__ => }/mock.test.ts | 2 +- .../sdk/src/vitest/{__tests__ => }/plugin.test.ts | 2 +- packages/sdk/src/vitest/{__tests__ => }/setup.test.ts | 2 +- packages/sdk/vitest.config.ts | 5 ++--- 16 files changed, 25 insertions(+), 13 deletions(-) create mode 100644 .changeset/colocate-vitest-tests.md rename packages/sdk/src/vitest/{__tests__ => }/blocked-modules.test.ts (97%) rename packages/sdk/src/vitest/{__tests__ => }/index.test.ts (97%) rename packages/sdk/src/vitest/{__tests__ => }/integration.test.ts (98%) rename packages/sdk/src/vitest/{__tests__ => }/integration/fixtures/uses-node-crypto-types.ts (100%) rename packages/sdk/src/vitest/{__tests__ => }/integration/fixtures/uses-node-crypto.ts (100%) rename packages/sdk/src/vitest/{__tests__ => }/integration/fixtures/uses-web-crypto.ts (100%) rename packages/sdk/src/vitest/{__tests__ => }/integration/should-fail.test.ts (100%) rename packages/sdk/src/vitest/{__tests__ => }/integration/should-pass.test.ts (100%) rename packages/sdk/src/vitest/{__tests__ => }/integration/vitest.config.ts (68%) rename packages/sdk/src/vitest/{__tests__ => }/mock-types.test.ts (96%) rename packages/sdk/src/vitest/{__tests__ => }/mock.test.ts (99%) rename packages/sdk/src/vitest/{__tests__ => }/plugin.test.ts (99%) rename packages/sdk/src/vitest/{__tests__ => }/setup.test.ts (99%) diff --git a/.changeset/colocate-vitest-tests.md b/.changeset/colocate-vitest-tests.md new file mode 100644 index 000000000..987f5d97b --- /dev/null +++ b/.changeset/colocate-vitest-tests.md @@ -0,0 +1,11 @@ +--- +"@tailor-platform/sdk": patch +--- + +Colocate `src/vitest/` tests next to their sources (drop the +`src/vitest/__tests__/` directory). Vitest discovers the test files +via the existing `**/?(*.)+(spec|test).ts` include pattern, so the +`**/__tests__/**/*.ts` entry has been removed from `vitest.config.ts`. +The nested integration runner moves from +`src/vitest/__tests__/integration/` to `src/vitest/integration/`. Pure +refactor: no public API or behavior changes. diff --git a/packages/sdk/knip.json b/packages/sdk/knip.json index 5d54abc18..a89433445 100644 --- a/packages/sdk/knip.json +++ b/packages/sdk/knip.json @@ -5,8 +5,10 @@ "ignore": [ "scripts/**", "e2e/fixtures/**", + "eslint-rules/__tests__/fixtures/**", "src/cli/commands/deploy/__test_fixtures__/**", "src/types/*.ts", + "src/vitest/integration/vitest.config.ts", "zinfer.config.ts" ], "ignoreDependencies": [ diff --git a/packages/sdk/src/vitest/__tests__/blocked-modules.test.ts b/packages/sdk/src/vitest/blocked-modules.test.ts similarity index 97% rename from packages/sdk/src/vitest/__tests__/blocked-modules.test.ts rename to packages/sdk/src/vitest/blocked-modules.test.ts index 7bb3ea406..622ca108d 100644 --- a/packages/sdk/src/vitest/__tests__/blocked-modules.test.ts +++ b/packages/sdk/src/vitest/blocked-modules.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "vitest"; -import { getBlockedMessage, isBlockedModule } from "../blocked-modules"; +import { getBlockedMessage, isBlockedModule } from "./blocked-modules"; describe("isBlockedModule", () => { test("recognizes node:-prefixed builtins", () => { diff --git a/packages/sdk/src/vitest/__tests__/index.test.ts b/packages/sdk/src/vitest/index.test.ts similarity index 97% rename from packages/sdk/src/vitest/__tests__/index.test.ts rename to packages/sdk/src/vitest/index.test.ts index 6330780b4..496970ac9 100644 --- a/packages/sdk/src/vitest/__tests__/index.test.ts +++ b/packages/sdk/src/vitest/index.test.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { isAbsolute } from "node:path"; import { afterEach, beforeEach, describe, expect, test } from "vitest"; -import { tailorRuntime } from "../index"; +import { tailorRuntime } from "./index"; describe("tailorRuntime", () => { const ENV_VAR = "__TAILOR_RUNTIME_CONFIG"; diff --git a/packages/sdk/src/vitest/__tests__/integration.test.ts b/packages/sdk/src/vitest/integration.test.ts similarity index 98% rename from packages/sdk/src/vitest/__tests__/integration.test.ts rename to packages/sdk/src/vitest/integration.test.ts index 21657be7a..c24651495 100644 --- a/packages/sdk/src/vitest/__tests__/integration.test.ts +++ b/packages/sdk/src/vitest/integration.test.ts @@ -12,7 +12,7 @@ const configPath = resolve(integrationDir, "vitest.config.ts"); // Run the nested `vitest run` from the SDK package root (not src/) so the // subprocess sees the package's `package.json` and `tsconfig.json` for // module resolution and TS transforms. -const sdkDir = resolve(currentDir, "../../.."); +const sdkDir = resolve(currentDir, "../.."); // Resolve the workspace's installed Vitest entry rather than relying on `npx`, // which may perform online package resolution and slow down / destabilize CI. diff --git a/packages/sdk/src/vitest/__tests__/integration/fixtures/uses-node-crypto-types.ts b/packages/sdk/src/vitest/integration/fixtures/uses-node-crypto-types.ts similarity index 100% rename from packages/sdk/src/vitest/__tests__/integration/fixtures/uses-node-crypto-types.ts rename to packages/sdk/src/vitest/integration/fixtures/uses-node-crypto-types.ts diff --git a/packages/sdk/src/vitest/__tests__/integration/fixtures/uses-node-crypto.ts b/packages/sdk/src/vitest/integration/fixtures/uses-node-crypto.ts similarity index 100% rename from packages/sdk/src/vitest/__tests__/integration/fixtures/uses-node-crypto.ts rename to packages/sdk/src/vitest/integration/fixtures/uses-node-crypto.ts diff --git a/packages/sdk/src/vitest/__tests__/integration/fixtures/uses-web-crypto.ts b/packages/sdk/src/vitest/integration/fixtures/uses-web-crypto.ts similarity index 100% rename from packages/sdk/src/vitest/__tests__/integration/fixtures/uses-web-crypto.ts rename to packages/sdk/src/vitest/integration/fixtures/uses-web-crypto.ts diff --git a/packages/sdk/src/vitest/__tests__/integration/should-fail.test.ts b/packages/sdk/src/vitest/integration/should-fail.test.ts similarity index 100% rename from packages/sdk/src/vitest/__tests__/integration/should-fail.test.ts rename to packages/sdk/src/vitest/integration/should-fail.test.ts diff --git a/packages/sdk/src/vitest/__tests__/integration/should-pass.test.ts b/packages/sdk/src/vitest/integration/should-pass.test.ts similarity index 100% rename from packages/sdk/src/vitest/__tests__/integration/should-pass.test.ts rename to packages/sdk/src/vitest/integration/should-pass.test.ts diff --git a/packages/sdk/src/vitest/__tests__/integration/vitest.config.ts b/packages/sdk/src/vitest/integration/vitest.config.ts similarity index 68% rename from packages/sdk/src/vitest/__tests__/integration/vitest.config.ts rename to packages/sdk/src/vitest/integration/vitest.config.ts index 364eb0ff3..0168b6222 100644 --- a/packages/sdk/src/vitest/__tests__/integration/vitest.config.ts +++ b/packages/sdk/src/vitest/integration/vitest.config.ts @@ -1,7 +1,7 @@ import { dirname, resolve } from "node:path"; import { fileURLToPath } from "node:url"; import { defineConfig } from "vitest/config"; -import { createBlockPlugin } from "../../plugin"; +import { createBlockPlugin } from "../plugin"; const here = dirname(fileURLToPath(import.meta.url)); @@ -9,8 +9,8 @@ export default defineConfig({ plugins: [createBlockPlugin()], test: { watch: false, - environment: resolve(here, "../../environment.ts"), - setupFiles: [resolve(here, "../../setup.ts")], + environment: resolve(here, "../environment.ts"), + setupFiles: [resolve(here, "../setup.ts")], include: ["./**/*.test.ts"], root: here, }, diff --git a/packages/sdk/src/vitest/__tests__/mock-types.test.ts b/packages/sdk/src/vitest/mock-types.test.ts similarity index 96% rename from packages/sdk/src/vitest/__tests__/mock-types.test.ts rename to packages/sdk/src/vitest/mock-types.test.ts index bcd7b39b9..dce846a53 100644 --- a/packages/sdk/src/vitest/__tests__/mock-types.test.ts +++ b/packages/sdk/src/vitest/mock-types.test.ts @@ -7,7 +7,7 @@ * and are intentionally omitted because they would always pass. */ import { afterAll, beforeAll, describe, expectTypeOf, test } from "vitest"; -import { injectMocks, cleanupMocks } from "../mock"; +import { injectMocks, cleanupMocks } from "./mock"; beforeAll(() => injectMocks(globalThis)); afterAll(() => cleanupMocks(globalThis)); diff --git a/packages/sdk/src/vitest/__tests__/mock.test.ts b/packages/sdk/src/vitest/mock.test.ts similarity index 99% rename from packages/sdk/src/vitest/__tests__/mock.test.ts rename to packages/sdk/src/vitest/mock.test.ts index 24416584a..2bfccb8b1 100644 --- a/packages/sdk/src/vitest/__tests__/mock.test.ts +++ b/packages/sdk/src/vitest/mock.test.ts @@ -12,7 +12,7 @@ import { cleanupMocks, STATE_KEY, RUNTIME_FLAG_KEY, -} from "../mock"; +} from "./mock"; describe("mock", () => { beforeEach(() => { diff --git a/packages/sdk/src/vitest/__tests__/plugin.test.ts b/packages/sdk/src/vitest/plugin.test.ts similarity index 99% rename from packages/sdk/src/vitest/__tests__/plugin.test.ts rename to packages/sdk/src/vitest/plugin.test.ts index 1ff0cbe57..fc67a4699 100644 --- a/packages/sdk/src/vitest/__tests__/plugin.test.ts +++ b/packages/sdk/src/vitest/plugin.test.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { isAbsolute } from "node:path"; import { afterEach, beforeEach, describe, expect, test } from "vitest"; -import { createBlockPlugin, createEnvironmentPlugin } from "../plugin"; +import { createBlockPlugin, createEnvironmentPlugin } from "./plugin"; type ImportNode = { type: "ImportDeclaration" | "ExportNamedDeclaration" | "ExportAllDeclaration"; diff --git a/packages/sdk/src/vitest/__tests__/setup.test.ts b/packages/sdk/src/vitest/setup.test.ts similarity index 99% rename from packages/sdk/src/vitest/__tests__/setup.test.ts rename to packages/sdk/src/vitest/setup.test.ts index 55c1cda5f..4c5367bf6 100644 --- a/packages/sdk/src/vitest/__tests__/setup.test.ts +++ b/packages/sdk/src/vitest/setup.test.ts @@ -8,7 +8,7 @@ import { loadSecretsFromConfig, removeBlockedGlobals, restoreBlockedGlobals, -} from "../setup"; +} from "./setup"; describe("extractVaultStore", () => { test("unwraps a defineSecretManager() shape via the .vaults field", () => { diff --git a/packages/sdk/vitest.config.ts b/packages/sdk/vitest.config.ts index 14d2503df..3d681b437 100644 --- a/packages/sdk/vitest.config.ts +++ b/packages/sdk/vitest.config.ts @@ -16,15 +16,14 @@ export default defineConfig({ extends: true, test: { name: "unit", - include: ["**/__tests__/**/*.ts", "**/?(*.)+(spec|test).ts"], + include: ["**/?(*.)+(spec|test).ts"], exclude: [ "**/node_modules/**", "**/dist/**", "e2e/**", "**/__test_fixtures__/**", - "**/__tests__/fixtures/**", "src/plugin/compat.test.ts", - "src/vitest/__tests__/integration/**", + "src/vitest/integration/**", ], }, },