@stratal/testing 0.0.2 → 0.0.4

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 (90) hide show
  1. package/CHANGELOG.md +107 -0
  2. package/dist/core/env/index.d.ts +2 -0
  3. package/dist/core/env/index.d.ts.map +1 -0
  4. package/dist/core/env/index.js +2 -0
  5. package/dist/core/env/index.js.map +1 -0
  6. package/dist/core/env/test-env.d.ts +9 -0
  7. package/dist/core/env/test-env.d.ts.map +1 -0
  8. package/dist/core/env/test-env.js +14 -0
  9. package/dist/core/env/test-env.js.map +1 -0
  10. package/dist/core/http/fetch-mock.d.ts +236 -0
  11. package/dist/core/http/fetch-mock.d.ts.map +1 -0
  12. package/dist/core/http/fetch-mock.js +290 -0
  13. package/dist/core/http/fetch-mock.js.map +1 -0
  14. package/dist/core/http/fetch-mock.types.d.ts +48 -0
  15. package/dist/core/http/fetch-mock.types.d.ts.map +1 -0
  16. package/dist/core/http/fetch-mock.types.js +2 -0
  17. package/dist/core/http/fetch-mock.types.js.map +1 -0
  18. package/dist/core/http/index.d.ts +6 -0
  19. package/dist/core/http/index.d.ts.map +1 -0
  20. package/dist/core/http/index.js +5 -0
  21. package/dist/core/http/index.js.map +1 -0
  22. package/dist/core/http/test-http-client.d.ts +54 -0
  23. package/dist/core/http/test-http-client.d.ts.map +1 -0
  24. package/dist/core/http/test-http-client.js +75 -0
  25. package/dist/core/http/test-http-client.js.map +1 -0
  26. package/dist/core/http/test-http-request.d.ts +44 -0
  27. package/dist/core/http/test-http-request.d.ts.map +1 -0
  28. package/dist/core/http/test-http-request.js +75 -0
  29. package/dist/core/http/test-http-request.js.map +1 -0
  30. package/dist/core/http/test-response.d.ts +161 -0
  31. package/dist/core/http/test-response.d.ts.map +1 -0
  32. package/dist/core/http/test-response.js +309 -0
  33. package/dist/core/http/test-response.js.map +1 -0
  34. package/dist/core/index.d.ts +7 -0
  35. package/dist/core/index.d.ts.map +1 -0
  36. package/dist/core/index.js +7 -0
  37. package/dist/core/index.js.map +1 -0
  38. package/dist/core/override/index.d.ts +2 -0
  39. package/dist/core/override/index.d.ts.map +1 -0
  40. package/dist/core/override/index.js +2 -0
  41. package/dist/core/override/index.js.map +1 -0
  42. package/dist/core/override/provider-override-builder.d.ts +77 -0
  43. package/dist/core/override/provider-override-builder.d.ts.map +1 -0
  44. package/dist/core/override/provider-override-builder.js +94 -0
  45. package/dist/core/override/provider-override-builder.js.map +1 -0
  46. package/dist/core/test.d.ts +48 -0
  47. package/dist/core/test.d.ts.map +1 -0
  48. package/dist/core/test.js +53 -0
  49. package/dist/core/test.js.map +1 -0
  50. package/dist/core/testing-module-builder.d.ts +99 -0
  51. package/dist/core/testing-module-builder.d.ts.map +1 -0
  52. package/dist/core/testing-module-builder.js +156 -0
  53. package/dist/core/testing-module-builder.js.map +1 -0
  54. package/dist/core/testing-module.d.ts +79 -0
  55. package/dist/core/testing-module.d.ts.map +1 -0
  56. package/dist/core/testing-module.js +99 -0
  57. package/dist/core/testing-module.js.map +1 -0
  58. package/dist/errors/index.d.ts +3 -0
  59. package/dist/errors/index.d.ts.map +1 -0
  60. package/dist/errors/index.js +3 -0
  61. package/dist/errors/index.js.map +1 -0
  62. package/dist/errors/setup-error.d.ts +9 -0
  63. package/dist/errors/setup-error.d.ts.map +1 -0
  64. package/dist/errors/setup-error.js +11 -0
  65. package/dist/errors/setup-error.js.map +1 -0
  66. package/dist/errors/test-error.d.ts +9 -0
  67. package/dist/errors/test-error.d.ts.map +1 -0
  68. package/dist/errors/test-error.js +15 -0
  69. package/dist/errors/test-error.js.map +1 -0
  70. package/dist/index.d.ts +13 -0
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +2 -3
  73. package/dist/index.js.map +1 -1
  74. package/dist/mocks/index.d.ts +4 -0
  75. package/dist/mocks/index.d.ts.map +1 -0
  76. package/dist/mocks/index.js +4 -0
  77. package/dist/mocks/index.js.map +1 -0
  78. package/dist/mocks/nodemailer.d.ts +10 -0
  79. package/dist/mocks/nodemailer.d.ts.map +1 -0
  80. package/dist/mocks/nodemailer.js +9 -0
  81. package/dist/mocks/nodemailer.js.map +1 -0
  82. package/dist/storage/fake-storage.service.d.ts +114 -0
  83. package/dist/storage/fake-storage.service.d.ts.map +1 -0
  84. package/dist/storage/fake-storage.service.js +233 -0
  85. package/dist/storage/fake-storage.service.js.map +1 -0
  86. package/dist/storage/index.d.ts +2 -0
  87. package/dist/storage/index.d.ts.map +1 -0
  88. package/dist/storage/index.js +2 -0
  89. package/dist/storage/index.js.map +1 -0
  90. package/package.json +10 -8
@@ -0,0 +1,99 @@
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
+ * Provides a NestJS-style fluent API for configuring test modules.
29
+ * Supports all ModuleOptions properties (imports, providers, controllers, consumers, jobs).
30
+ *
31
+ * @example Basic usage
32
+ * ```typescript
33
+ * const module = await Test.createTestingModule({
34
+ * imports: [RegistrationModule],
35
+ * }).compile()
36
+ * ```
37
+ *
38
+ * @example Provider override
39
+ * ```typescript
40
+ * const module = await Test.createTestingModule({
41
+ * imports: [RegistrationModule, GeoModule],
42
+ * })
43
+ * .overrideProvider(EMAIL_TOKENS.EmailService)
44
+ * .useValue(mockEmailService)
45
+ * .compile()
46
+ * ```
47
+ *
48
+ * @example Full ModuleOptions
49
+ * ```typescript
50
+ * const module = await Test.createTestingModule({
51
+ * imports: [RegistrationModule],
52
+ * providers: [{ provide: MOCK_TOKEN, useValue: mockValue }],
53
+ * controllers: [TestController],
54
+ * consumers: [TestConsumer],
55
+ * jobs: [TestJob],
56
+ * }).compile()
57
+ * ```
58
+ */
59
+ export declare class TestingModuleBuilder {
60
+ private config;
61
+ private overrides;
62
+ constructor(config: TestingModuleConfig);
63
+ /**
64
+ * Override a provider with a custom implementation
65
+ *
66
+ * Returns a ProviderOverrideBuilder for specifying the override type.
67
+ *
68
+ * @param token - The injection token to override
69
+ * @returns ProviderOverrideBuilder for chaining useValue/useClass/useFactory
70
+ */
71
+ overrideProvider<T>(token: InjectionToken<T>): ProviderOverrideBuilder<T>;
72
+ /**
73
+ * Add a provider override (internal use by ProviderOverrideBuilder)
74
+ *
75
+ * @internal
76
+ */
77
+ addProviderOverride<T>(override: ProviderOverrideConfig<T>): this;
78
+ /**
79
+ * Merge additional environment bindings
80
+ *
81
+ * @param env - Partial environment to merge
82
+ * @returns This builder for chaining
83
+ */
84
+ withEnv(env: Partial<StratalEnv>): this;
85
+ /**
86
+ * Compile the testing module
87
+ *
88
+ * Creates the Application, applies overrides, initializes, and returns TestingModule.
89
+ * The ModuleRegistry handles all module registrations automatically.
90
+ *
91
+ * @returns Promise<TestingModule> - The compiled testing module
92
+ */
93
+ compile(): Promise<TestingModule>;
94
+ /**
95
+ * Create a test root module with the given options
96
+ */
97
+ private createTestRootModule;
98
+ }
99
+ //# sourceMappingURL=testing-module-builder.d.ts.map
@@ -0,0 +1 @@
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,oBAAoB;IAGnB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,SAAS,CAAuC;gBAEpC,MAAM,EAAE,mBAAmB;IAE/C;;;;;;;OAOG;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;;;;;OAKG;IACH,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAKvC;;;;;;;OAOG;IACG,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAmEvC;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAK7B"}
@@ -0,0 +1,156 @@
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 { createExecutionContext } from 'cloudflare:test';
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
+ * Provides a NestJS-style fluent API for configuring test modules.
21
+ * Supports all ModuleOptions properties (imports, providers, controllers, consumers, jobs).
22
+ *
23
+ * @example Basic usage
24
+ * ```typescript
25
+ * const module = await Test.createTestingModule({
26
+ * imports: [RegistrationModule],
27
+ * }).compile()
28
+ * ```
29
+ *
30
+ * @example Provider override
31
+ * ```typescript
32
+ * const module = await Test.createTestingModule({
33
+ * imports: [RegistrationModule, GeoModule],
34
+ * })
35
+ * .overrideProvider(EMAIL_TOKENS.EmailService)
36
+ * .useValue(mockEmailService)
37
+ * .compile()
38
+ * ```
39
+ *
40
+ * @example Full ModuleOptions
41
+ * ```typescript
42
+ * const module = await Test.createTestingModule({
43
+ * imports: [RegistrationModule],
44
+ * providers: [{ provide: MOCK_TOKEN, useValue: mockValue }],
45
+ * controllers: [TestController],
46
+ * consumers: [TestConsumer],
47
+ * jobs: [TestJob],
48
+ * }).compile()
49
+ * ```
50
+ */
51
+ export class TestingModuleBuilder {
52
+ config;
53
+ overrides = [];
54
+ constructor(config) {
55
+ this.config = config;
56
+ }
57
+ /**
58
+ * Override a provider with a custom implementation
59
+ *
60
+ * Returns a ProviderOverrideBuilder for specifying the override type.
61
+ *
62
+ * @param token - The injection token to override
63
+ * @returns ProviderOverrideBuilder for chaining useValue/useClass/useFactory
64
+ */
65
+ overrideProvider(token) {
66
+ return new ProviderOverrideBuilder(this, token);
67
+ }
68
+ /**
69
+ * Add a provider override (internal use by ProviderOverrideBuilder)
70
+ *
71
+ * @internal
72
+ */
73
+ addProviderOverride(override) {
74
+ this.overrides.push(override);
75
+ return this;
76
+ }
77
+ /**
78
+ * Merge additional environment bindings
79
+ *
80
+ * @param env - Partial environment to merge
81
+ * @returns This builder for chaining
82
+ */
83
+ withEnv(env) {
84
+ this.config.env = { ...this.config.env, ...env };
85
+ return this;
86
+ }
87
+ /**
88
+ * Compile the testing module
89
+ *
90
+ * Creates the Application, applies overrides, initializes, and returns TestingModule.
91
+ * The ModuleRegistry handles all module registrations automatically.
92
+ *
93
+ * @returns Promise<TestingModule> - The compiled testing module
94
+ */
95
+ async compile() {
96
+ // 1. Create environment (cloudflare:test base + overrides)
97
+ const env = getTestEnv(this.config.env);
98
+ // 2. Create ExecutionContext
99
+ const ctx = createExecutionContext();
100
+ // 3. Build root module from config (supports all ModuleOptions)
101
+ const baseModules = Test.getBaseModules();
102
+ const configImports = this.config.imports ?? [];
103
+ const allImports = [...baseModules, ...configImports];
104
+ // Create root module with all config properties
105
+ const rootModule = this.createTestRootModule({
106
+ imports: allImports,
107
+ providers: this.config.providers,
108
+ controllers: this.config.controllers,
109
+ consumers: this.config.consumers,
110
+ jobs: this.config.jobs,
111
+ });
112
+ // 4. Create Application
113
+ const app = new Application(env, ctx, {
114
+ module: rootModule,
115
+ logging: {
116
+ level: this.config.logging?.level ?? LogLevel.ERROR,
117
+ formatter: this.config.logging?.formatter ?? 'pretty',
118
+ },
119
+ });
120
+ // 7. Initialize application - ModuleRegistry handles all module registrations
121
+ await app.initialize();
122
+ // 5. Auto-register FakeStorageService as singleton (can be overridden by user)
123
+ // Must be singleton so files uploaded in setup are available when consumers run
124
+ app.container.registerSingleton(STORAGE_TOKENS.StorageService, FakeStorageService);
125
+ // 6. Apply user overrides BEFORE initialize
126
+ for (const override of this.overrides) {
127
+ switch (override.type) {
128
+ case 'value':
129
+ app.container.registerValue(override.token, override.implementation);
130
+ break;
131
+ case 'class':
132
+ app.container.registerSingleton(override.token, override.implementation);
133
+ break;
134
+ case 'factory':
135
+ app.container.registerFactory(override.token, override.implementation);
136
+ break;
137
+ case 'existing':
138
+ app.container.registerExisting(override.token, override.implementation);
139
+ break;
140
+ }
141
+ }
142
+ return new TestingModule(app, env);
143
+ }
144
+ /**
145
+ * Create a test root module with the given options
146
+ */
147
+ createTestRootModule(options) {
148
+ let TestRootModule = class TestRootModule {
149
+ };
150
+ TestRootModule = __decorate([
151
+ Module(options)
152
+ ], TestRootModule);
153
+ return TestRootModule;
154
+ }
155
+ }
156
+ //# sourceMappingURL=testing-module-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-module-builder.js","sourceRoot":"","sources":["../../src/core/testing-module-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import type { Application, StratalEnv } from 'stratal';
2
+ import { type Container } from 'stratal/di';
3
+ import { type InjectionToken } from 'stratal/module';
4
+ import type { FakeStorageService } from '../storage';
5
+ import { TestHttpClient } from './http/test-http-client';
6
+ /**
7
+ * TestingModule
8
+ *
9
+ * Provides access to the test application, container, HTTP client, and utilities.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const module = await Test.createTestingModule({
14
+ * modules: [RegistrationModule],
15
+ * }).compile()
16
+ *
17
+ * // Make HTTP requests
18
+ * const response = await module.http
19
+ * .post('/api/v1/register')
20
+ * .withBody({ ... })
21
+ * .send()
22
+ *
23
+ * // Access services
24
+ * const service = module.get(REGISTRATION_TOKENS.RegistrationService)
25
+ *
26
+ * // Cleanup
27
+ * await module.close()
28
+ * ```
29
+ */
30
+ export declare class TestingModule {
31
+ private readonly app;
32
+ private readonly env;
33
+ private _http;
34
+ constructor(app: Application, env: StratalEnv);
35
+ /**
36
+ * Resolve a service from the container
37
+ */
38
+ get<T>(token: InjectionToken<T>): T;
39
+ /**
40
+ * Get HTTP test client for making requests
41
+ */
42
+ get http(): TestHttpClient;
43
+ /**
44
+ * Get fake storage service for assertions
45
+ *
46
+ * Provides assertion helpers for testing file storage operations.
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * module.storage.assertExists('path/to/file.pdf')
51
+ * module.storage.assertMissing('deleted/file.pdf')
52
+ * module.storage.clear() // Reset between tests
53
+ * ```
54
+ */
55
+ get storage(): FakeStorageService;
56
+ /**
57
+ * Get Application instance
58
+ */
59
+ get application(): Application;
60
+ /**
61
+ * Get DI Container
62
+ */
63
+ get container(): Container;
64
+ /**
65
+ * Execute an HTTP request through RouterService
66
+ *
67
+ * This is the core method - calls RouterService.fetch() directly, no SELF.fetch()
68
+ */
69
+ fetch(request: Request): Promise<Response>;
70
+ /**
71
+ * Run callback in request scope (for DB operations, service access)
72
+ */
73
+ runInRequestScope<T>(callback: () => T | Promise<T>): Promise<T>;
74
+ /**
75
+ * Cleanup - call in afterAll
76
+ */
77
+ close(): Promise<void>;
78
+ }
79
+ //# sourceMappingURL=testing-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-module.d.ts","sourceRoot":"","sources":["../../src/core/testing-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACtD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAGpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,aAAa;IAItB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJtB,OAAO,CAAC,KAAK,CAA8B;gBAGxB,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,UAAU;IAGlC;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC;IAInC;;OAEG;IACH,IAAI,IAAI,IAAI,cAAc,CAGzB;IAED;;;;;;;;;;;OAWG;IACH,IAAI,OAAO,IAAI,kBAAkB,CAEhC;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED;;;;OAIG;IACG,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKhD;;OAEG;IACG,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAKtE;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
@@ -0,0 +1,99 @@
1
+ import { ROUTER_TOKENS } from 'stratal/router';
2
+ import { STORAGE_TOKENS } from 'stratal/storage';
3
+ import { TestHttpClient } from './http/test-http-client';
4
+ /**
5
+ * TestingModule
6
+ *
7
+ * Provides access to the test application, container, HTTP client, and utilities.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const module = await Test.createTestingModule({
12
+ * modules: [RegistrationModule],
13
+ * }).compile()
14
+ *
15
+ * // Make HTTP requests
16
+ * const response = await module.http
17
+ * .post('/api/v1/register')
18
+ * .withBody({ ... })
19
+ * .send()
20
+ *
21
+ * // Access services
22
+ * const service = module.get(REGISTRATION_TOKENS.RegistrationService)
23
+ *
24
+ * // Cleanup
25
+ * await module.close()
26
+ * ```
27
+ */
28
+ export class TestingModule {
29
+ app;
30
+ env;
31
+ _http = null;
32
+ constructor(app, env) {
33
+ this.app = app;
34
+ this.env = env;
35
+ }
36
+ /**
37
+ * Resolve a service from the container
38
+ */
39
+ get(token) {
40
+ return this.app.container.resolve(token);
41
+ }
42
+ /**
43
+ * Get HTTP test client for making requests
44
+ */
45
+ get http() {
46
+ this._http ??= new TestHttpClient(this);
47
+ return this._http;
48
+ }
49
+ /**
50
+ * Get fake storage service for assertions
51
+ *
52
+ * Provides assertion helpers for testing file storage operations.
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * module.storage.assertExists('path/to/file.pdf')
57
+ * module.storage.assertMissing('deleted/file.pdf')
58
+ * module.storage.clear() // Reset between tests
59
+ * ```
60
+ */
61
+ get storage() {
62
+ return this.get(STORAGE_TOKENS.StorageService);
63
+ }
64
+ /**
65
+ * Get Application instance
66
+ */
67
+ get application() {
68
+ return this.app;
69
+ }
70
+ /**
71
+ * Get DI Container
72
+ */
73
+ get container() {
74
+ return this.app.container;
75
+ }
76
+ /**
77
+ * Execute an HTTP request through RouterService
78
+ *
79
+ * This is the core method - calls RouterService.fetch() directly, no SELF.fetch()
80
+ */
81
+ async fetch(request) {
82
+ const router = this.get(ROUTER_TOKENS.RouterService);
83
+ return router.fetch(request, this.env, this.app.ctx);
84
+ }
85
+ /**
86
+ * Run callback in request scope (for DB operations, service access)
87
+ */
88
+ async runInRequestScope(callback) {
89
+ const mockContext = this.app.createMockRouterContext();
90
+ return this.app.container.runInRequestScope(mockContext, callback);
91
+ }
92
+ /**
93
+ * Cleanup - call in afterAll
94
+ */
95
+ async close() {
96
+ await this.app.shutdown();
97
+ }
98
+ }
99
+ //# sourceMappingURL=testing-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-module.js","sourceRoot":"","sources":["../../src/core/testing-module.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAsB,MAAM,gBAAgB,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,aAAa;IAIL;IACA;IAJX,KAAK,GAA0B,IAAI,CAAA;IAE3C,YACmB,GAAgB,EAChB,GAAe;QADf,QAAG,GAAH,GAAG,CAAa;QAChB,QAAG,GAAH,GAAG,CAAY;IAC9B,CAAC;IAEL;;OAEG;IACH,GAAG,CAAI,KAAwB;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC1C,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,IAAI,CAAC,KAAK,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,GAAG,CAAqB,cAAc,CAAC,cAAc,CAAC,CAAA;IACpE,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAA;IAC3B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,OAAgB;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAgB,aAAa,CAAC,aAAa,CAAC,CAAA;QACnE,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAI,QAA8B;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAA;QACtD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;IACpE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;IAC3B,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export { TestError } from './test-error';
2
+ export { TestSetupError } from './setup-error';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { TestError } from './test-error';
2
+ export { TestSetupError } from './setup-error';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { TestError } from './test-error';
2
+ /**
3
+ * Error thrown when test setup fails.
4
+ * Examples: schema creation failure, migration failure, application bootstrap failure.
5
+ */
6
+ export declare class TestSetupError extends TestError {
7
+ constructor(message: string, cause?: Error);
8
+ }
9
+ //# sourceMappingURL=setup-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-error.d.ts","sourceRoot":"","sources":["../../src/errors/setup-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC;;;GAGG;AACH,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAG3C"}
@@ -0,0 +1,11 @@
1
+ import { TestError } from './test-error';
2
+ /**
3
+ * Error thrown when test setup fails.
4
+ * Examples: schema creation failure, migration failure, application bootstrap failure.
5
+ */
6
+ export class TestSetupError extends TestError {
7
+ constructor(message, cause) {
8
+ super(`Test setup failed: ${message}`, cause);
9
+ }
10
+ }
11
+ //# sourceMappingURL=setup-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-error.js","sourceRoot":"","sources":["../../src/errors/setup-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,SAAS;IAC3C,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC,sBAAsB,OAAO,EAAE,EAAE,KAAK,CAAC,CAAA;IAC/C,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Base error class for all test framework errors.
3
+ * Extends from Error and allows easy identification via `instanceof`.
4
+ */
5
+ export declare class TestError extends Error {
6
+ readonly cause?: Error | undefined;
7
+ constructor(message: string, cause?: Error | undefined);
8
+ }
9
+ //# sourceMappingURL=test-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-error.d.ts","sourceRoot":"","sources":["../../src/errors/test-error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,SAAU,SAAQ,KAAK;aAGhB,KAAK,CAAC,EAAE,KAAK;gBAD7B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,KAAK,YAAA;CAQhC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Base error class for all test framework errors.
3
+ * Extends from Error and allows easy identification via `instanceof`.
4
+ */
5
+ export class TestError extends Error {
6
+ cause;
7
+ constructor(message, cause) {
8
+ super(message);
9
+ this.cause = cause;
10
+ this.name = 'TestError';
11
+ // Maintain proper stack trace
12
+ Error.captureStackTrace(this, this.constructor);
13
+ }
14
+ }
15
+ //# sourceMappingURL=test-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-error.js","sourceRoot":"","sources":["../../src/errors/test-error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IAGhB;IAFlB,YACE,OAAe,EACC,KAAa;QAE7B,KAAK,CAAC,OAAO,CAAC,CAAA;QAFE,UAAK,GAAL,KAAK,CAAQ;QAG7B,IAAI,CAAC,IAAI,GAAG,WAAW,CAAA;QAEvB,8BAA8B;QAC9B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;IACjD,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ export { ProviderOverrideBuilder, type ProviderOverrideConfig } from './core/override';
2
+ export { Test } from './core/test';
3
+ export { TestingModule } from './core/testing-module';
4
+ export { TestingModuleBuilder, type TestingModuleConfig } from './core/testing-module-builder';
5
+ export { createFetchMock, FetchMock } from './core/http/fetch-mock';
6
+ export type { MockErrorOptions, MockJsonOptions } from './core/http/fetch-mock.types';
7
+ export { TestHttpClient } from './core/http/test-http-client';
8
+ export { TestHttpRequest } from './core/http/test-http-request';
9
+ export { TestResponse } from './core/http/test-response';
10
+ export { FakeStorageService, type StoredFile } from './storage';
11
+ export { getTestEnv } from './core/env';
12
+ export { TestError, TestSetupError } from './errors';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAA;AAG1B,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAC9F,OAAO,EAAE,uBAAuB,EAAE,KAAK,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAGtF,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACnE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAGrF,OAAO,EAAE,kBAAkB,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAA;AAG/D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAGvC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,KAAK,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACtF,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAG9F,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACnE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAGxD,OAAO,EAAE,kBAAkB,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAA;AAG/D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAGvC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA"}
package/dist/index.js CHANGED
@@ -1,14 +1,13 @@
1
- import 'stratal/polyfills';
2
1
  // Core Testing
2
+ export { ProviderOverrideBuilder } from './core/override';
3
3
  export { Test } from './core/test';
4
4
  export { TestingModule } from './core/testing-module';
5
5
  export { TestingModuleBuilder } from './core/testing-module-builder';
6
- export { ProviderOverrideBuilder } from './core/override';
7
6
  // HTTP Testing
7
+ export { createFetchMock, FetchMock } from './core/http/fetch-mock';
8
8
  export { TestHttpClient } from './core/http/test-http-client';
9
9
  export { TestHttpRequest } from './core/http/test-http-request';
10
10
  export { TestResponse } from './core/http/test-response';
11
- export { FetchMock, createFetchMock } from './core/http/fetch-mock';
12
11
  // Storage
13
12
  export { FakeStorageService } from './storage';
14
13
  // Environment utilities
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAA;AAE1B,eAAe;AACf,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAA4B,MAAM,+BAA+B,CAAA;AAC9F,OAAO,EAAE,uBAAuB,EAA+B,MAAM,iBAAiB,CAAA;AAEtF,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAGnE,UAAU;AACV,OAAO,EAAE,kBAAkB,EAAmB,MAAM,WAAW,CAAA;AAE/D,wBAAwB;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,uBAAuB,EAA+B,MAAM,iBAAiB,CAAA;AACtF,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAA4B,MAAM,+BAA+B,CAAA;AAE9F,eAAe;AACf,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,UAAU;AACV,OAAO,EAAE,kBAAkB,EAAmB,MAAM,WAAW,CAAA;AAE/D,wBAAwB;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './nodemailer';
2
+ export { createMock } from '@golevelup/ts-vitest';
3
+ export type { DeepMocked, PartialFuncReturn } from '@golevelup/ts-vitest';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAG5B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './nodemailer';
2
+ // Deep mocking utilities from @golevelup/ts-vitest
3
+ export { createMock } from '@golevelup/ts-vitest';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAE5B,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA"}
@@ -0,0 +1,10 @@
1
+ declare const _default: {
2
+ createTransport: () => {
3
+ sendMail: () => Promise<{}>;
4
+ };
5
+ };
6
+ export default _default;
7
+ export declare const createTransport: () => {
8
+ sendMail: () => Promise<{}>;
9
+ };
10
+ //# sourceMappingURL=nodemailer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodemailer.d.ts","sourceRoot":"","sources":["../../src/mocks/nodemailer.ts"],"names":[],"mappings":";;;;;AAAA,wBAIC;AAED,eAAO,MAAM,eAAe;;CAE1B,CAAA"}
@@ -0,0 +1,9 @@
1
+ export default {
2
+ createTransport: () => ({
3
+ sendMail: () => Promise.resolve({}),
4
+ }),
5
+ };
6
+ export const createTransport = () => ({
7
+ sendMail: () => Promise.resolve({}),
8
+ });
9
+ //# sourceMappingURL=nodemailer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodemailer.js","sourceRoot":"","sources":["../../src/mocks/nodemailer.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;QACtB,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;KACpC,CAAC;CACH,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,CAAC;IACpC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;CACpC,CAAC,CAAA"}