@cedarjs/testing 6.0.2-rc.53 → 6.0.3-next.227
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/checkTestDatabase.d.ts +27 -0
- package/dist/api/checkTestDatabase.d.ts.map +1 -1
- package/dist/api/checkTestDatabase.js +102 -0
- package/dist/api/mockContext.d.ts +1 -1
- package/dist/api/mockContext.d.ts.map +1 -1
- package/dist/api/vitest/CedarApiVitestEnv.d.ts.map +1 -1
- package/dist/api/vitest/CedarApiVitestEnv.js +14 -2
- package/dist/api/vitest/teardown.d.ts +18 -0
- package/dist/api/vitest/teardown.d.ts.map +1 -0
- package/dist/api/vitest/teardown.js +43 -0
- package/dist/api/vitest/vite-plugin-cedar-vitest-api-config.d.ts.map +1 -1
- package/dist/api/vitest/vite-plugin-cedar-vitest-api-config.js +6 -1
- package/dist/api/vitest/vitest-api.setup.d.ts.map +1 -1
- package/dist/api/vitest/vitest-api.setup.js +9 -22
- package/dist/web/MockParamsProvider.d.ts.map +1 -1
- package/dist/web/MockParamsProvider.js +10 -1
- package/dist/web/MockRouter.d.ts.map +1 -1
- package/dist/web/mockRequests.d.ts +14 -0
- package/dist/web/mockRequests.d.ts.map +1 -1
- package/dist/web/mockRequests.js +8 -0
- package/package.json +22 -95
- package/config/jest/api/RedwoodApiJestEnv.d.ts +0 -11
- package/config/jest/api/RedwoodApiJestEnv.d.ts.map +0 -1
- package/config/jest/api/RedwoodApiJestEnv.js +0 -48
- package/config/jest/api/apiBabelConfig.d.ts +0 -5
- package/config/jest/api/apiBabelConfig.d.ts.map +0 -1
- package/config/jest/api/apiBabelConfig.js +0 -34
- package/config/jest/api/globalSetup.d.ts +0 -3
- package/config/jest/api/globalSetup.d.ts.map +0 -1
- package/config/jest/api/globalSetup.js +0 -63
- package/config/jest/api/index.d.ts +0 -3
- package/config/jest/api/index.d.ts.map +0 -1
- package/config/jest/api/index.js +0 -25
- package/config/jest/api/jest-preset.d.ts +0 -4
- package/config/jest/api/jest-preset.d.ts.map +0 -1
- package/config/jest/api/jest-preset.js +0 -140
- package/config/jest/api/jest.setup.d.ts +0 -2
- package/config/jest/api/jest.setup.d.ts.map +0 -1
- package/config/jest/api/jest.setup.js +0 -267
- package/config/jest/api/package.json +0 -8
- package/config/jest/babelPlugins/babel-plugin-redwood-cell.d.ts +0 -11
- package/config/jest/babelPlugins/babel-plugin-redwood-cell.d.ts.map +0 -1
- package/config/jest/babelPlugins/babel-plugin-redwood-cell.js +0 -122
- package/config/jest/jest-serial-runner.d.ts +0 -8
- package/config/jest/jest-serial-runner.d.ts.map +0 -1
- package/config/jest/jest-serial-runner.js +0 -37
- package/config/jest/web/RedwoodWebJestEnv.d.ts +0 -6
- package/config/jest/web/RedwoodWebJestEnv.d.ts.map +0 -1
- package/config/jest/web/RedwoodWebJestEnv.js +0 -43
- package/config/jest/web/index.d.ts +0 -3
- package/config/jest/web/index.d.ts.map +0 -1
- package/config/jest/web/index.js +0 -25
- package/config/jest/web/jest-fixed-jsdom.d.js +0 -1
- package/config/jest/web/jest-preset.d.ts +0 -4
- package/config/jest/web/jest-preset.d.ts.map +0 -1
- package/config/jest/web/jest-preset.js +0 -224
- package/config/jest/web/jest.setup.d.ts +0 -7
- package/config/jest/web/jest.setup.d.ts.map +0 -1
- package/config/jest/web/jest.setup.js +0 -21
- package/config/jest/web/package.json +0 -8
- package/config/jest/web/resolver.d.ts +0 -4
- package/config/jest/web/resolver.d.ts.map +0 -1
- package/config/jest/web/resolver.js +0 -30
- package/config/jest/web/webBabelConfig.d.ts +0 -10
- package/config/jest/web/webBabelConfig.d.ts.map +0 -1
- package/config/jest/web/webBabelConfig.js +0 -48
- package/config/package.json +0 -1
- package/dist/cjs/api/apiFunction.d.ts +0 -37
- package/dist/cjs/api/apiFunction.d.ts.map +0 -1
- package/dist/cjs/api/apiFunction.js +0 -89
- package/dist/cjs/api/checkTestDatabase.d.ts +0 -23
- package/dist/cjs/api/checkTestDatabase.d.ts.map +0 -1
- package/dist/cjs/api/checkTestDatabase.js +0 -69
- package/dist/cjs/api/directive.d.ts +0 -51
- package/dist/cjs/api/directive.d.ts.map +0 -1
- package/dist/cjs/api/directive.js +0 -77
- package/dist/cjs/api/index.d.ts +0 -4
- package/dist/cjs/api/index.d.ts.map +0 -1
- package/dist/cjs/api/index.js +0 -26
- package/dist/cjs/api/mockContext.d.ts +0 -5
- package/dist/cjs/api/mockContext.d.ts.map +0 -1
- package/dist/cjs/api/mockContext.js +0 -58
- package/dist/cjs/api/scenario.d.ts +0 -108
- package/dist/cjs/api/scenario.d.ts.map +0 -1
- package/dist/cjs/api/scenario.js +0 -30
- package/dist/cjs/api/vitest/CedarApiVitestEnv.js +0 -75
- package/dist/cjs/api/vitest/index.js +0 -34
- package/dist/cjs/api/vitest/vite-plugin-auto-import.js +0 -71
- package/dist/cjs/api/vitest/vite-plugin-cedar-vitest-api-config.js +0 -69
- package/dist/cjs/api/vitest/vite-plugin-track-db-imports.js +0 -47
- package/dist/cjs/api/vitest/vitest-api.setup.js +0 -270
- package/dist/cjs/cache/index.d.ts +0 -50
- package/dist/cjs/cache/index.d.ts.map +0 -1
- package/dist/cjs/cache/index.js +0 -104
- package/dist/cjs/config/jest/api/RedwoodApiJestEnv.d.ts +0 -11
- package/dist/cjs/config/jest/api/RedwoodApiJestEnv.d.ts.map +0 -1
- package/dist/cjs/config/jest/api/RedwoodApiJestEnv.js +0 -48
- package/dist/cjs/config/jest/api/apiBabelConfig.d.ts +0 -5
- package/dist/cjs/config/jest/api/apiBabelConfig.d.ts.map +0 -1
- package/dist/cjs/config/jest/api/apiBabelConfig.js +0 -34
- package/dist/cjs/config/jest/api/globalSetup.d.ts +0 -3
- package/dist/cjs/config/jest/api/globalSetup.d.ts.map +0 -1
- package/dist/cjs/config/jest/api/globalSetup.js +0 -63
- package/dist/cjs/config/jest/api/index.d.ts +0 -3
- package/dist/cjs/config/jest/api/index.d.ts.map +0 -1
- package/dist/cjs/config/jest/api/index.js +0 -25
- package/dist/cjs/config/jest/api/jest-preset.d.ts +0 -4
- package/dist/cjs/config/jest/api/jest-preset.d.ts.map +0 -1
- package/dist/cjs/config/jest/api/jest-preset.js +0 -140
- package/dist/cjs/config/jest/api/jest.setup.d.ts +0 -2
- package/dist/cjs/config/jest/api/jest.setup.d.ts.map +0 -1
- package/dist/cjs/config/jest/api/jest.setup.js +0 -267
- package/dist/cjs/config/jest/babelPlugins/babel-plugin-redwood-cell.d.ts +0 -11
- package/dist/cjs/config/jest/babelPlugins/babel-plugin-redwood-cell.d.ts.map +0 -1
- package/dist/cjs/config/jest/babelPlugins/babel-plugin-redwood-cell.js +0 -122
- package/dist/cjs/config/jest/jest-serial-runner.d.ts +0 -8
- package/dist/cjs/config/jest/jest-serial-runner.d.ts.map +0 -1
- package/dist/cjs/config/jest/jest-serial-runner.js +0 -37
- package/dist/cjs/config/jest/web/RedwoodWebJestEnv.d.ts +0 -6
- package/dist/cjs/config/jest/web/RedwoodWebJestEnv.d.ts.map +0 -1
- package/dist/cjs/config/jest/web/RedwoodWebJestEnv.js +0 -43
- package/dist/cjs/config/jest/web/index.d.ts +0 -3
- package/dist/cjs/config/jest/web/index.d.ts.map +0 -1
- package/dist/cjs/config/jest/web/index.js +0 -25
- package/dist/cjs/config/jest/web/jest-fixed-jsdom.d.js +0 -1
- package/dist/cjs/config/jest/web/jest-preset.d.ts +0 -4
- package/dist/cjs/config/jest/web/jest-preset.d.ts.map +0 -1
- package/dist/cjs/config/jest/web/jest-preset.js +0 -224
- package/dist/cjs/config/jest/web/jest.setup.d.ts +0 -7
- package/dist/cjs/config/jest/web/jest.setup.d.ts.map +0 -1
- package/dist/cjs/config/jest/web/jest.setup.js +0 -21
- package/dist/cjs/config/jest/web/resolver.d.ts +0 -4
- package/dist/cjs/config/jest/web/resolver.d.ts.map +0 -1
- package/dist/cjs/config/jest/web/resolver.js +0 -30
- package/dist/cjs/config/jest/web/webBabelConfig.d.ts +0 -10
- package/dist/cjs/config/jest/web/webBabelConfig.d.ts.map +0 -1
- package/dist/cjs/config/jest/web/webBabelConfig.js +0 -48
- package/dist/cjs/package.json +0 -1
- package/dist/cjs/web/MockParamsProvider.d.ts +0 -7
- package/dist/cjs/web/MockParamsProvider.d.ts.map +0 -1
- package/dist/cjs/web/MockParamsProvider.js +0 -44
- package/dist/cjs/web/MockProviders.d.ts +0 -5
- package/dist/cjs/web/MockProviders.d.ts.map +0 -1
- package/dist/cjs/web/MockProviders.js +0 -66
- package/dist/cjs/web/MockRouter.d.ts +0 -11
- package/dist/cjs/web/MockRouter.d.ts.map +0 -1
- package/dist/cjs/web/MockRouter.js +0 -48
- package/dist/cjs/web/customRender.d.ts +0 -6
- package/dist/cjs/web/customRender.d.ts.map +0 -1
- package/dist/cjs/web/customRender.js +0 -54
- package/dist/cjs/web/fileMock.d.ts +0 -10
- package/dist/cjs/web/fileMock.d.ts.map +0 -1
- package/dist/cjs/web/fileMock.js +0 -24
- package/dist/cjs/web/findCellMocks.d.ts +0 -2
- package/dist/cjs/web/findCellMocks.d.ts.map +0 -1
- package/dist/cjs/web/findCellMocks.js +0 -45
- package/dist/cjs/web/globRoutesImporter.d.ts +0 -13
- package/dist/cjs/web/globRoutesImporter.d.ts.map +0 -1
- package/dist/cjs/web/globRoutesImporter.js +0 -46
- package/dist/cjs/web/global.d.ts +0 -6
- package/dist/cjs/web/global.d.ts.map +0 -1
- package/dist/cjs/web/global.js +0 -1
- package/dist/cjs/web/index.d.ts +0 -6
- package/dist/cjs/web/index.d.ts.map +0 -1
- package/dist/cjs/web/index.js +0 -41
- package/dist/cjs/web/mockAuth.d.ts +0 -29
- package/dist/cjs/web/mockAuth.d.ts.map +0 -1
- package/dist/cjs/web/mockAuth.js +0 -89
- package/dist/cjs/web/mockRequests.d.ts +0 -72
- package/dist/cjs/web/mockRequests.d.ts.map +0 -1
- package/dist/cjs/web/mockRequests.js +0 -210
- package/dist/cjs/web/vitest/index.js +0 -37
- package/dist/cjs/web/vitest/vite-plugin-auto-import.js +0 -60
- package/dist/cjs/web/vitest/vite-plugin-cedar-vitest-web-config.js +0 -51
- package/dist/cjs/web/vitest/vite-plugin-cedarjs-router-import-transform.js +0 -42
- package/dist/cjs/web/vitest/vite-plugin-create-auth-import-transform.js +0 -43
- package/dist/cjs/web/vitest/vitest-web.setup.js +0 -19
- package/dist/config/jest/api/RedwoodApiJestEnv.d.ts +0 -11
- package/dist/config/jest/api/RedwoodApiJestEnv.d.ts.map +0 -1
- package/dist/config/jest/api/RedwoodApiJestEnv.js +0 -28
- package/dist/config/jest/api/apiBabelConfig.d.ts +0 -5
- package/dist/config/jest/api/apiBabelConfig.d.ts.map +0 -1
- package/dist/config/jest/api/apiBabelConfig.js +0 -18
- package/dist/config/jest/api/globalSetup.d.ts +0 -3
- package/dist/config/jest/api/globalSetup.d.ts.map +0 -1
- package/dist/config/jest/api/globalSetup.js +0 -36
- package/dist/config/jest/api/index.d.ts +0 -3
- package/dist/config/jest/api/index.d.ts.map +0 -1
- package/dist/config/jest/api/index.js +0 -15
- package/dist/config/jest/api/jest-preset.d.ts +0 -4
- package/dist/config/jest/api/jest-preset.d.ts.map +0 -1
- package/dist/config/jest/api/jest-preset.js +0 -110
- package/dist/config/jest/api/jest.setup.d.ts +0 -2
- package/dist/config/jest/api/jest.setup.d.ts.map +0 -1
- package/dist/config/jest/api/jest.setup.js +0 -244
- package/dist/config/jest/babelPlugins/babel-plugin-redwood-cell.d.ts +0 -11
- package/dist/config/jest/babelPlugins/babel-plugin-redwood-cell.d.ts.map +0 -1
- package/dist/config/jest/babelPlugins/babel-plugin-redwood-cell.js +0 -102
- package/dist/config/jest/jest-serial-runner.d.ts +0 -8
- package/dist/config/jest/jest-serial-runner.d.ts.map +0 -1
- package/dist/config/jest/jest-serial-runner.js +0 -27
- package/dist/config/jest/web/RedwoodWebJestEnv.d.ts +0 -6
- package/dist/config/jest/web/RedwoodWebJestEnv.d.ts.map +0 -1
- package/dist/config/jest/web/RedwoodWebJestEnv.js +0 -13
- package/dist/config/jest/web/index.d.ts +0 -3
- package/dist/config/jest/web/index.d.ts.map +0 -1
- package/dist/config/jest/web/index.js +0 -15
- package/dist/config/jest/web/jest-fixed-jsdom.d.js +0 -0
- package/dist/config/jest/web/jest-preset.d.ts +0 -4
- package/dist/config/jest/web/jest-preset.d.ts.map +0 -1
- package/dist/config/jest/web/jest-preset.js +0 -194
- package/dist/config/jest/web/jest.setup.d.ts +0 -7
- package/dist/config/jest/web/jest.setup.d.ts.map +0 -1
- package/dist/config/jest/web/jest.setup.js +0 -27
- package/dist/config/jest/web/resolver.d.ts +0 -4
- package/dist/config/jest/web/resolver.d.ts.map +0 -1
- package/dist/config/jest/web/resolver.js +0 -42
- package/dist/config/jest/web/webBabelConfig.d.ts +0 -10
- package/dist/config/jest/web/webBabelConfig.d.ts.map +0 -1
- package/dist/config/jest/web/webBabelConfig.js +0 -18
- package/dist/web/fileMock.d.ts +0 -10
- package/dist/web/fileMock.d.ts.map +0 -1
- package/dist/web/fileMock.js +0 -4
|
@@ -20,4 +20,31 @@ export declare function redactDatabaseUrl(url: string): string;
|
|
|
20
20
|
* yet), this is a no-op — Prisma itself will surface the problem.
|
|
21
21
|
*/
|
|
22
22
|
export declare function checkTestDatabaseUrlMatchesProvider(databaseUrl: string, usedFallback: boolean): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Guards `cedar test api`'s destructive database reset by *identity*, not
|
|
25
|
+
* just provider: refuses to run when the resolved test database is the same
|
|
26
|
+
* database as `DATABASE_URL` — same host, port, and database name, or the
|
|
27
|
+
* same sqlite file.
|
|
28
|
+
*
|
|
29
|
+
* This is deliberately the only check, rather than also requiring the
|
|
30
|
+
* database's *name* to look test-like (e.g. containing "test" or "e2e"). A
|
|
31
|
+
* naming convention doesn't hold for managed Postgres providers with a
|
|
32
|
+
* fixed default database name shared by every project — every Supabase
|
|
33
|
+
* project's database is named `postgres`, for instance — so it can't tell a
|
|
34
|
+
* real project's database apart from a dedicated test one by name alone.
|
|
35
|
+
* Whether the two connection strings resolve to the same database is the
|
|
36
|
+
* one fact that holds across every provider.
|
|
37
|
+
*
|
|
38
|
+
* When there's no `DATABASE_URL` at all to compare against, this fails
|
|
39
|
+
* closed rather than skipping the check: an explicit `TEST_DATABASE_URL`
|
|
40
|
+
* with nothing to confirm it's not the app's real database is refused,
|
|
41
|
+
* since there'd be no way to tell it apart from one that is. Cedar's own
|
|
42
|
+
* generated sqlite fallback (`usedFallback`) is exempt from that fail-closed
|
|
43
|
+
* refusal — it's a path only Cedar controls, so there's no need to force a
|
|
44
|
+
* `DATABASE_URL` to exist just to permit it — but it still runs through the
|
|
45
|
+
* same-database comparison below whenever a `DATABASE_URL` is present, so a
|
|
46
|
+
* project whose real database happens to live at that same generated path
|
|
47
|
+
* is still caught.
|
|
48
|
+
*/
|
|
49
|
+
export declare function checkTestDatabaseIdentity(testDatabaseUrl: string, mainDatabaseUrl: string | undefined, usedFallback: boolean): void;
|
|
23
50
|
//# sourceMappingURL=checkTestDatabase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkTestDatabase.d.ts","sourceRoot":"","sources":["../../src/api/checkTestDatabase.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"checkTestDatabase.d.ts","sourceRoot":"","sources":["../../src/api/checkTestDatabase.ts"],"names":[],"mappings":"AAoBA;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mCAAmC,CACvD,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,OAAO,iBAmCtB;AAuHD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,yBAAyB,CACvC,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,YAAY,EAAE,OAAO,QAkCtB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import path from "node:path";
|
|
1
2
|
import { getPrismaDatasourceProvider } from "@cedarjs/project-config";
|
|
2
3
|
const PROVIDER_URL_SCHEMES = {
|
|
3
4
|
sqlite: ["file:"],
|
|
@@ -38,7 +39,108 @@ async function checkTestDatabaseUrlMatchesProvider(databaseUrl, usedFallback) {
|
|
|
38
39
|
${reason}`
|
|
39
40
|
);
|
|
40
41
|
}
|
|
42
|
+
const DEFAULT_PORTS = {
|
|
43
|
+
"postgresql:": "5432",
|
|
44
|
+
"mysql:": "3306",
|
|
45
|
+
"sqlserver:": "1433",
|
|
46
|
+
"mongodb:": "27017"
|
|
47
|
+
};
|
|
48
|
+
function normalizeScheme(scheme) {
|
|
49
|
+
return scheme === "postgres:" ? "postgresql:" : scheme;
|
|
50
|
+
}
|
|
51
|
+
function normalizeHost(host) {
|
|
52
|
+
return host.toLowerCase().replace(/\.$/, "");
|
|
53
|
+
}
|
|
54
|
+
function parseSqlServerIdentity(url) {
|
|
55
|
+
const [authority, ...params] = url.split(";");
|
|
56
|
+
const match = authority.match(
|
|
57
|
+
/^([a-z][a-z0-9+.-]*:)\/\/([^:/?#]+)(?::(\d+))?/i
|
|
58
|
+
);
|
|
59
|
+
if (!match) {
|
|
60
|
+
return void 0;
|
|
61
|
+
}
|
|
62
|
+
const [, scheme, host, port] = match;
|
|
63
|
+
const databaseParam = params.find(
|
|
64
|
+
(param) => /^\s*(?:database|initial\s+catalog)\s*=/i.test(param)
|
|
65
|
+
);
|
|
66
|
+
const database = databaseParam?.slice(databaseParam.indexOf("=") + 1).trim();
|
|
67
|
+
return {
|
|
68
|
+
scheme: scheme.toLowerCase(),
|
|
69
|
+
host: normalizeHost(host),
|
|
70
|
+
port,
|
|
71
|
+
database
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function parseUriIdentity(url) {
|
|
75
|
+
try {
|
|
76
|
+
const parsed = new URL(url);
|
|
77
|
+
const database = decodeURIComponent(parsed.pathname.replace(/^\//, "")).split("/")[0] || void 0;
|
|
78
|
+
return {
|
|
79
|
+
scheme: parsed.protocol.toLowerCase(),
|
|
80
|
+
host: parsed.hostname ? normalizeHost(parsed.hostname) : void 0,
|
|
81
|
+
port: parsed.port || void 0,
|
|
82
|
+
database
|
|
83
|
+
};
|
|
84
|
+
} catch {
|
|
85
|
+
return void 0;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function parseDatabaseIdentity(url) {
|
|
89
|
+
const scheme = getUrlScheme(url);
|
|
90
|
+
if (!scheme) {
|
|
91
|
+
return void 0;
|
|
92
|
+
}
|
|
93
|
+
if (scheme === "file:") {
|
|
94
|
+
return { scheme, database: path.resolve(url.slice("file:".length)) };
|
|
95
|
+
}
|
|
96
|
+
if (scheme === "sqlserver:") {
|
|
97
|
+
return parseSqlServerIdentity(url);
|
|
98
|
+
}
|
|
99
|
+
return parseUriIdentity(url);
|
|
100
|
+
}
|
|
101
|
+
function identitiesMatch(a, b) {
|
|
102
|
+
const schemeA = normalizeScheme(a.scheme);
|
|
103
|
+
const schemeB = normalizeScheme(b.scheme);
|
|
104
|
+
if (schemeA !== schemeB) {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
if (schemeA === "file:") {
|
|
108
|
+
return !!a.database && a.database === b.database;
|
|
109
|
+
}
|
|
110
|
+
if (!a.database || !b.database || a.database !== b.database) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
const portA = a.port || DEFAULT_PORTS[schemeA] || "";
|
|
114
|
+
const portB = b.port || DEFAULT_PORTS[schemeA] || "";
|
|
115
|
+
return (a.host ?? "") === (b.host ?? "") && portA === portB;
|
|
116
|
+
}
|
|
117
|
+
function checkTestDatabaseIdentity(testDatabaseUrl, mainDatabaseUrl, usedFallback) {
|
|
118
|
+
if (!mainDatabaseUrl) {
|
|
119
|
+
if (usedFallback) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const redactedTestUrl = redactDatabaseUrl(testDatabaseUrl);
|
|
123
|
+
throw new Error(
|
|
124
|
+
`TEST_DATABASE_URL (${redactedTestUrl}) is set, but there's no DATABASE_URL to confirm it isn't the same database your app actually uses. Refusing to run a destructive reset without that confirmation.
|
|
125
|
+
|
|
126
|
+
Set DATABASE_URL (even to a placeholder) so Cedar can verify TEST_DATABASE_URL points somewhere different.`
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
const sameRawUrl = mainDatabaseUrl === testDatabaseUrl;
|
|
130
|
+
const testIdentity = parseDatabaseIdentity(testDatabaseUrl);
|
|
131
|
+
const mainIdentity = parseDatabaseIdentity(mainDatabaseUrl);
|
|
132
|
+
const sameParsedIdentity = !!testIdentity && !!mainIdentity && identitiesMatch(testIdentity, mainIdentity);
|
|
133
|
+
if (sameRawUrl || sameParsedIdentity) {
|
|
134
|
+
const redactedTestUrl = redactDatabaseUrl(testDatabaseUrl);
|
|
135
|
+
throw new Error(
|
|
136
|
+
`TEST_DATABASE_URL (${redactedTestUrl}) points at the same database as DATABASE_URL. Refusing to run a destructive reset against your app's main database.
|
|
137
|
+
|
|
138
|
+
Set TEST_DATABASE_URL to a dedicated test database.`
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
41
142
|
export {
|
|
143
|
+
checkTestDatabaseIdentity,
|
|
42
144
|
checkTestDatabaseUrlMatchesProvider,
|
|
43
145
|
redactDatabaseUrl
|
|
44
146
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export interface GlobalContext extends Record<string, unknown> {
|
|
2
2
|
}
|
|
3
|
-
export declare const context:
|
|
3
|
+
export declare const context: GlobalContext;
|
|
4
4
|
export declare const setContext: (newContext: GlobalContext) => GlobalContext;
|
|
5
5
|
//# sourceMappingURL=mockContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockContext.d.ts","sourceRoot":"","sources":["../../src/api/mockContext.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mockContext.d.ts","sourceRoot":"","sources":["../../src/api/mockContext.ts"],"names":[],"mappings":"AAiCA,MAAM,WAAW,aAAc,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAAG;AAEjE,eAAO,MAAM,OAAO,eAAc,CAAA;AAElC,eAAO,MAAM,UAAU,GAAI,YAAY,aAAa,KAAG,aAYtD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CedarApiVitestEnv.d.ts","sourceRoot":"","sources":["../../../src/api/vitest/CedarApiVitestEnv.ts"],"names":[],"mappings":"AAEA,OAAO,2BAA2B,CAAA;AAElC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"CedarApiVitestEnv.d.ts","sourceRoot":"","sources":["../../../src/api/vitest/CedarApiVitestEnv.ts"],"names":[],"mappings":"AAEA,OAAO,2BAA2B,CAAA;AAElC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAWtD,QAAA,MAAM,yBAAyB,EAAE,WAwFhC,CAAA;AAED,eAAe,yBAAyB,CAAA"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import "dotenv-defaults/config.js";
|
|
3
3
|
import execa from "execa";
|
|
4
|
-
import { getPaths } from "@cedarjs/project-config";
|
|
4
|
+
import { getConfig, getPaths } from "@cedarjs/project-config";
|
|
5
5
|
import { getPackageManager } from "@cedarjs/project-config/packageManager";
|
|
6
6
|
import {
|
|
7
|
+
checkTestDatabaseIdentity,
|
|
7
8
|
checkTestDatabaseUrlMatchesProvider,
|
|
8
9
|
redactDatabaseUrl
|
|
9
10
|
} from "../checkTestDatabase.js";
|
|
@@ -18,6 +19,7 @@ const CedarApiVitestEnvironment = {
|
|
|
18
19
|
};
|
|
19
20
|
}
|
|
20
21
|
const cedarPaths = getPaths();
|
|
22
|
+
const mainDatabaseUrl = "CEDAR_APP_DATABASE_URL" in process.env ? process.env.CEDAR_APP_DATABASE_URL : process.env.DATABASE_URL;
|
|
21
23
|
const defaultDb = `file:${path.join(cedarPaths.generated.base, "test.db")}`;
|
|
22
24
|
const usedFallback = !process.env.TEST_DATABASE_URL;
|
|
23
25
|
process.env.DATABASE_URL = process.env.TEST_DATABASE_URL || defaultDb;
|
|
@@ -25,16 +27,26 @@ const CedarApiVitestEnvironment = {
|
|
|
25
27
|
process.env.DATABASE_URL,
|
|
26
28
|
usedFallback
|
|
27
29
|
);
|
|
30
|
+
const testConfig = getConfig().test;
|
|
31
|
+
checkTestDatabaseIdentity(
|
|
32
|
+
process.env.DATABASE_URL,
|
|
33
|
+
mainDatabaseUrl,
|
|
34
|
+
usedFallback
|
|
35
|
+
);
|
|
28
36
|
console.log(
|
|
29
37
|
`Setting up test database: ${redactDatabaseUrl(process.env.DATABASE_URL)}`
|
|
30
38
|
);
|
|
31
39
|
const command = process.env.TEST_DATABASE_STRATEGY === "reset" ? ["prisma", "migrate", "reset", "--force"] : ["prisma", "db", "push", "--force-reset", "--accept-data-loss"];
|
|
32
40
|
const pm = getPackageManager();
|
|
33
41
|
const pmExec = pm === "pnpm" ? pm : "npx";
|
|
42
|
+
const env = { ...process.env };
|
|
43
|
+
if (testConfig.autoConsentToDbReset && !("PRISMA_USER_CONSENT_FOR_DANGEROUS_AI_ACTION" in env)) {
|
|
44
|
+
env.PRISMA_USER_CONSENT_FOR_DANGEROUS_AI_ACTION = "Cedar auto-consent: cedar.toml's [test] autoConsentToDbReset is true, and the reset target passed Cedar's test-database identity guard.";
|
|
45
|
+
}
|
|
34
46
|
execa.sync(pmExec, ["cedar", ...command], {
|
|
35
47
|
cwd: cedarPaths.api.base,
|
|
36
48
|
stdio: "inherit",
|
|
37
|
-
env
|
|
49
|
+
env
|
|
38
50
|
});
|
|
39
51
|
return {
|
|
40
52
|
teardown() {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether `e` is a constraint violation that scenario teardown recovers from
|
|
3
|
+
* by emptying the table later, rather than an error worth raising.
|
|
4
|
+
*/
|
|
5
|
+
export declare function isHandledTeardownError(e: unknown): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Empties every table in `order`, deferring a table to the end of the order
|
|
8
|
+
* when a foreign key says another table has to be emptied first, and
|
|
9
|
+
* returning the order that worked so the next run can start with it.
|
|
10
|
+
*
|
|
11
|
+
* A table that cannot be emptied in any order (a trigger that aborts the
|
|
12
|
+
* delete, or a foreign key no ordering satisfies) would otherwise be deferred
|
|
13
|
+
* forever, since deferring appends to the order being walked. Deferring every
|
|
14
|
+
* table still waiting without emptying one means no order works, so the
|
|
15
|
+
* driver's error is raised instead.
|
|
16
|
+
*/
|
|
17
|
+
export declare function emptyTablesInWorkingOrder(order: string[], emptyTable: (modelName: string) => Promise<unknown>): Promise<string[]>;
|
|
18
|
+
//# sourceMappingURL=teardown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teardown.d.ts","sourceRoot":"","sources":["../../../src/api/vitest/teardown.ts"],"names":[],"mappings":"AA0BA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAQ1D;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAClD,OAAO,CAAC,MAAM,EAAE,CAAC,CA+BnB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const RETRYABLE_ERROR_KINDS = [
|
|
2
|
+
"ForeignKeyConstraintViolation",
|
|
3
|
+
"RestrictViolation"
|
|
4
|
+
];
|
|
5
|
+
function property(value, key) {
|
|
6
|
+
return typeof value === "object" && value !== null ? value[key] : void 0;
|
|
7
|
+
}
|
|
8
|
+
function isHandledTeardownError(e) {
|
|
9
|
+
const cause = property(
|
|
10
|
+
property(property(e, "meta"), "driverAdapterError"),
|
|
11
|
+
"cause"
|
|
12
|
+
);
|
|
13
|
+
const kind = property(cause, "kind");
|
|
14
|
+
return typeof kind === "string" && RETRYABLE_ERROR_KINDS.includes(kind);
|
|
15
|
+
}
|
|
16
|
+
async function emptyTablesInWorkingOrder(order, emptyTable) {
|
|
17
|
+
const remaining = [...order];
|
|
18
|
+
let pendingCount = remaining.length;
|
|
19
|
+
let deferralsSinceLastEmptied = 0;
|
|
20
|
+
for (const modelName of remaining) {
|
|
21
|
+
if (modelName === null) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
await emptyTable(modelName);
|
|
26
|
+
pendingCount--;
|
|
27
|
+
deferralsSinceLastEmptied = 0;
|
|
28
|
+
} catch (e) {
|
|
29
|
+
console.error("teardown error\n", e);
|
|
30
|
+
if (!isHandledTeardownError(e) || deferralsSinceLastEmptied >= pendingCount) {
|
|
31
|
+
throw e;
|
|
32
|
+
}
|
|
33
|
+
deferralsSinceLastEmptied++;
|
|
34
|
+
remaining[remaining.indexOf(modelName)] = null;
|
|
35
|
+
remaining.push(modelName);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return remaining.filter((name) => name !== null);
|
|
39
|
+
}
|
|
40
|
+
export {
|
|
41
|
+
emptyTablesInWorkingOrder,
|
|
42
|
+
isHandledTeardownError
|
|
43
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-plugin-cedar-vitest-api-config.d.ts","sourceRoot":"","sources":["../../../src/api/vitest/vite-plugin-cedar-vitest-api-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAIlC,wBAAgB,0BAA0B,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"vite-plugin-cedar-vitest-api-config.d.ts","sourceRoot":"","sources":["../../../src/api/vitest/vite-plugin-cedar-vitest-api-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAIlC,wBAAgB,0BAA0B,IAAI,MAAM,CAiCnD"}
|
|
@@ -7,7 +7,12 @@ function cedarVitestApiConfigPlugin() {
|
|
|
7
7
|
return {
|
|
8
8
|
define: getEnvVarDefinitions(),
|
|
9
9
|
ssr: {
|
|
10
|
-
|
|
10
|
+
// `@cedarjs/tenancy` reads and writes the request context, which
|
|
11
|
+
// the api test setup replaces with a mock. The mock only reaches
|
|
12
|
+
// code Vite processes, so the tenancy runtime has to be bundled
|
|
13
|
+
// rather than loaded as an external dependency, or a service under
|
|
14
|
+
// test and its Prisma extension would see different contexts.
|
|
15
|
+
noExternal: ["@cedarjs/testing", "@cedarjs/tenancy"]
|
|
11
16
|
},
|
|
12
17
|
resolve: {
|
|
13
18
|
alias: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest-api.setup.d.ts","sourceRoot":"","sources":["../../../src/api/vitest/vitest-api.setup.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"vitest-api.setup.d.ts","sourceRoot":"","sources":["../../../src/api/vitest/vitest-api.setup.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AA4C1D,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK,IAAI,CAAA;CAC3E;AAUD,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,cAAc,EAAE,cAAc,CAAA;IAElC,IAAI,uBAAuB,EAAE,OAAO,CAAA;CACrC"}
|
|
@@ -3,6 +3,7 @@ import path from "node:path";
|
|
|
3
3
|
import { afterAll, beforeEach, it, describe, vi, beforeAll } from "vitest";
|
|
4
4
|
import { getPaths, getPrismaSchemas } from "@cedarjs/project-config";
|
|
5
5
|
import { defineScenario } from "@cedarjs/testing/api";
|
|
6
|
+
import { emptyTablesInWorkingOrder } from "./teardown.js";
|
|
6
7
|
const mockContextStore = vi.hoisted(() => /* @__PURE__ */ new Map());
|
|
7
8
|
const mockContext = vi.hoisted(
|
|
8
9
|
() => new Proxy(
|
|
@@ -38,7 +39,6 @@ globalThis.mockCurrentUser = (currentUser) => {
|
|
|
38
39
|
};
|
|
39
40
|
globalThis.defineScenario = defineScenario;
|
|
40
41
|
const cedarPaths = getPaths();
|
|
41
|
-
const HANDLED_ERRORS = [1451, 1811, 23001, 23503];
|
|
42
42
|
const TEARDOWN_CACHE_PATH = path.join(
|
|
43
43
|
cedarPaths.generated.base,
|
|
44
44
|
"scenarioTeardown.json"
|
|
@@ -132,23 +132,12 @@ async function teardown() {
|
|
|
132
132
|
}
|
|
133
133
|
const quoteStyle2 = await getQuoteStyle();
|
|
134
134
|
const projectDb = await getProjectDb();
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const match = isErrorWithMessage(e) && e.message.match(/Code: `(\d+)`/);
|
|
142
|
-
if (match && HANDLED_ERRORS.includes(parseInt(match[1]))) {
|
|
143
|
-
const index = teardownOrder.indexOf(modelName);
|
|
144
|
-
teardownOrder[index] = null;
|
|
145
|
-
teardownOrder.push(modelName);
|
|
146
|
-
} else {
|
|
147
|
-
throw e;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
teardownOrder = teardownOrder.filter((val) => val);
|
|
135
|
+
teardownOrder = await emptyTablesInWorkingOrder(
|
|
136
|
+
teardownOrder,
|
|
137
|
+
(modelName) => projectDb.$executeRawUnsafe(
|
|
138
|
+
`DELETE FROM ${quoteStyle2}${modelName}${quoteStyle2}`
|
|
139
|
+
)
|
|
140
|
+
);
|
|
152
141
|
if (!isIdenticalArray(teardownOrder, originalTeardownOrder)) {
|
|
153
142
|
originalTeardownOrder = deepCopy(teardownOrder);
|
|
154
143
|
fs.writeFileSync(TEARDOWN_CACHE_PATH, JSON.stringify(teardownOrder));
|
|
@@ -227,7 +216,8 @@ async function getQuoteStyle() {
|
|
|
227
216
|
}
|
|
228
217
|
async function getProjectDb() {
|
|
229
218
|
const libDb = await import(`${cedarPaths.api.lib}/db`);
|
|
230
|
-
|
|
219
|
+
const db = libDb.db;
|
|
220
|
+
return typeof db?.$withoutTenant === "function" ? db.$withoutTenant() : db;
|
|
231
221
|
}
|
|
232
222
|
function isIdenticalArray(a, b) {
|
|
233
223
|
return JSON.stringify(a) === JSON.stringify(b);
|
|
@@ -235,9 +225,6 @@ function isIdenticalArray(a, b) {
|
|
|
235
225
|
function deepCopy(obj) {
|
|
236
226
|
return JSON.parse(JSON.stringify(obj));
|
|
237
227
|
}
|
|
238
|
-
function isErrorWithMessage(e) {
|
|
239
|
-
return !!e && typeof e === "object" && "message" in e && typeof e.message === "string";
|
|
240
|
-
}
|
|
241
228
|
function isErrorWithCode(e) {
|
|
242
229
|
return !!e && typeof e === "object" && "code" in e && typeof e.code === "string";
|
|
243
230
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MockParamsProvider.d.ts","sourceRoot":"","sources":["../../src/web/MockParamsProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"MockParamsProvider.d.ts","sourceRoot":"","sources":["../../src/web/MockParamsProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,UAAU,KAAK;IACb,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAgB9C,CAAA"}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { useLocation, ParamsContext, parseSearch } from "@cedarjs/router";
|
|
3
|
+
import { mockedRouteParamsMeta } from "./mockRequests.js";
|
|
3
4
|
const MockParamsProvider = ({ children }) => {
|
|
4
5
|
const location = useLocation();
|
|
5
6
|
const searchParams = parseSearch(location.search);
|
|
6
|
-
return /* @__PURE__ */ React.createElement(
|
|
7
|
+
return /* @__PURE__ */ React.createElement(
|
|
8
|
+
ParamsContext.Provider,
|
|
9
|
+
{
|
|
10
|
+
value: {
|
|
11
|
+
params: { ...searchParams, ...mockedRouteParamsMeta.params }
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
children
|
|
15
|
+
);
|
|
7
16
|
};
|
|
8
17
|
export {
|
|
9
18
|
MockParamsProvider
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MockRouter.d.ts","sourceRoot":"","sources":["../../src/web/MockRouter.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MockRouter.d.ts","sourceRoot":"","sources":["../../src/web/MockRouter.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAG9D,cAAc,4BAA4B,CAAA;AAE1C,eAAO,MAAM,MAAM,EAAE;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,MAAM,CAAA;CAAO,CAAA;AAE/D;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAcxC,CAAA"}
|
|
@@ -68,5 +68,19 @@ export declare const mockedUserMeta: {
|
|
|
68
68
|
currentUser: Record<string, unknown> | null;
|
|
69
69
|
};
|
|
70
70
|
export declare const mockCurrentUser: (user: Record<string, unknown> | null) => void;
|
|
71
|
+
export declare const mockedRouteParamsMeta: {
|
|
72
|
+
params: Record<string, string>;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Sets the route params `useParams()` (and generated `routes.*()` calls, via
|
|
76
|
+
* `MockRouter`) see in a rendered-in-isolation test -- a cell test, for
|
|
77
|
+
* example, has no matched route to read `{orgSlug}` or similar path params
|
|
78
|
+
* from. Mirrors `mockCurrentUser`'s effect on `useAuth().currentUser`.
|
|
79
|
+
*
|
|
80
|
+
* ```ts
|
|
81
|
+
* mockRouteParams({ orgSlug: 'acme' })
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export declare const mockRouteParams: (params: Record<string, string>) => void;
|
|
71
85
|
export {};
|
|
72
86
|
//# sourceMappingURL=mockRequests.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockRequests.d.ts","sourceRoot":"","sources":["../../src/web/mockRequests.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mockRequests.d.ts","sourceRoot":"","sources":["../../src/web/mockRequests.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,IAAI,qBAAqB,EAAE,MAAM,aAAa,CAAA;AASxE,UAAU,mBAAmB;IAC3B,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IAC7B,aAAa,IAAI,IAAI,CAAA;CACtB;AACD,KAAK,kBAAkB,GAAG,mBAAmB,GAAG;IAAE,IAAI,IAAI,IAAI,CAAA;CAAE,CAAA;AAChE,KAAK,kBAAkB,GAAG,mBAAmB,GAAG;IAC9C,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAAA;IAC9C,KAAK,IAAI,IAAI,CAAA;CACd,CAAA;AAmBD,KAAK,YAAY,CAAC,MAAM,IAAI,MAAM,SAAS,UAAU,GACjD,qBAAqB,GACrB,OAAO,CAAC,aAAa,CAAC,CAAA;AAC1B,eAAO,MAAM,QAAQ,GAAU,MAAM,SAAS,MAAM,GAAG,UAAU,EAC/D,QAAQ,MAAM,EACd,UAAU,YAAY,CAAC,MAAM,CAAC,qDA4B/B,CAAA;AAED,eAAO,MAAM,oBAAoB,YAMhC,CAAA;AAED,eAAO,MAAM,WAAW,YAsBvB,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,SAAS,cAAc,SAQtD,CAAA;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,qEAAqE;IACrE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC,6DAA6D;IAC7D,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,4CAA4C;IAC5C,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAAA;IAClD,oEAAoE;IACpE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChE,4BAA4B;IAC5B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC,yDAAyD;IACzD,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACrD,0DAA0D;IAC1D,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IAC9C,6EAA6E;IAC7E,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACzC,wDAAwD;IACxD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAC5E;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAA;IAChB,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,GAAG,EAAE,GAAG,CAAA;IACR,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,YAAY,CACtB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAClC,CACF,SAAS,EAAE,cAAc,EACzB,EACE,GAAG,EACH,GAAG,GACJ,EAAE;IACD,GAAG,EAAE,kBAAkB,CAAA;IACvB,GAAG,EAAE,kBAAkB,CAAA;CACxB,KACE,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;AAEzC,KAAK,gBAAgB,GAAG,MAAM,GAAG,cAAc,CAAA;AAwH/C,eAAO,MAAM,gBAAgB,GAC3B,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAEpC,WAAW,MAAM,EACjB,MAAM,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,KAAK,EACjD,mBAAmB,gBAAgB,qFAGpC,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAEpC,WAAW,MAAM,EACjB,MAAM,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,KAAK,EACjD,mBAAmB,gBAAgB,qFAGpC,CAAA;AAED,eAAO,MAAM,cAAc,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAEzE,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,SASnE,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAEnE,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAE7D,CAAA"}
|
package/dist/web/mockRequests.js
CHANGED
|
@@ -157,11 +157,19 @@ const mockCurrentUser = (user) => {
|
|
|
157
157
|
};
|
|
158
158
|
});
|
|
159
159
|
};
|
|
160
|
+
const mockedRouteParamsMeta = {
|
|
161
|
+
params: {}
|
|
162
|
+
};
|
|
163
|
+
const mockRouteParams = (params) => {
|
|
164
|
+
mockedRouteParamsMeta.params = params;
|
|
165
|
+
};
|
|
160
166
|
export {
|
|
161
167
|
closeServer,
|
|
162
168
|
mockCurrentUser,
|
|
163
169
|
mockGraphQLMutation,
|
|
164
170
|
mockGraphQLQuery,
|
|
171
|
+
mockRouteParams,
|
|
172
|
+
mockedRouteParamsMeta,
|
|
165
173
|
mockedUserMeta,
|
|
166
174
|
registerHandler,
|
|
167
175
|
setupRequestHandlers,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cedarjs/testing",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.3-next.227",
|
|
4
4
|
"description": "Tools, wrappers and configuration for testing a Cedar project.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -10,92 +10,29 @@
|
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"type": "module",
|
|
12
12
|
"exports": {
|
|
13
|
-
"./config/jest/web": {
|
|
14
|
-
"default": "./config/jest/web/index.js"
|
|
15
|
-
},
|
|
16
|
-
"./config/jest/api": {
|
|
17
|
-
"default": "./config/jest/api/index.js"
|
|
18
|
-
},
|
|
19
|
-
"./config/jest/api/jest-preset": {
|
|
20
|
-
"default": "./config/jest/api/jest-preset.js"
|
|
21
|
-
},
|
|
22
|
-
"./config/jest/web/jest-preset": {
|
|
23
|
-
"default": "./config/jest/web/jest-preset.js"
|
|
24
|
-
},
|
|
25
|
-
"./dist/cjs/api/scenario.js": {
|
|
26
|
-
"default": "./dist/cjs/api/scenario.js"
|
|
27
|
-
},
|
|
28
|
-
"./dist/cjs/api/checkTestDatabase.js": {
|
|
29
|
-
"default": "./dist/cjs/api/checkTestDatabase.js"
|
|
30
|
-
},
|
|
31
|
-
"./dist/cjs/web/findCellMocks": {
|
|
32
|
-
"default": "./dist/cjs/web/findCellMocks.js"
|
|
33
|
-
},
|
|
34
|
-
"./dist/cjs/web/findCellMocks.js": {
|
|
35
|
-
"default": "./dist/cjs/web/findCellMocks.js"
|
|
36
|
-
},
|
|
37
|
-
"./dist/cjs/web/mockRequests": {
|
|
38
|
-
"default": "./dist/cjs/web/mockRequests.js"
|
|
39
|
-
},
|
|
40
|
-
"./dist/cjs/web/mockRequests.js": {
|
|
41
|
-
"default": "./dist/cjs/web/mockRequests.js"
|
|
42
|
-
},
|
|
43
|
-
"./dist/cjs/web/fileMock.js": {
|
|
44
|
-
"default": "./dist/cjs/web/fileMock.js"
|
|
45
|
-
},
|
|
46
13
|
"./auth": {
|
|
47
|
-
"
|
|
48
|
-
|
|
49
|
-
"default": "./dist/web/mockAuth.js"
|
|
50
|
-
},
|
|
51
|
-
"require": {
|
|
52
|
-
"types": "./dist/cjs/web/index.d.ts",
|
|
53
|
-
"default": "./dist/cjs/web/mockAuth.js"
|
|
54
|
-
}
|
|
14
|
+
"types": "./dist/web/mockAuth.d.ts",
|
|
15
|
+
"default": "./dist/web/mockAuth.js"
|
|
55
16
|
},
|
|
56
17
|
"./api": {
|
|
57
|
-
"
|
|
58
|
-
|
|
59
|
-
"default": "./dist/api/index.js"
|
|
60
|
-
},
|
|
61
|
-
"require": {
|
|
62
|
-
"types": "./dist/cjs/api/index.d.ts",
|
|
63
|
-
"default": "./dist/cjs/api/index.js"
|
|
64
|
-
}
|
|
18
|
+
"types": "./dist/api/index.d.ts",
|
|
19
|
+
"default": "./dist/api/index.js"
|
|
65
20
|
},
|
|
66
21
|
"./api/vitest": {
|
|
67
22
|
"types": "./dist/api/vitest/index.d.ts",
|
|
68
23
|
"default": "./dist/api/vitest/index.js"
|
|
69
24
|
},
|
|
70
25
|
"./cache": {
|
|
71
|
-
"
|
|
72
|
-
|
|
73
|
-
"default": "./dist/cache/index.js"
|
|
74
|
-
},
|
|
75
|
-
"require": {
|
|
76
|
-
"types": "./dist/cjs/cache/index.d.ts",
|
|
77
|
-
"default": "./dist/cjs/cache/index.js"
|
|
78
|
-
}
|
|
26
|
+
"types": "./dist/cache/index.d.ts",
|
|
27
|
+
"default": "./dist/cache/index.js"
|
|
79
28
|
},
|
|
80
29
|
"./web": {
|
|
81
|
-
"
|
|
82
|
-
|
|
83
|
-
"default": "./dist/web/index.js"
|
|
84
|
-
},
|
|
85
|
-
"require": {
|
|
86
|
-
"types": "./dist/cjs/web/index.d.ts",
|
|
87
|
-
"default": "./dist/cjs/web/index.js"
|
|
88
|
-
}
|
|
30
|
+
"types": "./dist/web/index.d.ts",
|
|
31
|
+
"default": "./dist/web/index.js"
|
|
89
32
|
},
|
|
90
33
|
"./web/MockRouter.js": {
|
|
91
|
-
"
|
|
92
|
-
|
|
93
|
-
"default": "./dist/web/MockRouter.js"
|
|
94
|
-
},
|
|
95
|
-
"require": {
|
|
96
|
-
"types": "./dist/cjs/web/MockRouter.d.ts",
|
|
97
|
-
"default": "./dist/cjs/web/MockRouter.js"
|
|
98
|
-
}
|
|
34
|
+
"types": "./dist/web/MockRouter.d.ts",
|
|
35
|
+
"default": "./dist/web/MockRouter.js"
|
|
99
36
|
},
|
|
100
37
|
"./web/vitest": {
|
|
101
38
|
"types": "./dist/web/vitest/index.d.ts",
|
|
@@ -103,14 +40,12 @@
|
|
|
103
40
|
}
|
|
104
41
|
},
|
|
105
42
|
"files": [
|
|
106
|
-
"config",
|
|
107
43
|
"dist"
|
|
108
44
|
],
|
|
109
45
|
"scripts": {
|
|
110
46
|
"build": "node ./build.mts && yarn build:types",
|
|
111
47
|
"build:pack": "yarn pack -o cedarjs-testing.tgz",
|
|
112
48
|
"build:types": "tsc --build --verbose ./tsconfig.build.json",
|
|
113
|
-
"build:types-cjs": "tsc --build --verbose ./tsconfig.cjs.json",
|
|
114
49
|
"build:watch": "nodemon --watch src --ext 'js,jsx,ts,tsx' --ignore dist --exec 'yarn build'",
|
|
115
50
|
"check:attw": "yarn cedar-fwtools-attw",
|
|
116
51
|
"check:package": "concurrently npm:check:attw yarn:publint",
|
|
@@ -119,46 +54,38 @@
|
|
|
119
54
|
"test:watch": "vitest watch"
|
|
120
55
|
},
|
|
121
56
|
"dependencies": {
|
|
122
|
-
"@
|
|
123
|
-
"@cedarjs/
|
|
124
|
-
"@cedarjs/
|
|
125
|
-
"@cedarjs/graphql-server": "6.0.2-rc.53",
|
|
126
|
-
"@cedarjs/project-config": "6.0.2-rc.53",
|
|
57
|
+
"@cedarjs/context": "6.0.3-next.227",
|
|
58
|
+
"@cedarjs/graphql-server": "6.0.3-next.227",
|
|
59
|
+
"@cedarjs/project-config": "6.0.3-next.227",
|
|
127
60
|
"@testing-library/dom": "10.4.1",
|
|
128
61
|
"@testing-library/jest-dom": "6.9.1",
|
|
129
62
|
"@testing-library/react": "16.3.3",
|
|
130
63
|
"@testing-library/user-event": "14.6.7",
|
|
131
64
|
"@types/aws-lambda": "8.10.163",
|
|
132
|
-
"@types/babel-core": "6.25.10",
|
|
133
65
|
"@types/jest": "29.5.14",
|
|
134
66
|
"@types/node": "24.10.4",
|
|
135
67
|
"ansis": "4.3.1",
|
|
136
|
-
"babel-jest": "^29.7.0",
|
|
137
68
|
"fast-glob": "3.3.3",
|
|
138
|
-
"
|
|
139
|
-
"jest-environment-jsdom": "29.7.0",
|
|
140
|
-
"jest-fixed-jsdom": "0.0.11",
|
|
141
|
-
"jest-watch-typeahead": "2.2.2",
|
|
69
|
+
"jsdom": "27.4.0",
|
|
142
70
|
"msw": "2.15.0",
|
|
143
71
|
"ts-toolbelt": "9.6.0",
|
|
144
72
|
"unplugin-auto-import": "19.3.0"
|
|
145
73
|
},
|
|
146
74
|
"devDependencies": {
|
|
147
75
|
"@arethetypeswrong/cli": "0.18.5",
|
|
148
|
-
"@cedarjs/auth": "6.0.
|
|
149
|
-
"@cedarjs/framework-tools": "6.0.
|
|
150
|
-
"@cedarjs/router": "6.0.
|
|
151
|
-
"@cedarjs/web": "6.0.
|
|
76
|
+
"@cedarjs/auth": "6.0.3-next.227",
|
|
77
|
+
"@cedarjs/framework-tools": "6.0.3-next.227",
|
|
78
|
+
"@cedarjs/router": "6.0.3-next.227",
|
|
79
|
+
"@cedarjs/web": "6.0.3-next.227",
|
|
152
80
|
"concurrently": "9.2.4",
|
|
153
|
-
"jsdom": "27.4.0",
|
|
154
81
|
"publint": "0.3.24",
|
|
155
82
|
"typescript": "5.9.3",
|
|
156
83
|
"vitest": "4.1.11"
|
|
157
84
|
},
|
|
158
85
|
"peerDependencies": {
|
|
159
|
-
"@cedarjs/auth": "6.0.
|
|
160
|
-
"@cedarjs/router": "6.0.
|
|
161
|
-
"@cedarjs/web": "6.0.
|
|
86
|
+
"@cedarjs/auth": "6.0.3-next.227",
|
|
87
|
+
"@cedarjs/router": "6.0.3-next.227",
|
|
88
|
+
"@cedarjs/web": "6.0.3-next.227",
|
|
162
89
|
"vitest": "4.1.11"
|
|
163
90
|
},
|
|
164
91
|
"peerDependenciesMeta": {
|