@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.
- package/dist/index.d.mts +1130 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +1788 -0
- package/dist/index.mjs.map +1 -0
- package/dist/mocks/index.d.mts +2 -0
- package/dist/mocks/index.mjs +2 -0
- package/dist/mocks/nodemailer.d.mts +12 -0
- package/dist/mocks/nodemailer.d.mts.map +1 -0
- package/dist/mocks/nodemailer.mjs +7 -0
- package/dist/mocks/nodemailer.mjs.map +1 -0
- package/dist/mocks/zenstack-language.d.mts +48 -0
- package/dist/mocks/zenstack-language.d.mts.map +1 -0
- package/dist/mocks/zenstack-language.mjs +48 -0
- package/dist/mocks/zenstack-language.mjs.map +1 -0
- package/dist/vitest-plugin/index.d.mts +50 -0
- package/dist/vitest-plugin/index.d.mts.map +1 -0
- package/dist/vitest-plugin/index.mjs +86 -0
- package/dist/vitest-plugin/index.mjs.map +1 -0
- package/package.json +21 -19
- package/dist/auth/acting-as.d.ts +0 -21
- package/dist/auth/acting-as.d.ts.map +0 -1
- package/dist/auth/acting-as.js +0 -68
- package/dist/auth/acting-as.js.map +0 -1
- package/dist/auth/index.d.ts +0 -2
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -2
- package/dist/auth/index.js.map +0 -1
- package/dist/core/env/index.d.ts +0 -2
- package/dist/core/env/index.d.ts.map +0 -1
- package/dist/core/env/index.js +0 -2
- package/dist/core/env/index.js.map +0 -1
- package/dist/core/env/test-env.d.ts +0 -9
- package/dist/core/env/test-env.d.ts.map +0 -1
- package/dist/core/env/test-env.js +0 -14
- package/dist/core/env/test-env.js.map +0 -1
- package/dist/core/http/fetch-mock.types.d.ts +0 -48
- package/dist/core/http/fetch-mock.types.d.ts.map +0 -1
- package/dist/core/http/fetch-mock.types.js +0 -2
- package/dist/core/http/fetch-mock.types.js.map +0 -1
- package/dist/core/http/index.d.ts +0 -6
- package/dist/core/http/index.d.ts.map +0 -1
- package/dist/core/http/index.js +0 -5
- package/dist/core/http/index.js.map +0 -1
- package/dist/core/http/mock-fetch.d.ts +0 -88
- package/dist/core/http/mock-fetch.d.ts.map +0 -1
- package/dist/core/http/mock-fetch.js +0 -111
- package/dist/core/http/mock-fetch.js.map +0 -1
- package/dist/core/http/test-http-client.d.ts +0 -54
- package/dist/core/http/test-http-client.d.ts.map +0 -1
- package/dist/core/http/test-http-client.js +0 -75
- package/dist/core/http/test-http-client.js.map +0 -1
- package/dist/core/http/test-http-request.d.ts +0 -60
- package/dist/core/http/test-http-request.d.ts.map +0 -1
- package/dist/core/http/test-http-request.js +0 -106
- package/dist/core/http/test-http-request.js.map +0 -1
- package/dist/core/http/test-response.d.ts +0 -161
- package/dist/core/http/test-response.d.ts.map +0 -1
- package/dist/core/http/test-response.js +0 -309
- package/dist/core/http/test-response.js.map +0 -1
- package/dist/core/index.d.ts +0 -7
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -7
- package/dist/core/index.js.map +0 -1
- package/dist/core/override/index.d.ts +0 -2
- package/dist/core/override/index.d.ts.map +0 -1
- package/dist/core/override/index.js +0 -2
- package/dist/core/override/index.js.map +0 -1
- package/dist/core/override/provider-override-builder.d.ts +0 -78
- package/dist/core/override/provider-override-builder.d.ts.map +0 -1
- package/dist/core/override/provider-override-builder.js +0 -94
- package/dist/core/override/provider-override-builder.js.map +0 -1
- package/dist/core/sse/index.d.ts +0 -3
- package/dist/core/sse/index.d.ts.map +0 -1
- package/dist/core/sse/index.js +0 -3
- package/dist/core/sse/index.js.map +0 -1
- package/dist/core/sse/test-sse-connection.d.ts +0 -61
- package/dist/core/sse/test-sse-connection.d.ts.map +0 -1
- package/dist/core/sse/test-sse-connection.js +0 -233
- package/dist/core/sse/test-sse-connection.js.map +0 -1
- package/dist/core/sse/test-sse-request.d.ts +0 -42
- package/dist/core/sse/test-sse-request.d.ts.map +0 -1
- package/dist/core/sse/test-sse-request.js +0 -76
- package/dist/core/sse/test-sse-request.js.map +0 -1
- package/dist/core/test.d.ts +0 -48
- package/dist/core/test.d.ts.map +0 -1
- package/dist/core/test.js +0 -53
- package/dist/core/test.js.map +0 -1
- package/dist/core/testing-module-builder.d.ts +0 -57
- package/dist/core/testing-module-builder.d.ts.map +0 -1
- package/dist/core/testing-module-builder.js +0 -109
- package/dist/core/testing-module-builder.js.map +0 -1
- package/dist/core/testing-module.d.ts +0 -113
- package/dist/core/testing-module.d.ts.map +0 -1
- package/dist/core/testing-module.js +0 -177
- package/dist/core/testing-module.js.map +0 -1
- package/dist/core/ws/index.d.ts +0 -3
- package/dist/core/ws/index.d.ts.map +0 -1
- package/dist/core/ws/index.js +0 -3
- package/dist/core/ws/index.js.map +0 -1
- package/dist/core/ws/test-ws-connection.d.ts +0 -54
- package/dist/core/ws/test-ws-connection.d.ts.map +0 -1
- package/dist/core/ws/test-ws-connection.js +0 -119
- package/dist/core/ws/test-ws-connection.js.map +0 -1
- package/dist/core/ws/test-ws-request.d.ts +0 -43
- package/dist/core/ws/test-ws-request.d.ts.map +0 -1
- package/dist/core/ws/test-ws-request.js +0 -83
- package/dist/core/ws/test-ws-request.js.map +0 -1
- package/dist/errors/index.d.ts +0 -3
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js +0 -3
- package/dist/errors/index.js.map +0 -1
- package/dist/errors/setup-error.d.ts +0 -9
- package/dist/errors/setup-error.d.ts.map +0 -1
- package/dist/errors/setup-error.js +0 -11
- package/dist/errors/setup-error.js.map +0 -1
- package/dist/errors/test-error.d.ts +0 -9
- package/dist/errors/test-error.d.ts.map +0 -1
- package/dist/errors/test-error.js +0 -15
- package/dist/errors/test-error.js.map +0 -1
- package/dist/index.d.ts +0 -21
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -29
- package/dist/index.js.map +0 -1
- package/dist/mocks/index.d.ts +0 -3
- package/dist/mocks/index.d.ts.map +0 -1
- package/dist/mocks/index.js +0 -3
- package/dist/mocks/index.js.map +0 -1
- package/dist/mocks/nodemailer.d.ts +0 -10
- package/dist/mocks/nodemailer.d.ts.map +0 -1
- package/dist/mocks/nodemailer.js +0 -9
- package/dist/mocks/nodemailer.js.map +0 -1
- package/dist/mocks/zenstack-language.d.ts +0 -46
- package/dist/mocks/zenstack-language.d.ts.map +0 -1
- package/dist/mocks/zenstack-language.js +0 -47
- package/dist/mocks/zenstack-language.js.map +0 -1
- package/dist/storage/fake-storage.service.d.ts +0 -114
- package/dist/storage/fake-storage.service.d.ts.map +0 -1
- package/dist/storage/fake-storage.service.js +0 -233
- package/dist/storage/fake-storage.service.js.map +0 -1
- package/dist/storage/index.d.ts +0 -2
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js +0 -2
- package/dist/storage/index.js.map +0 -1
- package/dist/types.d.ts +0 -5
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
- package/dist/vitest-plugin/index.d.ts +0 -2
- package/dist/vitest-plugin/index.d.ts.map +0 -1
- package/dist/vitest-plugin/index.js +0 -2
- package/dist/vitest-plugin/index.js.map +0 -1
- package/dist/vitest-plugin/stratal-test.d.ts +0 -28
- package/dist/vitest-plugin/stratal-test.d.ts.map +0 -1
- package/dist/vitest-plugin/stratal-test.js +0 -47
- package/dist/vitest-plugin/stratal-test.js.map +0 -1
package/dist/core/test.d.ts
DELETED
|
@@ -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
|
package/dist/core/test.d.ts.map
DELETED
|
@@ -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
|
package/dist/core/test.js.map
DELETED
|
@@ -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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"}
|
package/dist/core/ws/index.d.ts
DELETED
|
@@ -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"}
|
package/dist/core/ws/index.js
DELETED
|
@@ -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"}
|