@etohq/test-utils 1.5.3 → 1.5.4-alpha.0

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.
@@ -0,0 +1,22 @@
1
+ import type { EtoContainer, IWorkflowEngineService } from "@etohq/framework/types";
2
+ export type BlockIntegrationTestRunnerOptions = {
3
+ suiteName: string;
4
+ injectedDependencies?: Record<string, unknown>;
5
+ schema?: string;
6
+ debug?: boolean;
7
+ workflowEngineResolve?: string;
8
+ testSuite: (options: {
9
+ getContainer: () => EtoContainer;
10
+ getModules: () => Record<string, unknown>;
11
+ workflowEngine: IWorkflowEngineService;
12
+ }) => void;
13
+ };
14
+ /**
15
+ * Boots a real workflow engine module (default: workflow-engine-inmemory) and
16
+ * exposes the shared container + resolved IWorkflowEngineService.
17
+ *
18
+ * Intended for block workflows integration tests where correctness depends on
19
+ * real orchestration semantics (idempotency keys, continuation, retries, etc.).
20
+ */
21
+ export declare function blockIntegrationTestRunner(options: BlockIntegrationTestRunnerOptions): void;
22
+ //# sourceMappingURL=block-integration-test-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-integration-test-runner.d.ts","sourceRoot":"","sources":["../src/block-integration-test-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAMlF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,SAAS,EAAE,MAAM,CAAA;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,SAAS,EAAE,CAAC,OAAO,EAAE;QACnB,YAAY,EAAE,MAAM,YAAY,CAAA;QAChC,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACzC,cAAc,EAAE,sBAAsB,CAAA;KACvC,KAAK,IAAI,CAAA;CACX,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,iCAAiC,QAqBpF"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.blockIntegrationTestRunner = blockIntegrationTestRunner;
4
+ const utils_1 = require("@etohq/framework/utils");
5
+ const path_1 = require("path");
6
+ const module_test_runner_1 = require("./module-test-runner");
7
+ /**
8
+ * Boots a real workflow engine module (default: workflow-engine-inmemory) and
9
+ * exposes the shared container + resolved IWorkflowEngineService.
10
+ *
11
+ * Intended for block workflows integration tests where correctness depends on
12
+ * real orchestration semantics (idempotency keys, continuation, retries, etc.).
13
+ */
14
+ function blockIntegrationTestRunner(options) {
15
+ const resolve = options.workflowEngineResolve ??
16
+ (0, path_1.join)(__dirname, "../../core/modules/workflow-engine-inmemory");
17
+ return (0, module_test_runner_1.moduleIntegrationTestRunner)({
18
+ moduleName: utils_1.Modules.WORKFLOW_ENGINE,
19
+ resolve,
20
+ schema: options.schema,
21
+ debug: options.debug,
22
+ injectedDependencies: options.injectedDependencies,
23
+ testSuite: ({ etoApp, service }) => {
24
+ describe(options.suiteName, () => {
25
+ options.testSuite({
26
+ getContainer: () => etoApp.sharedContainer,
27
+ getModules: () => etoApp.modules,
28
+ workflowEngine: service,
29
+ });
30
+ });
31
+ },
32
+ });
33
+ }
34
+ //# sourceMappingURL=block-integration-test-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-integration-test-runner.js","sourceRoot":"","sources":["../src/block-integration-test-runner.ts"],"names":[],"mappings":";;AA0BA,gEAqBC;AA9CD,kDAAgD;AAChD,+BAA2B;AAE3B,6DAAkE;AAelE;;;;;;GAMG;AACH,SAAgB,0BAA0B,CAAC,OAA0C;IACnF,MAAM,OAAO,GACX,OAAO,CAAC,qBAAqB;QAC7B,IAAA,WAAI,EAAC,SAAS,EAAE,6CAA6C,CAAC,CAAA;IAEhE,OAAO,IAAA,gDAA2B,EAAyB;QACzD,UAAU,EAAE,eAAO,CAAC,eAAe;QACnC,OAAO;QACP,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;QAClD,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;YACjC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE;gBAC/B,OAAO,CAAC,SAAS,CAAC;oBAChB,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,eAA+B;oBAC1D,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAkC;oBAC3D,cAAc,EAAE,OAA4C;iBAC7D,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -3,7 +3,7 @@ import { EtoContainer } from "@etohq/framework/types";
3
3
  /**
4
4
  * Initiates the database connection
5
5
  */
6
- export declare function initDb(): Promise<import("@mikro-orm/postgresql").Knex<any, any>>;
6
+ export declare function initDb(): Promise<import("@mikro-orm/knex").Knex<any, any>>;
7
7
  /**
8
8
  * Migrates the database
9
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"use-db.d.ts","sourceRoot":"","sources":["../../src/eto-test-runner-utils/use-db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAGrD;;GAEG;AACH,wBAAsB,MAAM,4DAS3B;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,YAAY,iBAO5D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,YAAY,iBAexB"}
1
+ {"version":3,"file":"use-db.d.ts","sourceRoot":"","sources":["../../src/eto-test-runner-utils/use-db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAGrD;;GAEG;AACH,wBAAsB,MAAM,sDAS3B;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,YAAY,iBAO5D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,YAAY,iBAexB"}
package/dist/index.d.ts CHANGED
@@ -7,4 +7,5 @@ export * from "./eto-test-runner";
7
7
  export * from "./eto-test-runner-utils";
8
8
  export { default as MockEventBusService } from "./mock-event-bus-service";
9
9
  export * from "./module-test-runner";
10
+ export * from "./block-integration-test-runner";
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,iBAAiB,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,cAAc,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,UAAU,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,OAAO,KAAK,SAAS,MAAM,QAAQ,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACzE,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,iBAAiB,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,cAAc,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,UAAU,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,OAAO,KAAK,SAAS,MAAM,QAAQ,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACzE,cAAc,sBAAsB,CAAA;AACpC,cAAc,iCAAiC,CAAA"}
package/dist/index.js CHANGED
@@ -51,4 +51,5 @@ __exportStar(require("./eto-test-runner-utils"), exports);
51
51
  var mock_event_bus_service_1 = require("./mock-event-bus-service");
52
52
  Object.defineProperty(exports, "MockEventBusService", { enumerable: true, get: function () { return __importDefault(mock_event_bus_service_1).default; } });
53
53
  __exportStar(require("./module-test-runner"), exports);
54
+ __exportStar(require("./block-integration-test-runner"), exports);
54
55
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gEAA+C;AAC/C,2DAA0C;AAC1C,mCAA2C;AAAlC,gHAAA,OAAO,OAAS;AACzB,iDAA8B;AAC9B,oDAAmC;AACnC,oDAAiC;AACjC,0DAAuC;AACvC,mEAAyE;AAAhE,8IAAA,OAAO,OAAuB;AACvC,uDAAoC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gEAA+C;AAC/C,2DAA0C;AAC1C,mCAA2C;AAAlC,gHAAA,OAAO,OAAS;AACzB,iDAA8B;AAC9B,oDAAmC;AACnC,oDAAiC;AACjC,0DAAuC;AACvC,mEAAyE;AAAhE,8IAAA,OAAO,OAAuB;AACvC,uDAAoC;AACpC,kEAA+C"}
@@ -1 +1 @@
1
- {"root":["../src/database.ts","../src/eto-test-runner.ts","../src/events.ts","../src/id-map.ts","../src/index.ts","../src/init-modules.ts","../src/jest.ts","../src/mock-event-bus-service.ts","../src/module-test-runner.ts","../src/eto-test-runner-utils/bootstrap-app.ts","../src/eto-test-runner-utils/clear-instances.ts","../src/eto-test-runner-utils/config.ts","../src/eto-test-runner-utils/index.ts","../src/eto-test-runner-utils/use-db.ts","../src/eto-test-runner-utils/utils.ts"],"version":"5.8.3"}
1
+ {"root":["../src/block-integration-test-runner.ts","../src/database.ts","../src/eto-test-runner.ts","../src/events.ts","../src/id-map.ts","../src/index.ts","../src/init-modules.ts","../src/jest.ts","../src/mock-event-bus-service.ts","../src/module-test-runner.ts","../src/eto-test-runner-utils/bootstrap-app.ts","../src/eto-test-runner-utils/clear-instances.ts","../src/eto-test-runner-utils/config.ts","../src/eto-test-runner-utils/index.ts","../src/eto-test-runner-utils/use-db.ts","../src/eto-test-runner-utils/utils.ts"],"version":"5.8.3"}
@@ -0,0 +1,48 @@
1
+ import type { RegisterModuleJoinerConfig } from "@etohq/framework/modules-sdk";
2
+ import type { EtoContainer, ModuleJoinerConfig } from "@etohq/framework/types";
3
+ import { DmlEntity } from "@etohq/framework/utils";
4
+ import type { TestDatabase } from "./database";
5
+ type InjectedDependenciesShape = Record<string, unknown>;
6
+ type InjectedDependenciesInput = InjectedDependenciesShape | (() => InjectedDependenciesShape);
7
+ export type WorkflowTestModuleConfig = {
8
+ resolve: string;
9
+ moduleOptions?: Record<string, unknown>;
10
+ moduleDependencies?: string[];
11
+ /**
12
+ * Optional explicit models; when omitted, models are discovered from `resolve`.
13
+ */
14
+ moduleModels?: (Function | DmlEntity<any, any>)[];
15
+ moduleDefinition?: unknown;
16
+ };
17
+ export type WorkflowTestModulesConfig = Record<string, WorkflowTestModuleConfig>;
18
+ export interface WorkflowSuiteOptions<TServices extends Record<string, unknown> = Record<string, unknown>> {
19
+ MikroOrmWrapper: TestDatabase;
20
+ etoApp: unknown;
21
+ container: EtoContainer;
22
+ services: TServices;
23
+ dbConfig: {
24
+ schema: string;
25
+ clientUrl: string;
26
+ };
27
+ }
28
+ export declare function resolveEtoContainer(etoApp: unknown): EtoContainer;
29
+ export declare function workflowIntegrationTestRunner<TServices extends Record<string, unknown> = Record<string, unknown>>(input: {
30
+ /**
31
+ * Used for deterministic db naming.
32
+ */
33
+ suiteName: string;
34
+ modules: WorkflowTestModulesConfig;
35
+ /**
36
+ * Additional modules definition entries to merge into the config module.
37
+ * Use this in split repos to inject repo-owned default module definitions.
38
+ */
39
+ injectedModulesDefinition?: Record<string, unknown>;
40
+ schema?: string;
41
+ debug?: boolean;
42
+ joinerConfig?: ModuleJoinerConfig[];
43
+ linkModules?: RegisterModuleJoinerConfig | RegisterModuleJoinerConfig[];
44
+ injectedDependencies?: InjectedDependenciesInput;
45
+ testSuite: (options: WorkflowSuiteOptions<TServices>) => void;
46
+ }): void;
47
+ export {};
48
+ //# sourceMappingURL=workflow-test-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-test-runner.d.ts","sourceRoot":"","sources":["../src/workflow-test-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAA;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC9E,OAAO,EAEL,SAAS,EAOV,MAAM,wBAAwB,CAAA;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAY9C,KAAK,yBAAyB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AACxD,KAAK,yBAAyB,GAAG,yBAAyB,GAAG,CAAC,MAAM,yBAAyB,CAAC,CAAA;AAE9F,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAA;IACjD,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAA;AAEhF,MAAM,WAAW,oBAAoB,CAAC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvG,eAAe,EAAE,YAAY,CAAA;IAC7B,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,YAAY,CAAA;IACvB,QAAQ,EAAE,SAAS,CAAA;IACnB,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE,MAAM,CAAA;KAClB,CAAA;CACF;AAUD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,CA4CjE;AA4CD,wBAAgB,6BAA6B,CAAC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/G,KAAK,EAAE;IACL;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,yBAAyB,CAAA;IAClC;;;OAGG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAA;IACnC,WAAW,CAAC,EAAE,0BAA0B,GAAG,0BAA0B,EAAE,CAAA;IACvE,oBAAoB,CAAC,EAAE,yBAAyB,CAAA;IAChD,SAAS,EAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,KAAK,IAAI,CAAA;CAC9D,QA4KF"}
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.resolveEtoContainer = resolveEtoContainer;
40
+ exports.workflowIntegrationTestRunner = workflowIntegrationTestRunner;
41
+ const utils_1 = require("@etohq/framework/utils");
42
+ const fs = __importStar(require("fs"));
43
+ const database_1 = require("./database");
44
+ const init_modules_1 = require("./init-modules");
45
+ const mock_event_bus_service_1 = __importDefault(require("./mock-event-bus-service"));
46
+ const module_test_runner_1 = require("./module-test-runner");
47
+ const modules_sdk_1 = require("@etohq/framework/modules-sdk");
48
+ const isRecord = (value) => {
49
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
50
+ };
51
+ const isContainerLike = (value) => {
52
+ return isRecord(value) && typeof value["resolve"] === "function";
53
+ };
54
+ function resolveEtoContainer(etoApp) {
55
+ if (!isRecord(etoApp)) {
56
+ throw new Error("Expected etoApp to be an object.");
57
+ }
58
+ const shared = etoApp["sharedContainer"];
59
+ if (isContainerLike(shared)) {
60
+ return shared;
61
+ }
62
+ const direct = etoApp["container"];
63
+ if (isContainerLike(direct)) {
64
+ return direct;
65
+ }
66
+ const candidates = [];
67
+ const strongCandidates = [];
68
+ for (const value of Object.values(etoApp)) {
69
+ if (!isContainerLike(value)) {
70
+ continue;
71
+ }
72
+ candidates.push(value);
73
+ if (isRecord(value) && "registrations" in value && isRecord(value["registrations"])) {
74
+ strongCandidates.push(value);
75
+ }
76
+ }
77
+ if (strongCandidates.length === 1) {
78
+ return strongCandidates[0];
79
+ }
80
+ if (candidates.length === 1) {
81
+ return candidates[0];
82
+ }
83
+ /**
84
+ * Last resort: allow workflows-sdk to execute with loaded module containers.
85
+ * This is not ideal for direct `container.resolve()` calls in tests, so we keep
86
+ * it as an explicit error instead of silently returning something incorrect.
87
+ */
88
+ throw new Error("Failed to resolve Eto container from initModules().etoApp.");
89
+ }
90
+ function resolveModelsFromResolvePath(moduleResolvePath) {
91
+ const basePath = (0, utils_1.normalizeImportPathWithSource)(moduleResolvePath);
92
+ const modelsPath = fs.existsSync(`${basePath}/models`)
93
+ ? "/models"
94
+ : fs.existsSync(`${basePath}/dist/models`)
95
+ ? "/dist/models"
96
+ : fs.existsSync(`${basePath}/src/models`)
97
+ ? "/src/models"
98
+ : "";
99
+ if (!modelsPath) {
100
+ return [];
101
+ }
102
+ return (0, utils_1.loadModels)(`${basePath}${modelsPath}`);
103
+ }
104
+ function createWorkflowMikroOrmWrapper(options) {
105
+ const discovered = [];
106
+ for (const config of Object.values(options.modules)) {
107
+ const models = config.moduleModels ?? resolveModelsFromResolvePath(config.resolve);
108
+ discovered.push(...models);
109
+ }
110
+ const entities = (0, utils_1.toMikroOrmEntities)(discovered);
111
+ const MikroOrmWrapper = (0, database_1.getMikroOrmWrapper)({
112
+ mikroOrmEntities: entities,
113
+ clientUrl: options.dbConfig.clientUrl,
114
+ schema: options.dbConfig.schema,
115
+ });
116
+ return { MikroOrmWrapper, models: entities };
117
+ }
118
+ function workflowIntegrationTestRunner(input) {
119
+ process.env.LOG_LEVEL = "error";
120
+ const tempName = parseInt(process.env.JEST_WORKER_ID || "1", 10);
121
+ const schema = input.schema ?? "public";
122
+ const dbName = `eto-${input.suiteName.toLowerCase()}-integration-${tempName}`;
123
+ const dbConfig = {
124
+ clientUrl: (0, database_1.getDatabaseURL)(dbName),
125
+ schema,
126
+ debug: input.debug ?? false,
127
+ };
128
+ const connection = utils_1.ModulesSdkUtils.createPgConnection(dbConfig);
129
+ const injectedModulesDefinitionBase = input.injectedModulesDefinition ?? {};
130
+ const { MikroOrmWrapper, models } = createWorkflowMikroOrmWrapper({
131
+ modules: input.modules,
132
+ dbConfig,
133
+ });
134
+ let shutdown = async () => void 0;
135
+ let etoApp = {};
136
+ let container = null;
137
+ const services = {};
138
+ const options = {
139
+ MikroOrmWrapper,
140
+ etoApp: new Proxy({}, {
141
+ get: (_target, prop) => {
142
+ return etoApp?.[prop];
143
+ },
144
+ }),
145
+ container: new Proxy({}, {
146
+ has: (_target, prop) => {
147
+ if (!container) {
148
+ return false;
149
+ }
150
+ return prop in container;
151
+ },
152
+ ownKeys: () => {
153
+ if (!container) {
154
+ return [];
155
+ }
156
+ return Reflect.ownKeys(container);
157
+ },
158
+ getOwnPropertyDescriptor: (_target, prop) => {
159
+ if (!container) {
160
+ return undefined;
161
+ }
162
+ return Object.getOwnPropertyDescriptor(container, prop);
163
+ },
164
+ get: (_target, prop) => {
165
+ if (!container) {
166
+ return undefined;
167
+ }
168
+ const value = container[prop];
169
+ return typeof value === "function" ? value.bind(container) : value;
170
+ },
171
+ }),
172
+ services: services,
173
+ dbConfig: {
174
+ schema,
175
+ clientUrl: dbConfig.clientUrl,
176
+ },
177
+ };
178
+ const beforeEach_ = async () => {
179
+ if (models.length) {
180
+ await MikroOrmWrapper.setupDatabase();
181
+ }
182
+ const injectedDependencies = typeof input.injectedDependencies === "function"
183
+ ? input.injectedDependencies()
184
+ : input.injectedDependencies ?? {};
185
+ const injectedModulesDefinition = {
186
+ ...injectedModulesDefinitionBase,
187
+ ...(0, module_test_runner_1.resolveInjectedModulesDefinition)(injectedDependencies),
188
+ };
189
+ const modulesDefinition = (0, module_test_runner_1.resolveMonorepoModulesDefinition)({
190
+ injectedModulesDefinition,
191
+ });
192
+ const modulesConfig = {};
193
+ for (const [moduleName, config] of Object.entries(input.modules)) {
194
+ const resolvedDefinition = (0, module_test_runner_1.resolveModuleDefinition)({
195
+ moduleName,
196
+ injectedDependencies,
197
+ moduleDefinition: config.moduleDefinition,
198
+ });
199
+ modulesDefinition[moduleName] = resolvedDefinition;
200
+ modulesConfig[moduleName] = {
201
+ definition: resolvedDefinition,
202
+ resolve: config.resolve,
203
+ dependencies: config.moduleDependencies,
204
+ options: {
205
+ database: dbConfig,
206
+ ...(config.moduleOptions ?? {}),
207
+ [utils_1.isSharedConnectionSymbol]: true,
208
+ },
209
+ };
210
+ }
211
+ const remainingInjectedDependencies = { ...injectedDependencies };
212
+ delete remainingInjectedDependencies[utils_1.ContainerRegistrationKeys.CONFIG_MODULE];
213
+ delete remainingInjectedDependencies.configModule;
214
+ const moduleOptions = {
215
+ injectedDependencies: {
216
+ [utils_1.ContainerRegistrationKeys.PG_CONNECTION]: connection,
217
+ [utils_1.Modules.EVENT_BUS]: new mock_event_bus_service_1.default(),
218
+ [utils_1.ContainerRegistrationKeys.LOGGER]: console,
219
+ [utils_1.ContainerRegistrationKeys.CONFIG_MODULE]: (0, module_test_runner_1.buildInjectedConfigModule)({
220
+ modulesConfig,
221
+ modulesDefinition,
222
+ injectedDependencies,
223
+ }),
224
+ ...remainingInjectedDependencies,
225
+ },
226
+ modulesConfig: modulesConfig,
227
+ linkModules: input.linkModules,
228
+ databaseConfig: dbConfig,
229
+ joinerConfig: input.joinerConfig ?? [],
230
+ preventConnectionDestroyWarning: true,
231
+ };
232
+ const output = await (0, init_modules_1.initModules)(moduleOptions);
233
+ shutdown = output.shutdown ?? (async () => void 0);
234
+ etoApp = output.etoApp;
235
+ container = resolveEtoContainer(output.etoApp);
236
+ const appModules = output.etoApp?.modules ?? {};
237
+ for (const moduleName of Object.keys(input.modules)) {
238
+ services[moduleName] = appModules[moduleName];
239
+ }
240
+ };
241
+ const afterEach_ = async () => {
242
+ if (models.length) {
243
+ await MikroOrmWrapper.clearDatabase();
244
+ }
245
+ await shutdown();
246
+ modules_sdk_1.EtoModule.clearInstances();
247
+ etoApp = {};
248
+ container = null;
249
+ for (const key of Object.keys(services)) {
250
+ delete services[key];
251
+ }
252
+ };
253
+ return describe("", () => {
254
+ beforeEach(beforeEach_);
255
+ afterEach(afterEach_);
256
+ afterAll(async () => {
257
+ await connection.context?.destroy();
258
+ await connection.destroy();
259
+ });
260
+ input.testSuite(options);
261
+ });
262
+ }
263
+ //# sourceMappingURL=workflow-test-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-test-runner.js","sourceRoot":"","sources":["../src/workflow-test-runner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etohq/test-utils",
3
- "version": "1.5.3",
3
+ "version": "1.5.4-alpha.0",
4
4
  "description": "Test utils for Eto",
5
5
  "main": "dist/index.js",
6
6
  "repository": {
@@ -31,7 +31,7 @@
31
31
  "pg-god": "1.0.12",
32
32
  "rimraf": "5.0.2",
33
33
  "typescript": "5.8.3",
34
- "@etohq/framework": "1.5.3"
34
+ "@etohq/framework": "1.5.4-alpha.0"
35
35
  },
36
36
  "dependencies": {
37
37
  "@types/express": "4.17.17",
@@ -42,8 +42,8 @@
42
42
  "peerDependencies": {
43
43
  "@mikro-orm/postgresql": "6.4.3",
44
44
  "awilix": "8.0.1",
45
- "@etohq/framework": "1.5.3",
46
- "@etohq/eto": "1.5.3"
45
+ "@etohq/eto": "1.5.4-alpha.0",
46
+ "@etohq/framework": "1.5.4-alpha.0"
47
47
  },
48
48
  "peerDependenciesMeta": {
49
49
  "@etohq/eto": {