@stratal/testing 0.0.13 → 0.0.15

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.
Files changed (155) hide show
  1. package/dist/index.d.mts +1130 -0
  2. package/dist/index.d.mts.map +1 -0
  3. package/dist/index.mjs +1788 -0
  4. package/dist/index.mjs.map +1 -0
  5. package/dist/mocks/index.d.mts +2 -0
  6. package/dist/mocks/index.mjs +2 -0
  7. package/dist/mocks/nodemailer.d.mts +12 -0
  8. package/dist/mocks/nodemailer.d.mts.map +1 -0
  9. package/dist/mocks/nodemailer.mjs +7 -0
  10. package/dist/mocks/nodemailer.mjs.map +1 -0
  11. package/dist/mocks/zenstack-language.d.mts +48 -0
  12. package/dist/mocks/zenstack-language.d.mts.map +1 -0
  13. package/dist/mocks/zenstack-language.mjs +48 -0
  14. package/dist/mocks/zenstack-language.mjs.map +1 -0
  15. package/dist/vitest-plugin/index.d.mts +50 -0
  16. package/dist/vitest-plugin/index.d.mts.map +1 -0
  17. package/dist/vitest-plugin/index.mjs +86 -0
  18. package/dist/vitest-plugin/index.mjs.map +1 -0
  19. package/package.json +21 -19
  20. package/dist/auth/acting-as.d.ts +0 -21
  21. package/dist/auth/acting-as.d.ts.map +0 -1
  22. package/dist/auth/acting-as.js +0 -68
  23. package/dist/auth/acting-as.js.map +0 -1
  24. package/dist/auth/index.d.ts +0 -2
  25. package/dist/auth/index.d.ts.map +0 -1
  26. package/dist/auth/index.js +0 -2
  27. package/dist/auth/index.js.map +0 -1
  28. package/dist/core/env/index.d.ts +0 -2
  29. package/dist/core/env/index.d.ts.map +0 -1
  30. package/dist/core/env/index.js +0 -2
  31. package/dist/core/env/index.js.map +0 -1
  32. package/dist/core/env/test-env.d.ts +0 -9
  33. package/dist/core/env/test-env.d.ts.map +0 -1
  34. package/dist/core/env/test-env.js +0 -14
  35. package/dist/core/env/test-env.js.map +0 -1
  36. package/dist/core/http/fetch-mock.types.d.ts +0 -48
  37. package/dist/core/http/fetch-mock.types.d.ts.map +0 -1
  38. package/dist/core/http/fetch-mock.types.js +0 -2
  39. package/dist/core/http/fetch-mock.types.js.map +0 -1
  40. package/dist/core/http/index.d.ts +0 -6
  41. package/dist/core/http/index.d.ts.map +0 -1
  42. package/dist/core/http/index.js +0 -5
  43. package/dist/core/http/index.js.map +0 -1
  44. package/dist/core/http/mock-fetch.d.ts +0 -88
  45. package/dist/core/http/mock-fetch.d.ts.map +0 -1
  46. package/dist/core/http/mock-fetch.js +0 -111
  47. package/dist/core/http/mock-fetch.js.map +0 -1
  48. package/dist/core/http/test-http-client.d.ts +0 -54
  49. package/dist/core/http/test-http-client.d.ts.map +0 -1
  50. package/dist/core/http/test-http-client.js +0 -75
  51. package/dist/core/http/test-http-client.js.map +0 -1
  52. package/dist/core/http/test-http-request.d.ts +0 -60
  53. package/dist/core/http/test-http-request.d.ts.map +0 -1
  54. package/dist/core/http/test-http-request.js +0 -106
  55. package/dist/core/http/test-http-request.js.map +0 -1
  56. package/dist/core/http/test-response.d.ts +0 -161
  57. package/dist/core/http/test-response.d.ts.map +0 -1
  58. package/dist/core/http/test-response.js +0 -309
  59. package/dist/core/http/test-response.js.map +0 -1
  60. package/dist/core/index.d.ts +0 -7
  61. package/dist/core/index.d.ts.map +0 -1
  62. package/dist/core/index.js +0 -7
  63. package/dist/core/index.js.map +0 -1
  64. package/dist/core/override/index.d.ts +0 -2
  65. package/dist/core/override/index.d.ts.map +0 -1
  66. package/dist/core/override/index.js +0 -2
  67. package/dist/core/override/index.js.map +0 -1
  68. package/dist/core/override/provider-override-builder.d.ts +0 -78
  69. package/dist/core/override/provider-override-builder.d.ts.map +0 -1
  70. package/dist/core/override/provider-override-builder.js +0 -94
  71. package/dist/core/override/provider-override-builder.js.map +0 -1
  72. package/dist/core/sse/index.d.ts +0 -3
  73. package/dist/core/sse/index.d.ts.map +0 -1
  74. package/dist/core/sse/index.js +0 -3
  75. package/dist/core/sse/index.js.map +0 -1
  76. package/dist/core/sse/test-sse-connection.d.ts +0 -61
  77. package/dist/core/sse/test-sse-connection.d.ts.map +0 -1
  78. package/dist/core/sse/test-sse-connection.js +0 -233
  79. package/dist/core/sse/test-sse-connection.js.map +0 -1
  80. package/dist/core/sse/test-sse-request.d.ts +0 -42
  81. package/dist/core/sse/test-sse-request.d.ts.map +0 -1
  82. package/dist/core/sse/test-sse-request.js +0 -76
  83. package/dist/core/sse/test-sse-request.js.map +0 -1
  84. package/dist/core/test.d.ts +0 -48
  85. package/dist/core/test.d.ts.map +0 -1
  86. package/dist/core/test.js +0 -53
  87. package/dist/core/test.js.map +0 -1
  88. package/dist/core/testing-module-builder.d.ts +0 -57
  89. package/dist/core/testing-module-builder.d.ts.map +0 -1
  90. package/dist/core/testing-module-builder.js +0 -109
  91. package/dist/core/testing-module-builder.js.map +0 -1
  92. package/dist/core/testing-module.d.ts +0 -113
  93. package/dist/core/testing-module.d.ts.map +0 -1
  94. package/dist/core/testing-module.js +0 -177
  95. package/dist/core/testing-module.js.map +0 -1
  96. package/dist/core/ws/index.d.ts +0 -3
  97. package/dist/core/ws/index.d.ts.map +0 -1
  98. package/dist/core/ws/index.js +0 -3
  99. package/dist/core/ws/index.js.map +0 -1
  100. package/dist/core/ws/test-ws-connection.d.ts +0 -54
  101. package/dist/core/ws/test-ws-connection.d.ts.map +0 -1
  102. package/dist/core/ws/test-ws-connection.js +0 -119
  103. package/dist/core/ws/test-ws-connection.js.map +0 -1
  104. package/dist/core/ws/test-ws-request.d.ts +0 -43
  105. package/dist/core/ws/test-ws-request.d.ts.map +0 -1
  106. package/dist/core/ws/test-ws-request.js +0 -83
  107. package/dist/core/ws/test-ws-request.js.map +0 -1
  108. package/dist/errors/index.d.ts +0 -3
  109. package/dist/errors/index.d.ts.map +0 -1
  110. package/dist/errors/index.js +0 -3
  111. package/dist/errors/index.js.map +0 -1
  112. package/dist/errors/setup-error.d.ts +0 -9
  113. package/dist/errors/setup-error.d.ts.map +0 -1
  114. package/dist/errors/setup-error.js +0 -11
  115. package/dist/errors/setup-error.js.map +0 -1
  116. package/dist/errors/test-error.d.ts +0 -9
  117. package/dist/errors/test-error.d.ts.map +0 -1
  118. package/dist/errors/test-error.js +0 -15
  119. package/dist/errors/test-error.js.map +0 -1
  120. package/dist/index.d.ts +0 -21
  121. package/dist/index.d.ts.map +0 -1
  122. package/dist/index.js +0 -29
  123. package/dist/index.js.map +0 -1
  124. package/dist/mocks/index.d.ts +0 -3
  125. package/dist/mocks/index.d.ts.map +0 -1
  126. package/dist/mocks/index.js +0 -3
  127. package/dist/mocks/index.js.map +0 -1
  128. package/dist/mocks/nodemailer.d.ts +0 -10
  129. package/dist/mocks/nodemailer.d.ts.map +0 -1
  130. package/dist/mocks/nodemailer.js +0 -9
  131. package/dist/mocks/nodemailer.js.map +0 -1
  132. package/dist/mocks/zenstack-language.d.ts +0 -46
  133. package/dist/mocks/zenstack-language.d.ts.map +0 -1
  134. package/dist/mocks/zenstack-language.js +0 -47
  135. package/dist/mocks/zenstack-language.js.map +0 -1
  136. package/dist/storage/fake-storage.service.d.ts +0 -114
  137. package/dist/storage/fake-storage.service.d.ts.map +0 -1
  138. package/dist/storage/fake-storage.service.js +0 -233
  139. package/dist/storage/fake-storage.service.js.map +0 -1
  140. package/dist/storage/index.d.ts +0 -2
  141. package/dist/storage/index.d.ts.map +0 -1
  142. package/dist/storage/index.js +0 -2
  143. package/dist/storage/index.js.map +0 -1
  144. package/dist/types.d.ts +0 -5
  145. package/dist/types.d.ts.map +0 -1
  146. package/dist/types.js +0 -3
  147. package/dist/types.js.map +0 -1
  148. package/dist/vitest-plugin/index.d.ts +0 -2
  149. package/dist/vitest-plugin/index.d.ts.map +0 -1
  150. package/dist/vitest-plugin/index.js +0 -2
  151. package/dist/vitest-plugin/index.js.map +0 -1
  152. package/dist/vitest-plugin/stratal-test.d.ts +0 -28
  153. package/dist/vitest-plugin/stratal-test.d.ts.map +0 -1
  154. package/dist/vitest-plugin/stratal-test.js +0 -47
  155. package/dist/vitest-plugin/stratal-test.js.map +0 -1
@@ -1,48 +0,0 @@
1
- import { type DynamicModule, type ModuleClass } from 'stratal/module';
2
- import { TestingModuleBuilder, type TestingModuleConfig } from './testing-module-builder';
3
- /**
4
- * Test
5
- *
6
- * Static class for creating testing modules.
7
- * Provides a NestJS-style API for configuring test modules.
8
- *
9
- * @example
10
- * ```typescript
11
- * // In vitest.setup.ts:
12
- * Test.setBaseModules([CoreModule])
13
- *
14
- * // In test files:
15
- * const module = await Test.createTestingModule({
16
- * imports: [RegistrationModule, GeoModule],
17
- * })
18
- * .overrideProvider(EMAIL_TOKENS.EmailService)
19
- * .useValue(mockEmailService)
20
- * .compile()
21
- * ```
22
- */
23
- export declare class Test {
24
- /**
25
- * Base modules to include in all test modules
26
- * Set once in vitest.setup.ts
27
- */
28
- private static baseModules;
29
- /**
30
- * Set base modules to include in all test modules
31
- * Should be called once in vitest.setup.ts
32
- *
33
- * @param modules - Modules to include before test-specific modules (e.g., CoreModule)
34
- */
35
- static setBaseModules(modules: (ModuleClass | DynamicModule)[]): void;
36
- /**
37
- * Get base modules
38
- */
39
- static getBaseModules(): (ModuleClass | DynamicModule)[];
40
- /**
41
- * Create a testing module builder
42
- *
43
- * @param config - Configuration with modules and optional env overrides
44
- * @returns TestingModuleBuilder for configuring and compiling the module
45
- */
46
- static createTestingModule(config: TestingModuleConfig): TestingModuleBuilder;
47
- }
48
- //# sourceMappingURL=test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/core/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEzF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,IAAI;IACf;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW,CAAsC;IAEhE;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,WAAW,GAAG,aAAa,CAAC,EAAE,GAAG,IAAI;IAIrE;;OAEG;IACH,MAAM,CAAC,cAAc,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,EAAE;IAIxD;;;;;OAKG;IACH,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,oBAAoB;CAG9E"}
package/dist/core/test.js DELETED
@@ -1,53 +0,0 @@
1
- import { TestingModuleBuilder } from './testing-module-builder';
2
- /**
3
- * Test
4
- *
5
- * Static class for creating testing modules.
6
- * Provides a NestJS-style API for configuring test modules.
7
- *
8
- * @example
9
- * ```typescript
10
- * // In vitest.setup.ts:
11
- * Test.setBaseModules([CoreModule])
12
- *
13
- * // In test files:
14
- * const module = await Test.createTestingModule({
15
- * imports: [RegistrationModule, GeoModule],
16
- * })
17
- * .overrideProvider(EMAIL_TOKENS.EmailService)
18
- * .useValue(mockEmailService)
19
- * .compile()
20
- * ```
21
- */
22
- export class Test {
23
- /**
24
- * Base modules to include in all test modules
25
- * Set once in vitest.setup.ts
26
- */
27
- static baseModules = [];
28
- /**
29
- * Set base modules to include in all test modules
30
- * Should be called once in vitest.setup.ts
31
- *
32
- * @param modules - Modules to include before test-specific modules (e.g., CoreModule)
33
- */
34
- static setBaseModules(modules) {
35
- this.baseModules = modules;
36
- }
37
- /**
38
- * Get base modules
39
- */
40
- static getBaseModules() {
41
- return this.baseModules;
42
- }
43
- /**
44
- * Create a testing module builder
45
- *
46
- * @param config - Configuration with modules and optional env overrides
47
- * @returns TestingModuleBuilder for configuring and compiling the module
48
- */
49
- static createTestingModule(config) {
50
- return new TestingModuleBuilder(config);
51
- }
52
- }
53
- //# sourceMappingURL=test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/core/test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAA4B,MAAM,0BAA0B,CAAA;AAEzF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,IAAI;IACf;;;OAGG;IACK,MAAM,CAAC,WAAW,GAAoC,EAAE,CAAA;IAEhE;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,OAAwC;QAC5D,IAAI,CAAC,WAAW,GAAG,OAAO,CAAA;IAC5B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc;QACnB,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,mBAAmB,CAAC,MAA2B;QACpD,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAA;IACzC,CAAC"}
@@ -1,57 +0,0 @@
1
- import { ApplicationConfig, type StratalEnv } from 'stratal';
2
- import { InjectionToken, ModuleOptions } from 'stratal/module';
3
- import { ProviderOverrideBuilder, type ProviderOverrideConfig } from './override';
4
- import { TestingModule } from './testing-module';
5
- /**
6
- * Configuration for creating a testing module
7
- *
8
- * Extends ModuleOptions to support all module properties like NestJS.
9
- *
10
- * @example
11
- * ```typescript
12
- * const module = await Test.createTestingModule({
13
- * imports: [RegistrationModule, GeoModule],
14
- * providers: [{ provide: MOCK_TOKEN, useValue: mockValue }],
15
- * controllers: [TestController],
16
- * }).compile()
17
- * ```
18
- */
19
- export interface TestingModuleConfig extends ModuleOptions {
20
- /** Optional environment overrides */
21
- env?: Partial<StratalEnv>;
22
- /** Logging configuration. Defaults: level=ERROR, formatter='json' */
23
- logging?: ApplicationConfig['logging'];
24
- }
25
- /**
26
- * Builder for creating test modules with provider overrides
27
- */
28
- export declare class TestingModuleBuilder {
29
- private config;
30
- private overrides;
31
- constructor(config: TestingModuleConfig);
32
- /**
33
- * Override a provider with a custom implementation
34
- */
35
- overrideProvider<T>(token: InjectionToken<T>): ProviderOverrideBuilder<T>;
36
- /**
37
- * Add a provider override (internal use by ProviderOverrideBuilder)
38
- *
39
- * @internal
40
- */
41
- addProviderOverride<T>(override: ProviderOverrideConfig<T>): this;
42
- /**
43
- * Merge additional environment bindings
44
- */
45
- withEnv(env: Partial<StratalEnv>): this;
46
- /**
47
- * Compile the testing module
48
- *
49
- * Creates the Application, applies overrides, initializes, and returns TestingModule.
50
- */
51
- compile(): Promise<TestingModule>;
52
- /**
53
- * Create a test root module with the given options
54
- */
55
- private createTestRootModule;
56
- }
57
- //# sourceMappingURL=testing-module-builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testing-module-builder.d.ts","sourceRoot":"","sources":["../../src/core/testing-module-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,iBAAiB,EAEjB,KAAK,UAAU,EAChB,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,cAAc,EAAuB,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAInF,OAAO,EAAE,uBAAuB,EAAE,KAAK,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAEjF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,qCAAqC;IACrC,GAAG,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;IACzB,qEAAqE;IACrE,OAAO,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAA;CACvC;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAGnB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,SAAS,CAAuC;gBAEpC,MAAM,EAAE,mBAAmB;IAE/C;;OAEG;IACH,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC;IAIzE;;;;OAIG;IACH,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,IAAI;IAKjE;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAKvC;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IA6DvC;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAK7B"}
@@ -1,109 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { waitUntil } from 'cloudflare:workers';
8
- import { Application, } from 'stratal';
9
- import { LogLevel } from 'stratal/logger';
10
- import { Module } from 'stratal/module';
11
- import { STORAGE_TOKENS } from 'stratal/storage';
12
- import { FakeStorageService } from '../storage';
13
- import { getTestEnv } from './env';
14
- import { ProviderOverrideBuilder } from './override';
15
- import { Test } from './test';
16
- import { TestingModule } from './testing-module';
17
- /**
18
- * Builder for creating test modules with provider overrides
19
- */
20
- export class TestingModuleBuilder {
21
- config;
22
- overrides = [];
23
- constructor(config) {
24
- this.config = config;
25
- }
26
- /**
27
- * Override a provider with a custom implementation
28
- */
29
- overrideProvider(token) {
30
- return new ProviderOverrideBuilder(this, token);
31
- }
32
- /**
33
- * Add a provider override (internal use by ProviderOverrideBuilder)
34
- *
35
- * @internal
36
- */
37
- addProviderOverride(override) {
38
- this.overrides.push(override);
39
- return this;
40
- }
41
- /**
42
- * Merge additional environment bindings
43
- */
44
- withEnv(env) {
45
- this.config.env = { ...this.config.env, ...env };
46
- return this;
47
- }
48
- /**
49
- * Compile the testing module
50
- *
51
- * Creates the Application, applies overrides, initializes, and returns TestingModule.
52
- */
53
- async compile() {
54
- const env = getTestEnv(this.config.env);
55
- const ctx = { waitUntil };
56
- // Build root module from config
57
- const baseModules = Test.getBaseModules();
58
- const allImports = [...baseModules, ...(this.config.imports ?? [])];
59
- const rootModule = this.createTestRootModule({
60
- imports: allImports,
61
- providers: this.config.providers,
62
- controllers: this.config.controllers,
63
- consumers: this.config.consumers,
64
- jobs: this.config.jobs,
65
- });
66
- const app = new Application({
67
- module: rootModule,
68
- logging: {
69
- level: this.config.logging?.level ?? LogLevel.ERROR,
70
- formatter: this.config.logging?.formatter ?? 'pretty',
71
- },
72
- env,
73
- ctx,
74
- });
75
- // Auto-register FakeStorageService (can be overridden by user)
76
- app.container.registerSingleton(STORAGE_TOKENS.StorageService, FakeStorageService);
77
- // Apply user overrides BEFORE initialize
78
- for (const override of this.overrides) {
79
- switch (override.type) {
80
- case 'value':
81
- app.container.registerValue(override.token, override.implementation);
82
- break;
83
- case 'class':
84
- app.container.registerSingleton(override.token, override.implementation);
85
- break;
86
- case 'factory':
87
- app.container.registerFactory(override.token, override.implementation);
88
- break;
89
- case 'existing':
90
- app.container.registerExisting(override.token, override.implementation);
91
- break;
92
- }
93
- }
94
- await app.initialize();
95
- return new TestingModule(app, env, ctx);
96
- }
97
- /**
98
- * Create a test root module with the given options
99
- */
100
- createTestRootModule(options) {
101
- let TestRootModule = class TestRootModule {
102
- };
103
- TestRootModule = __decorate([
104
- Module(options)
105
- ], TestRootModule);
106
- return TestRootModule;
107
- }
108
- }
109
- //# sourceMappingURL=testing-module-builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testing-module-builder.js","sourceRoot":"","sources":["../../src/core/testing-module-builder.ts"],"names":[],"mappings":"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"}
@@ -1,113 +0,0 @@
1
- import type { ConnectionName, DatabaseService } from '@stratal/framework/database';
2
- import type { Application, StratalEnv } from 'stratal';
3
- import { type Container } from 'stratal/di';
4
- import { type InjectionToken } from 'stratal/module';
5
- import type { FakeStorageService } from '../storage';
6
- import type { Seeder } from '../types';
7
- import { TestHttpClient } from './http/test-http-client';
8
- import { TestSseRequest } from './sse/test-sse-request';
9
- import { TestWsRequest } from './ws/test-ws-request';
10
- /**
11
- * TestingModule
12
- *
13
- * Provides access to the test application, container, HTTP client, and utilities.
14
- *
15
- * @example
16
- * ```typescript
17
- * const module = await Test.createTestingModule({
18
- * modules: [RegistrationModule],
19
- * }).compile()
20
- *
21
- * // Make HTTP requests
22
- * const response = await module.http
23
- * .post('/api/v1/register')
24
- * .withBody({ ... })
25
- * .send()
26
- *
27
- * // Access services
28
- * const service = module.get(REGISTRATION_TOKENS.RegistrationService)
29
- *
30
- * // Database utilities
31
- * await module.truncateDb()
32
- * await module.seed(new UserSeeder())
33
- * await module.assertDatabaseHas('user', { email: 'test@example.com' })
34
- *
35
- * // Cleanup
36
- * await module.close()
37
- * ```
38
- */
39
- export declare class TestingModule {
40
- private readonly app;
41
- private readonly env;
42
- private readonly ctx;
43
- private _http;
44
- private readonly _requestContainer;
45
- constructor(app: Application, env: StratalEnv, ctx: ExecutionContext);
46
- /**
47
- * Resolve a service from the container
48
- */
49
- get<T>(token: InjectionToken<T>): T;
50
- /**
51
- * Get HTTP test client for making requests
52
- */
53
- get http(): TestHttpClient;
54
- /**
55
- * Get fake storage service for assertions
56
- */
57
- get storage(): FakeStorageService;
58
- /**
59
- * Create a WebSocket test request builder for the given path
60
- */
61
- ws(path: string): TestWsRequest;
62
- /**
63
- * Create an SSE test request builder for the given path
64
- */
65
- sse(path: string): TestSseRequest;
66
- /**
67
- * Get Application instance
68
- */
69
- get application(): Application;
70
- /**
71
- * Get DI Container (request-scoped)
72
- */
73
- get container(): Container;
74
- /**
75
- * Execute an HTTP request through HonoApp
76
- */
77
- fetch(request: Request): Promise<Response>;
78
- /**
79
- * Run callback in request scope (for DB operations, service access)
80
- */
81
- runInRequestScope<T>(callback: (container: Container) => T | Promise<T>): Promise<T>;
82
- /**
83
- * Get database service instance (resolved in request scope)
84
- */
85
- getDb(): DatabaseService;
86
- getDb<K extends ConnectionName>(name: K): DatabaseService<K>;
87
- /**
88
- * Truncate all non-prisma tables in the database
89
- */
90
- truncateDb(name?: ConnectionName): Promise<void>;
91
- /**
92
- * Run seeders in a database transaction
93
- */
94
- seed(...seeders: Seeder[]): Promise<void>;
95
- seed(name: ConnectionName, ...seeders: Seeder[]): Promise<void>;
96
- /**
97
- * Assert that a record exists in the database
98
- */
99
- assertDatabaseHas(table: string, data: Record<string, unknown>, name?: ConnectionName): Promise<void>;
100
- /**
101
- * Assert that a record does not exist in the database
102
- */
103
- assertDatabaseMissing(table: string, data: Record<string, unknown>, name?: ConnectionName): Promise<void>;
104
- /**
105
- * Assert the number of records in a table
106
- */
107
- assertDatabaseCount(table: string, expected: number, name?: ConnectionName): Promise<void>;
108
- /**
109
- * Cleanup - call in afterAll
110
- */
111
- close(): Promise<void>;
112
- }
113
- //# sourceMappingURL=testing-module.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testing-module.d.ts","sourceRoot":"","sources":["../../src/core/testing-module.ts"],"names":[],"mappings":"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"}
@@ -1,177 +0,0 @@
1
- import { connectionSymbol } from '@stratal/framework/database';
2
- import { DI_TOKENS } from 'stratal/di';
3
- import { STORAGE_TOKENS } from 'stratal/storage';
4
- import { expect } from 'vitest';
5
- import { TestHttpClient } from './http/test-http-client';
6
- import { TestSseRequest } from './sse/test-sse-request';
7
- import { TestWsRequest } from './ws/test-ws-request';
8
- /**
9
- * TestingModule
10
- *
11
- * Provides access to the test application, container, HTTP client, and utilities.
12
- *
13
- * @example
14
- * ```typescript
15
- * const module = await Test.createTestingModule({
16
- * modules: [RegistrationModule],
17
- * }).compile()
18
- *
19
- * // Make HTTP requests
20
- * const response = await module.http
21
- * .post('/api/v1/register')
22
- * .withBody({ ... })
23
- * .send()
24
- *
25
- * // Access services
26
- * const service = module.get(REGISTRATION_TOKENS.RegistrationService)
27
- *
28
- * // Database utilities
29
- * await module.truncateDb()
30
- * await module.seed(new UserSeeder())
31
- * await module.assertDatabaseHas('user', { email: 'test@example.com' })
32
- *
33
- * // Cleanup
34
- * await module.close()
35
- * ```
36
- */
37
- export class TestingModule {
38
- app;
39
- env;
40
- ctx;
41
- _http = null;
42
- _requestContainer;
43
- constructor(app, env, ctx) {
44
- this.app = app;
45
- this.env = env;
46
- this.ctx = ctx;
47
- const mockContext = this.app.createMockRouterContext();
48
- this._requestContainer = this.app.container.createRequestScope(mockContext);
49
- }
50
- /**
51
- * Resolve a service from the container
52
- */
53
- get(token) {
54
- return this._requestContainer.resolve(token);
55
- }
56
- /**
57
- * Get HTTP test client for making requests
58
- */
59
- get http() {
60
- this._http ??= new TestHttpClient(this);
61
- return this._http;
62
- }
63
- /**
64
- * Get fake storage service for assertions
65
- */
66
- get storage() {
67
- return this.get(STORAGE_TOKENS.StorageService);
68
- }
69
- /**
70
- * Create a WebSocket test request builder for the given path
71
- */
72
- ws(path) {
73
- return new TestWsRequest(path, this);
74
- }
75
- /**
76
- * Create an SSE test request builder for the given path
77
- */
78
- sse(path) {
79
- return new TestSseRequest(path, this);
80
- }
81
- /**
82
- * Get Application instance
83
- */
84
- get application() {
85
- return this.app;
86
- }
87
- /**
88
- * Get DI Container (request-scoped)
89
- */
90
- get container() {
91
- return this._requestContainer;
92
- }
93
- /**
94
- * Execute an HTTP request through HonoApp
95
- */
96
- async fetch(request) {
97
- return this.app.hono.fetch(request, this.env, this.ctx);
98
- }
99
- /**
100
- * Run callback in request scope (for DB operations, service access)
101
- */
102
- async runInRequestScope(callback) {
103
- const mockContext = this.app.createMockRouterContext();
104
- return this.app.container.runInRequestScope(mockContext, callback);
105
- }
106
- getDb(name) {
107
- const token = name ? connectionSymbol(name) : DI_TOKENS.Database;
108
- return this._requestContainer.resolve(token);
109
- }
110
- /**
111
- * Truncate all non-prisma tables in the database
112
- */
113
- async truncateDb(name) {
114
- const db = this.getDb(name);
115
- const tables = await db.$queryRaw `
116
- SELECT tablename::text as tablename FROM pg_tables
117
- WHERE schemaname = current_schema()
118
- AND tablename NOT LIKE '_prisma%'
119
- `;
120
- if (tables.length === 0)
121
- return;
122
- const tableList = tables.map((t) => `"${t.tablename}"`).join(', ');
123
- await db.$executeRawUnsafe(`TRUNCATE ${tableList} RESTART IDENTITY CASCADE`);
124
- }
125
- async seed(...args) {
126
- let name;
127
- let seeders;
128
- if (typeof args[0] === 'string') {
129
- name = args[0];
130
- seeders = args.slice(1);
131
- }
132
- else {
133
- seeders = args;
134
- }
135
- const db = this.getDb(name);
136
- await db.$transaction(async (tx) => {
137
- for (const seeder of seeders) {
138
- await seeder.run(tx);
139
- }
140
- });
141
- }
142
- /**
143
- * Assert that a record exists in the database
144
- */
145
- async assertDatabaseHas(table, data, name) {
146
- const db = this.getDb(name);
147
- const model = db[table];
148
- const result = await model.findFirst({ where: data });
149
- expect(result, `Expected ${table} with ${JSON.stringify(data)}`).not.toBeNull();
150
- }
151
- /**
152
- * Assert that a record does not exist in the database
153
- */
154
- async assertDatabaseMissing(table, data, name) {
155
- const db = this.getDb(name);
156
- const model = db[table];
157
- const result = await model.findFirst({ where: data });
158
- expect(result, `Expected ${table} NOT to have ${JSON.stringify(data)}`).toBeNull();
159
- }
160
- /**
161
- * Assert the number of records in a table
162
- */
163
- async assertDatabaseCount(table, expected, name) {
164
- const db = this.getDb(name);
165
- const model = db[table];
166
- const actual = await model.count();
167
- expect(actual, `Expected ${table} count ${expected}, got ${actual}`).toBe(expected);
168
- }
169
- /**
170
- * Cleanup - call in afterAll
171
- */
172
- async close() {
173
- await this._requestContainer.dispose();
174
- await this.app.shutdown();
175
- }
176
- }
177
- //# sourceMappingURL=testing-module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testing-module.js","sourceRoot":"","sources":["../../src/core/testing-module.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export { TestWsRequest } from './test-ws-request';
2
- export { TestWsConnection } from './test-ws-connection';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/ws/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA"}
@@ -1,3 +0,0 @@
1
- export { TestWsRequest } from './test-ws-request';
2
- export { TestWsConnection } from './test-ws-connection';
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/ws/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA"}
@@ -1,54 +0,0 @@
1
- /**
2
- * TestWsConnection
3
- *
4
- * Live WebSocket connection wrapper with assertion helpers for testing.
5
- *
6
- * @example
7
- * ```typescript
8
- * const ws = await module.ws('/ws/chat').connect()
9
- * ws.send('hello')
10
- * await ws.assertMessage('echo:hello')
11
- * ws.close()
12
- * await ws.waitForClose()
13
- * ```
14
- */
15
- export declare class TestWsConnection {
16
- private readonly ws;
17
- private readonly messageQueue;
18
- private messageWaiters;
19
- private closeEvent;
20
- private closeWaiters;
21
- constructor(ws: WebSocket);
22
- /**
23
- * Send a message through the WebSocket
24
- */
25
- send(data: string | ArrayBuffer | Uint8Array): void;
26
- /**
27
- * Close the WebSocket connection
28
- */
29
- close(code?: number, reason?: string): void;
30
- /**
31
- * Wait for the next message, returning its data
32
- */
33
- waitForMessage(timeout?: number): Promise<string | ArrayBuffer>;
34
- /**
35
- * Wait for the connection to close
36
- */
37
- waitForClose(timeout?: number): Promise<{
38
- code?: number;
39
- reason?: string;
40
- }>;
41
- /**
42
- * Assert that the next message equals the expected value
43
- */
44
- assertMessage(expected: string, timeout?: number): Promise<void>;
45
- /**
46
- * Assert that the connection closes, optionally with an expected code
47
- */
48
- assertClosed(expectedCode?: number, timeout?: number): Promise<void>;
49
- /**
50
- * Access the raw Cloudflare WebSocket
51
- */
52
- get raw(): WebSocket;
53
- }
54
- //# sourceMappingURL=test-ws-connection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-ws-connection.d.ts","sourceRoot":"","sources":["../../../src/core/ws/test-ws-connection.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,qBAAa,gBAAgB;IAMhB,OAAO,CAAC,QAAQ,CAAC,EAAE;IAL/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;IAC5D,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,UAAU,CAAkD;IACpE,OAAO,CAAC,YAAY,CAA8D;gBAErD,EAAE,EAAE,SAAS;IAmB1C;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,IAAI;IAInD;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAI3C;;OAEG;IACG,cAAc,CAAC,OAAO,SAAO,GAAG,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC;IAqBnE;;OAEG;IACG,YAAY,CAAC,OAAO,SAAO,GAAG,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAqB/E;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpE;;OAEG;IACG,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxE;;OAEG;IACH,IAAI,GAAG,IAAI,SAAS,CAEnB;CACD"}