@solidxai/core 0.1.1 → 0.1.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.
- package/dist/commands/run-tests.command.d.ts +37 -0
- package/dist/commands/run-tests.command.d.ts.map +1 -0
- package/dist/commands/run-tests.command.js +345 -0
- package/dist/commands/run-tests.command.js.map +1 -0
- package/dist/commands/test-data.command.d.ts +6 -6
- package/dist/commands/test-data.command.d.ts.map +1 -1
- package/dist/commands/test-data.command.js +25 -25
- package/dist/commands/test-data.command.js.map +1 -1
- package/dist/commands/test.command.d.ts +5 -0
- package/dist/commands/test.command.d.ts.map +1 -0
- package/dist/commands/test.command.js +26 -0
- package/dist/commands/test.command.js.map +1 -0
- package/dist/controllers/service.controller.d.ts +0 -9
- package/dist/controllers/service.controller.d.ts.map +1 -1
- package/dist/controllers/service.controller.js +0 -45
- package/dist/controllers/service.controller.js.map +1 -1
- package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
- package/dist/dtos/basic-filters.dto.js.map +1 -1
- package/dist/dtos/create-user.dto.d.ts +1 -0
- package/dist/dtos/create-user.dto.d.ts.map +1 -1
- package/dist/dtos/create-user.dto.js +2 -1
- package/dist/dtos/create-user.dto.js.map +1 -1
- package/dist/helpers/schematic.service.js +1 -1
- package/dist/helpers/schematic.service.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +3 -21
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/module-test-data.service.d.ts.map +1 -1
- package/dist/seeders/module-test-data.service.js +3 -3
- package/dist/seeders/module-test-data.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +34 -9
- package/dist/services/chatter-message.service.d.ts +2 -0
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +18 -2
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +2 -1
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/module-metadata.service.d.ts.map +1 -1
- package/dist/services/module-metadata.service.js +2 -1
- package/dist/services/module-metadata.service.js.map +1 -1
- package/dist/services/queues/common.d.ts +3 -0
- package/dist/services/queues/common.d.ts.map +1 -0
- package/dist/services/queues/common.js +39 -0
- package/dist/services/queues/common.js.map +1 -0
- package/dist/services/queues/database-publisher.service.d.ts.map +1 -1
- package/dist/services/queues/database-publisher.service.js +3 -1
- package/dist/services/queues/database-publisher.service.js.map +1 -1
- package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/database-subscriber.service.js +5 -2
- package/dist/services/queues/database-subscriber.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-publisher.service.d.ts.map +1 -1
- package/dist/services/queues/rabbitmq-publisher.service.js +13 -6
- package/dist/services/queues/rabbitmq-publisher.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.d.ts +14 -1
- package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.js +197 -65
- package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +4 -0
- package/dist/solid-core.module.js.map +1 -1
- package/dist/testing/__examples__/register-example-specs.d.ts +3 -0
- package/dist/testing/__examples__/register-example-specs.d.ts.map +1 -0
- package/dist/testing/__examples__/register-example-specs.js +8 -0
- package/dist/testing/__examples__/register-example-specs.js.map +1 -0
- package/dist/testing/__examples__/specs/custom-health.spec.d.ts +17 -0
- package/dist/testing/__examples__/specs/custom-health.spec.d.ts.map +1 -0
- package/dist/testing/__examples__/specs/custom-health.spec.js +30 -0
- package/dist/testing/__examples__/specs/custom-health.spec.js.map +1 -0
- package/dist/testing/adapters/api/api-adapter.d.ts +9 -0
- package/dist/testing/adapters/api/api-adapter.d.ts.map +1 -0
- package/dist/testing/adapters/api/api-adapter.js +76 -0
- package/dist/testing/adapters/api/api-adapter.js.map +1 -0
- package/dist/testing/adapters/api/api.types.d.ts +14 -0
- package/dist/testing/adapters/api/api.types.d.ts.map +1 -0
- package/dist/testing/adapters/api/api.types.js +3 -0
- package/dist/testing/adapters/api/api.types.js.map +1 -0
- package/dist/testing/adapters/ui/playwright-adapter.d.ts +14 -0
- package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -0
- package/dist/testing/adapters/ui/playwright-adapter.js +47 -0
- package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -0
- package/dist/testing/adapters/ui/ui.types.d.ts +5 -0
- package/dist/testing/adapters/ui/ui.types.d.ts.map +1 -0
- package/dist/testing/adapters/ui/ui.types.js +3 -0
- package/dist/testing/adapters/ui/ui.types.js.map +1 -0
- package/dist/testing/contracts/runtime-context.types.d.ts +35 -0
- package/dist/testing/contracts/runtime-context.types.d.ts.map +1 -0
- package/dist/testing/contracts/runtime-context.types.js +3 -0
- package/dist/testing/contracts/runtime-context.types.js.map +1 -0
- package/dist/testing/contracts/test-spec.types.d.ts +21 -0
- package/dist/testing/contracts/test-spec.types.d.ts.map +1 -0
- package/dist/testing/contracts/test-spec.types.js +3 -0
- package/dist/testing/contracts/test-spec.types.js.map +1 -0
- package/dist/testing/contracts/testing-metadata.types.d.ts +41 -0
- package/dist/testing/contracts/testing-metadata.types.d.ts.map +1 -0
- package/dist/testing/contracts/testing-metadata.types.js +3 -0
- package/dist/testing/contracts/testing-metadata.types.js.map +1 -0
- package/dist/testing/core/interpolation.d.ts +4 -0
- package/dist/testing/core/interpolation.d.ts.map +1 -0
- package/dist/testing/core/interpolation.js +180 -0
- package/dist/testing/core/interpolation.js.map +1 -0
- package/dist/testing/core/normalize-steps.d.ts +7 -0
- package/dist/testing/core/normalize-steps.d.ts.map +1 -0
- package/dist/testing/core/normalize-steps.js +20 -0
- package/dist/testing/core/normalize-steps.js.map +1 -0
- package/dist/testing/core/resource-store.d.ts +8 -0
- package/dist/testing/core/resource-store.d.ts.map +1 -0
- package/dist/testing/core/resource-store.js +41 -0
- package/dist/testing/core/resource-store.js.map +1 -0
- package/dist/testing/core/spec-registry.d.ts +10 -0
- package/dist/testing/core/spec-registry.d.ts.map +1 -0
- package/dist/testing/core/spec-registry.js +32 -0
- package/dist/testing/core/spec-registry.js.map +1 -0
- package/dist/testing/core/step-registry.d.ts +10 -0
- package/dist/testing/core/step-registry.d.ts.map +1 -0
- package/dist/testing/core/step-registry.js +26 -0
- package/dist/testing/core/step-registry.js.map +1 -0
- package/dist/testing/core/testing-engine.d.ts +14 -0
- package/dist/testing/core/testing-engine.d.ts.map +1 -0
- package/dist/testing/core/testing-engine.js +97 -0
- package/dist/testing/core/testing-engine.js.map +1 -0
- package/dist/testing/core/timeout.d.ts +2 -0
- package/dist/testing/core/timeout.d.ts.map +1 -0
- package/dist/testing/core/timeout.js +18 -0
- package/dist/testing/core/timeout.js.map +1 -0
- package/dist/testing/reporter/attachments.d.ts +4 -0
- package/dist/testing/reporter/attachments.d.ts.map +1 -0
- package/dist/testing/reporter/attachments.js +25 -0
- package/dist/testing/reporter/attachments.js.map +1 -0
- package/dist/testing/reporter/console-reporter.d.ts +45 -0
- package/dist/testing/reporter/console-reporter.d.ts.map +1 -0
- package/dist/testing/reporter/console-reporter.js +189 -0
- package/dist/testing/reporter/console-reporter.js.map +1 -0
- package/dist/testing/reporter/reporter.types.d.ts +37 -0
- package/dist/testing/reporter/reporter.types.d.ts.map +1 -0
- package/dist/testing/reporter/reporter.types.js +3 -0
- package/dist/testing/reporter/reporter.types.js.map +1 -0
- package/dist/testing/runner/lifecycle.d.ts +9 -0
- package/dist/testing/runner/lifecycle.d.ts.map +1 -0
- package/dist/testing/runner/lifecycle.js +33 -0
- package/dist/testing/runner/lifecycle.js.map +1 -0
- package/dist/testing/runner/run-from-metadata.d.ts +24 -0
- package/dist/testing/runner/run-from-metadata.d.ts.map +1 -0
- package/dist/testing/runner/run-from-metadata.js +70 -0
- package/dist/testing/runner/run-from-metadata.js.map +1 -0
- package/dist/testing/runner/scenario-filter.d.ts +9 -0
- package/dist/testing/runner/scenario-filter.d.ts.map +1 -0
- package/dist/testing/runner/scenario-filter.js +22 -0
- package/dist/testing/runner/scenario-filter.js.map +1 -0
- package/dist/testing/steps/api/auth.step.d.ts +3 -0
- package/dist/testing/steps/api/auth.step.d.ts.map +1 -0
- package/dist/testing/steps/api/auth.step.js +38 -0
- package/dist/testing/steps/api/auth.step.js.map +1 -0
- package/dist/testing/steps/api/index.d.ts +3 -0
- package/dist/testing/steps/api/index.d.ts.map +1 -0
- package/dist/testing/steps/api/index.js +10 -0
- package/dist/testing/steps/api/index.js.map +1 -0
- package/dist/testing/steps/api/request.step.d.ts +3 -0
- package/dist/testing/steps/api/request.step.d.ts.map +1 -0
- package/dist/testing/steps/api/request.step.js +281 -0
- package/dist/testing/steps/api/request.step.js.map +1 -0
- package/dist/testing/steps/assert/http.step.d.ts +3 -0
- package/dist/testing/steps/assert/http.step.d.ts.map +1 -0
- package/dist/testing/steps/assert/http.step.js +27 -0
- package/dist/testing/steps/assert/http.step.js.map +1 -0
- package/dist/testing/steps/assert/index.d.ts +3 -0
- package/dist/testing/steps/assert/index.d.ts.map +1 -0
- package/dist/testing/steps/assert/index.js +12 -0
- package/dist/testing/steps/assert/index.js.map +1 -0
- package/dist/testing/steps/assert/jsonpath.step.d.ts +3 -0
- package/dist/testing/steps/assert/jsonpath.step.d.ts.map +1 -0
- package/dist/testing/steps/assert/jsonpath.step.js +40 -0
- package/dist/testing/steps/assert/jsonpath.step.js.map +1 -0
- package/dist/testing/steps/assert/primitives.step.d.ts +3 -0
- package/dist/testing/steps/assert/primitives.step.d.ts.map +1 -0
- package/dist/testing/steps/assert/primitives.step.js +43 -0
- package/dist/testing/steps/assert/primitives.step.js.map +1 -0
- package/dist/testing/steps/test/index.d.ts +3 -0
- package/dist/testing/steps/test/index.d.ts.map +1 -0
- package/dist/testing/steps/test/index.js +8 -0
- package/dist/testing/steps/test/index.js.map +1 -0
- package/dist/testing/steps/test/test-spec.step.d.ts +3 -0
- package/dist/testing/steps/test/test-spec.step.d.ts.map +1 -0
- package/dist/testing/steps/test/test-spec.step.js +41 -0
- package/dist/testing/steps/test/test-spec.step.js.map +1 -0
- package/dist/testing/steps/ui/actions.step.d.ts +3 -0
- package/dist/testing/steps/ui/actions.step.d.ts.map +1 -0
- package/dist/testing/steps/ui/actions.step.js +31 -0
- package/dist/testing/steps/ui/actions.step.js.map +1 -0
- package/dist/testing/steps/ui/assertions.step.d.ts +3 -0
- package/dist/testing/steps/ui/assertions.step.d.ts.map +1 -0
- package/dist/testing/steps/ui/assertions.step.js +41 -0
- package/dist/testing/steps/ui/assertions.step.js.map +1 -0
- package/dist/testing/steps/ui/form.step.d.ts +3 -0
- package/dist/testing/steps/ui/form.step.d.ts.map +1 -0
- package/dist/testing/steps/ui/form.step.js +34 -0
- package/dist/testing/steps/ui/form.step.js.map +1 -0
- package/dist/testing/steps/ui/index.d.ts +3 -0
- package/dist/testing/steps/ui/index.d.ts.map +1 -0
- package/dist/testing/steps/ui/index.js +14 -0
- package/dist/testing/steps/ui/index.js.map +1 -0
- package/dist/testing/steps/ui/navigation.step.d.ts +3 -0
- package/dist/testing/steps/ui/navigation.step.d.ts.map +1 -0
- package/dist/testing/steps/ui/navigation.step.js +39 -0
- package/dist/testing/steps/ui/navigation.step.js.map +1 -0
- package/dist/testing/steps/util/index.d.ts +3 -0
- package/dist/testing/steps/util/index.d.ts.map +1 -0
- package/dist/testing/steps/util/index.js +12 -0
- package/dist/testing/steps/util/index.js.map +1 -0
- package/dist/testing/steps/util/log.step.d.ts +3 -0
- package/dist/testing/steps/util/log.step.d.ts.map +1 -0
- package/dist/testing/steps/util/log.step.js +18 -0
- package/dist/testing/steps/util/log.step.js.map +1 -0
- package/dist/testing/steps/util/require.step.d.ts +3 -0
- package/dist/testing/steps/util/require.step.d.ts.map +1 -0
- package/dist/testing/steps/util/require.step.js +16 -0
- package/dist/testing/steps/util/require.step.js.map +1 -0
- package/dist/testing/steps/util/sleep.step.d.ts +3 -0
- package/dist/testing/steps/util/sleep.step.d.ts.map +1 -0
- package/dist/testing/steps/util/sleep.step.js +13 -0
- package/dist/testing/steps/util/sleep.step.js.map +1 -0
- package/docs/test-data-workflow.md +51 -11
- package/package.json +4 -2
- package/src/commands/run-tests.command.ts +278 -0
- package/src/commands/test-data.command.ts +26 -26
- package/src/commands/test.command.ts +14 -0
- package/src/controllers/service.controller.ts +58 -59
- package/src/dtos/basic-filters.dto.ts +0 -2
- package/src/dtos/create-user.dto.ts +1 -0
- package/src/helpers/schematic.service.ts +1 -1
- package/src/index.ts +3 -0
- package/src/seeders/module-metadata-seeder.service.ts +5 -25
- package/src/seeders/module-test-data.service.ts +5 -3
- package/src/seeders/seed-data/solid-core-metadata.json +34 -9
- package/src/services/chatter-message.service.ts +18 -1
- package/src/services/crud.service.ts +1 -0
- package/src/services/model-metadata.service.ts +2 -1
- package/src/services/module-metadata.service.ts +2 -1
- package/src/services/queues/common.ts +75 -0
- package/src/services/queues/database-publisher.service.ts +4 -1
- package/src/services/queues/database-subscriber.service.ts +5 -3
- package/src/services/queues/rabbitmq-publisher.service.ts +17 -7
- package/src/services/queues/rabbitmq-subscriber.service.ts +223 -95
- package/src/solid-core.module.ts +4 -0
- package/src/testing/README.md +364 -0
- package/src/testing/__examples__/register-example-specs.ts +6 -0
- package/src/testing/__examples__/specs/custom-health.spec.ts +29 -0
- package/src/testing/__examples__/testing.sample.json +82 -0
- package/src/testing/adapters/api/api-adapter.ts +85 -0
- package/src/testing/adapters/api/api.types.ts +15 -0
- package/src/testing/adapters/ui/playwright-adapter.ts +54 -0
- package/src/testing/adapters/ui/ui.types.ts +4 -0
- package/src/testing/contracts/runtime-context.types.ts +36 -0
- package/src/testing/contracts/test-spec.types.ts +24 -0
- package/src/testing/contracts/testing-metadata.types.ts +46 -0
- package/src/testing/core/interpolation.ts +189 -0
- package/src/testing/core/normalize-steps.ts +21 -0
- package/src/testing/core/resource-store.ts +38 -0
- package/src/testing/core/spec-registry.ts +33 -0
- package/src/testing/core/step-registry.ts +27 -0
- package/src/testing/core/testing-engine.ts +127 -0
- package/src/testing/core/timeout.ts +19 -0
- package/src/testing/reporter/attachments.ts +25 -0
- package/src/testing/reporter/console-reporter.ts +229 -0
- package/src/testing/reporter/reporter.types.ts +36 -0
- package/src/testing/runner/lifecycle.ts +31 -0
- package/src/testing/runner/run-from-metadata.ts +87 -0
- package/src/testing/runner/scenario-filter.ts +33 -0
- package/src/testing/steps/api/auth.step.ts +66 -0
- package/src/testing/steps/api/index.ts +10 -0
- package/src/testing/steps/api/request.step.ts +358 -0
- package/src/testing/steps/assert/http.step.ts +33 -0
- package/src/testing/steps/assert/index.ts +12 -0
- package/src/testing/steps/assert/jsonpath.step.ts +50 -0
- package/src/testing/steps/assert/primitives.step.ts +69 -0
- package/src/testing/steps/test/index.ts +8 -0
- package/src/testing/steps/test/test-spec.step.ts +52 -0
- package/src/testing/steps/ui/actions.step.ts +36 -0
- package/src/testing/steps/ui/assertions.step.ts +54 -0
- package/src/testing/steps/ui/form.step.ts +39 -0
- package/src/testing/steps/ui/index.ts +12 -0
- package/src/testing/steps/ui/navigation.step.ts +53 -0
- package/src/testing/steps/util/index.ts +10 -0
- package/src/testing/steps/util/log.step.ts +19 -0
- package/src/testing/steps/util/require.step.ts +16 -0
- package/src/testing/steps/util/sleep.step.ts +15 -0
- package/tsconfig.json +35 -25
- package/tsconfig.tests.json +14 -0
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { CommandRunner } from 'nest-commander';
|
|
2
|
+
import { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';
|
|
3
|
+
interface TestRunCommandOptions {
|
|
4
|
+
module?: string;
|
|
5
|
+
moduleName?: string;
|
|
6
|
+
scenarioIds?: string;
|
|
7
|
+
includeTags?: string;
|
|
8
|
+
skipScenarioIds?: string;
|
|
9
|
+
reporter?: string;
|
|
10
|
+
apiBaseUrl?: string;
|
|
11
|
+
uiBaseUrl?: string;
|
|
12
|
+
headless?: boolean;
|
|
13
|
+
timeoutMs?: number;
|
|
14
|
+
retries?: number;
|
|
15
|
+
listSpecs?: boolean;
|
|
16
|
+
printApiLogs?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare class TestRunCommand extends CommandRunner {
|
|
19
|
+
private readonly moduleMetadataHelperService;
|
|
20
|
+
private readonly logger;
|
|
21
|
+
constructor(moduleMetadataHelperService: ModuleMetadataHelperService);
|
|
22
|
+
run(passedParam: string[], options?: TestRunCommandOptions): Promise<void>;
|
|
23
|
+
parseModule(val: string): string;
|
|
24
|
+
parseScenarioIds(val: string): string;
|
|
25
|
+
parseIncludeTags(val: string): string;
|
|
26
|
+
parseSkipScenarioIds(val: string): string;
|
|
27
|
+
parseReporter(val: string): string;
|
|
28
|
+
parseListSpecs(val?: string): boolean;
|
|
29
|
+
parsePrintApiLogs(val?: string): boolean;
|
|
30
|
+
parseApiBaseUrl(val: string): string;
|
|
31
|
+
parseUiBaseUrl(val: string): string;
|
|
32
|
+
parseHeadless(val: string): boolean;
|
|
33
|
+
parseTimeoutMs(val: string): number;
|
|
34
|
+
parseRetries(val: string): number;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=run-tests.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-tests.command.d.ts","sourceRoot":"","sources":["../../src/commands/run-tests.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,aAAa,EAAU,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AAMzF,UAAU,qBAAqB;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,qBAIa,cAAe,SAAQ,aAAa;IAI7C,OAAO,CAAC,QAAQ,CAAC,2BAA2B;IAH9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;gBAGvC,2BAA2B,EAAE,2BAA2B;IAKrE,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmFhF,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAShC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASrC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASrC,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASzC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASlC,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;IAUrC,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;IAUxC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASpC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASnC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASnC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASnC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAGlC"}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
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;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
var TestRunCommand_1;
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.TestRunCommand = void 0;
|
|
47
|
+
const common_1 = require("@nestjs/common");
|
|
48
|
+
const nest_commander_1 = require("nest-commander");
|
|
49
|
+
const path = __importStar(require("path"));
|
|
50
|
+
const module_metadata_helper_service_1 = require("../helpers/module-metadata-helper.service");
|
|
51
|
+
const console_reporter_1 = require("../testing/reporter/console-reporter");
|
|
52
|
+
const run_from_metadata_1 = require("../testing/runner/run-from-metadata");
|
|
53
|
+
const spec_registry_1 = require("../testing/core/spec-registry");
|
|
54
|
+
let TestRunCommand = TestRunCommand_1 = class TestRunCommand extends nest_commander_1.CommandRunner {
|
|
55
|
+
constructor(moduleMetadataHelperService) {
|
|
56
|
+
super();
|
|
57
|
+
this.moduleMetadataHelperService = moduleMetadataHelperService;
|
|
58
|
+
this.logger = new common_1.Logger(TestRunCommand_1.name);
|
|
59
|
+
}
|
|
60
|
+
async run(passedParam, options) {
|
|
61
|
+
try {
|
|
62
|
+
const moduleName = options?.moduleName ?? options?.module ?? passedParam?.[0];
|
|
63
|
+
if (!moduleName) {
|
|
64
|
+
this.logger.error('Module name is required. Use --module or pass it as the first argument.');
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const metadataPath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);
|
|
68
|
+
if (!metadataPath) {
|
|
69
|
+
this.logger.error(`Unable to resolve metadata path for module: ${moduleName}`);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const metadata = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(metadataPath);
|
|
73
|
+
if (!metadata?.testing) {
|
|
74
|
+
this.logger.error(`No testing configuration found in metadata: ${metadataPath}`);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const listSpecs = options?.listSpecs ?? false;
|
|
78
|
+
const specEntries = Array.isArray(metadata.testing?.specs)
|
|
79
|
+
? metadata.testing.specs
|
|
80
|
+
: [];
|
|
81
|
+
if (listSpecs) {
|
|
82
|
+
const registry = new spec_registry_1.SpecRegistry();
|
|
83
|
+
if (specEntries.length) {
|
|
84
|
+
loadSpecRegistrations(specEntries, metadataPath, registry);
|
|
85
|
+
}
|
|
86
|
+
printSpecList(registry.list());
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (!metadata?.testing?.scenarios || !Array.isArray(metadata.testing.scenarios)) {
|
|
90
|
+
this.logger.error(`No testing.scenarios found in metadata: ${metadataPath}`);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const scenarioIds = splitCsv(options?.scenarioIds);
|
|
94
|
+
const includeTags = splitCsv(options?.includeTags);
|
|
95
|
+
const skipScenarioIds = splitCsv(options?.skipScenarioIds);
|
|
96
|
+
const reporterName = options?.reporter ?? 'console';
|
|
97
|
+
if (reporterName !== 'console') {
|
|
98
|
+
this.logger.error(`Unsupported reporter: ${reporterName}. Use "console".`);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const apiBaseUrl = options?.apiBaseUrl ?? process.env.BASE_URL;
|
|
102
|
+
const uiBaseUrl = options?.uiBaseUrl ?? process.env.FRONTEND_BASE_URL;
|
|
103
|
+
const headless = options?.headless ?? true;
|
|
104
|
+
const printApiLogs = options?.printApiLogs ?? false;
|
|
105
|
+
await (0, run_from_metadata_1.runFromMetadata)({
|
|
106
|
+
metadata: metadata,
|
|
107
|
+
scenarioIds,
|
|
108
|
+
includeTags,
|
|
109
|
+
skipScenarioIds,
|
|
110
|
+
reporter: new console_reporter_1.ConsoleReporter(),
|
|
111
|
+
api: apiBaseUrl ? { baseUrl: apiBaseUrl } : undefined,
|
|
112
|
+
ui: { baseUrl: uiBaseUrl, headless },
|
|
113
|
+
defaults: {
|
|
114
|
+
timeoutMs: options?.timeoutMs,
|
|
115
|
+
retries: options?.retries,
|
|
116
|
+
},
|
|
117
|
+
options: { printApiLogs },
|
|
118
|
+
specs: specEntries.length
|
|
119
|
+
? (registry) => loadSpecRegistrations(specEntries, metadataPath, registry)
|
|
120
|
+
: undefined,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
this.logger.error('Run tests command failed');
|
|
125
|
+
console.error('Run tests command failed');
|
|
126
|
+
process.exitCode = 1;
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
parseModule(val) {
|
|
131
|
+
return val;
|
|
132
|
+
}
|
|
133
|
+
parseScenarioIds(val) {
|
|
134
|
+
return val;
|
|
135
|
+
}
|
|
136
|
+
parseIncludeTags(val) {
|
|
137
|
+
return val;
|
|
138
|
+
}
|
|
139
|
+
parseSkipScenarioIds(val) {
|
|
140
|
+
return val;
|
|
141
|
+
}
|
|
142
|
+
parseReporter(val) {
|
|
143
|
+
return val;
|
|
144
|
+
}
|
|
145
|
+
parseListSpecs(val) {
|
|
146
|
+
if (val === undefined)
|
|
147
|
+
return true;
|
|
148
|
+
return val === 'false' ? false : true;
|
|
149
|
+
}
|
|
150
|
+
parsePrintApiLogs(val) {
|
|
151
|
+
if (val === undefined)
|
|
152
|
+
return true;
|
|
153
|
+
return val === 'false' ? false : true;
|
|
154
|
+
}
|
|
155
|
+
parseApiBaseUrl(val) {
|
|
156
|
+
return val;
|
|
157
|
+
}
|
|
158
|
+
parseUiBaseUrl(val) {
|
|
159
|
+
return val;
|
|
160
|
+
}
|
|
161
|
+
parseHeadless(val) {
|
|
162
|
+
return val === 'false' ? false : true;
|
|
163
|
+
}
|
|
164
|
+
parseTimeoutMs(val) {
|
|
165
|
+
return Number(val);
|
|
166
|
+
}
|
|
167
|
+
parseRetries(val) {
|
|
168
|
+
return Number(val);
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
exports.TestRunCommand = TestRunCommand;
|
|
172
|
+
__decorate([
|
|
173
|
+
(0, nest_commander_1.Option)({
|
|
174
|
+
flags: '-m, --module [module name]',
|
|
175
|
+
description: 'Module name to load metadata from.',
|
|
176
|
+
required: false,
|
|
177
|
+
}),
|
|
178
|
+
__metadata("design:type", Function),
|
|
179
|
+
__metadata("design:paramtypes", [String]),
|
|
180
|
+
__metadata("design:returntype", String)
|
|
181
|
+
], TestRunCommand.prototype, "parseModule", null);
|
|
182
|
+
__decorate([
|
|
183
|
+
(0, nest_commander_1.Option)({
|
|
184
|
+
flags: '--scenario-ids [ids]',
|
|
185
|
+
description: 'Comma-separated list of scenario ids to run.',
|
|
186
|
+
required: false,
|
|
187
|
+
}),
|
|
188
|
+
__metadata("design:type", Function),
|
|
189
|
+
__metadata("design:paramtypes", [String]),
|
|
190
|
+
__metadata("design:returntype", String)
|
|
191
|
+
], TestRunCommand.prototype, "parseScenarioIds", null);
|
|
192
|
+
__decorate([
|
|
193
|
+
(0, nest_commander_1.Option)({
|
|
194
|
+
flags: '--include-tags [tags]',
|
|
195
|
+
description: 'Comma-separated list of tags; scenario must include all.',
|
|
196
|
+
required: false,
|
|
197
|
+
}),
|
|
198
|
+
__metadata("design:type", Function),
|
|
199
|
+
__metadata("design:paramtypes", [String]),
|
|
200
|
+
__metadata("design:returntype", String)
|
|
201
|
+
], TestRunCommand.prototype, "parseIncludeTags", null);
|
|
202
|
+
__decorate([
|
|
203
|
+
(0, nest_commander_1.Option)({
|
|
204
|
+
flags: '--skip-scenario-ids [ids]',
|
|
205
|
+
description: 'Comma-separated list of scenario ids to skip.',
|
|
206
|
+
required: false,
|
|
207
|
+
}),
|
|
208
|
+
__metadata("design:type", Function),
|
|
209
|
+
__metadata("design:paramtypes", [String]),
|
|
210
|
+
__metadata("design:returntype", String)
|
|
211
|
+
], TestRunCommand.prototype, "parseSkipScenarioIds", null);
|
|
212
|
+
__decorate([
|
|
213
|
+
(0, nest_commander_1.Option)({
|
|
214
|
+
flags: '--reporter [name]',
|
|
215
|
+
description: 'Reporter name (currently only "console").',
|
|
216
|
+
required: false,
|
|
217
|
+
}),
|
|
218
|
+
__metadata("design:type", Function),
|
|
219
|
+
__metadata("design:paramtypes", [String]),
|
|
220
|
+
__metadata("design:returntype", String)
|
|
221
|
+
], TestRunCommand.prototype, "parseReporter", null);
|
|
222
|
+
__decorate([
|
|
223
|
+
(0, nest_commander_1.Option)({
|
|
224
|
+
flags: '--list-specs [true|false]',
|
|
225
|
+
description: 'List registered test specs and exit.',
|
|
226
|
+
required: false,
|
|
227
|
+
}),
|
|
228
|
+
__metadata("design:type", Function),
|
|
229
|
+
__metadata("design:paramtypes", [String]),
|
|
230
|
+
__metadata("design:returntype", Boolean)
|
|
231
|
+
], TestRunCommand.prototype, "parseListSpecs", null);
|
|
232
|
+
__decorate([
|
|
233
|
+
(0, nest_commander_1.Option)({
|
|
234
|
+
flags: '--print-api-logs [true|false]',
|
|
235
|
+
description: 'Print full API request/response logs for api.request steps.',
|
|
236
|
+
required: false,
|
|
237
|
+
}),
|
|
238
|
+
__metadata("design:type", Function),
|
|
239
|
+
__metadata("design:paramtypes", [String]),
|
|
240
|
+
__metadata("design:returntype", Boolean)
|
|
241
|
+
], TestRunCommand.prototype, "parsePrintApiLogs", null);
|
|
242
|
+
__decorate([
|
|
243
|
+
(0, nest_commander_1.Option)({
|
|
244
|
+
flags: '--api-base-url [url]',
|
|
245
|
+
description: 'API base URL (defaults to process.env.BASE_URL).',
|
|
246
|
+
required: false,
|
|
247
|
+
}),
|
|
248
|
+
__metadata("design:type", Function),
|
|
249
|
+
__metadata("design:paramtypes", [String]),
|
|
250
|
+
__metadata("design:returntype", String)
|
|
251
|
+
], TestRunCommand.prototype, "parseApiBaseUrl", null);
|
|
252
|
+
__decorate([
|
|
253
|
+
(0, nest_commander_1.Option)({
|
|
254
|
+
flags: '--ui-base-url [url]',
|
|
255
|
+
description: 'UI base URL (defaults to process.env.FRONTEND_BASE_URL).',
|
|
256
|
+
required: false,
|
|
257
|
+
}),
|
|
258
|
+
__metadata("design:type", Function),
|
|
259
|
+
__metadata("design:paramtypes", [String]),
|
|
260
|
+
__metadata("design:returntype", String)
|
|
261
|
+
], TestRunCommand.prototype, "parseUiBaseUrl", null);
|
|
262
|
+
__decorate([
|
|
263
|
+
(0, nest_commander_1.Option)({
|
|
264
|
+
flags: '--headless [true|false]',
|
|
265
|
+
description: 'Run UI browser in headless mode (default: true).',
|
|
266
|
+
required: false,
|
|
267
|
+
}),
|
|
268
|
+
__metadata("design:type", Function),
|
|
269
|
+
__metadata("design:paramtypes", [String]),
|
|
270
|
+
__metadata("design:returntype", Boolean)
|
|
271
|
+
], TestRunCommand.prototype, "parseHeadless", null);
|
|
272
|
+
__decorate([
|
|
273
|
+
(0, nest_commander_1.Option)({
|
|
274
|
+
flags: '--timeout-ms [number]',
|
|
275
|
+
description: 'Default scenario timeout in milliseconds.',
|
|
276
|
+
required: false,
|
|
277
|
+
}),
|
|
278
|
+
__metadata("design:type", Function),
|
|
279
|
+
__metadata("design:paramtypes", [String]),
|
|
280
|
+
__metadata("design:returntype", Number)
|
|
281
|
+
], TestRunCommand.prototype, "parseTimeoutMs", null);
|
|
282
|
+
__decorate([
|
|
283
|
+
(0, nest_commander_1.Option)({
|
|
284
|
+
flags: '--retries [number]',
|
|
285
|
+
description: 'Default scenario retries.',
|
|
286
|
+
required: false,
|
|
287
|
+
}),
|
|
288
|
+
__metadata("design:type", Function),
|
|
289
|
+
__metadata("design:paramtypes", [String]),
|
|
290
|
+
__metadata("design:returntype", Number)
|
|
291
|
+
], TestRunCommand.prototype, "parseRetries", null);
|
|
292
|
+
exports.TestRunCommand = TestRunCommand = TestRunCommand_1 = __decorate([
|
|
293
|
+
(0, nest_commander_1.SubCommand)({
|
|
294
|
+
name: 'run',
|
|
295
|
+
description: 'Run testing scenarios from module metadata.',
|
|
296
|
+
}),
|
|
297
|
+
__metadata("design:paramtypes", [module_metadata_helper_service_1.ModuleMetadataHelperService])
|
|
298
|
+
], TestRunCommand);
|
|
299
|
+
function splitCsv(value) {
|
|
300
|
+
if (!value)
|
|
301
|
+
return undefined;
|
|
302
|
+
const items = value
|
|
303
|
+
.split(',')
|
|
304
|
+
.map((item) => item.trim())
|
|
305
|
+
.filter(Boolean);
|
|
306
|
+
return items.length ? items : undefined;
|
|
307
|
+
}
|
|
308
|
+
function resolveSpecPath(entry, metadataPath) {
|
|
309
|
+
if (path.isAbsolute(entry)) {
|
|
310
|
+
return entry;
|
|
311
|
+
}
|
|
312
|
+
if (entry.startsWith('.')) {
|
|
313
|
+
return path.resolve(path.dirname(metadataPath), entry);
|
|
314
|
+
}
|
|
315
|
+
return path.resolve(process.cwd(), entry);
|
|
316
|
+
}
|
|
317
|
+
function loadSpecRegistrations(entries, metadataPath, registry) {
|
|
318
|
+
for (const entry of entries) {
|
|
319
|
+
const resolved = resolveSpecPath(entry, metadataPath);
|
|
320
|
+
let mod;
|
|
321
|
+
try {
|
|
322
|
+
mod = require(resolved);
|
|
323
|
+
}
|
|
324
|
+
catch (err) {
|
|
325
|
+
const message = err?.message ?? String(err);
|
|
326
|
+
throw new Error(`Failed to load test spec module "${entry}" resolved to "${resolved}": ${message}`);
|
|
327
|
+
}
|
|
328
|
+
const register = mod?.registerTestSpecs ?? mod?.default ?? mod;
|
|
329
|
+
if (typeof register !== 'function') {
|
|
330
|
+
throw new Error(`Test spec module "${entry}" did not export a register function (expected "registerTestSpecs" or default export).`);
|
|
331
|
+
}
|
|
332
|
+
register(registry);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
function printSpecList(specIds) {
|
|
336
|
+
if (!specIds.length) {
|
|
337
|
+
console.log('No test specs registered.');
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
console.log('Registered test specs:');
|
|
341
|
+
for (const id of specIds) {
|
|
342
|
+
console.log(`- ${id}`);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=run-tests.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-tests.command.js","sourceRoot":"","sources":["../../src/commands/run-tests.command.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from '@nestjs/common';\nimport { SubCommand, CommandRunner, Option } from 'nest-commander';\nimport * as path from 'path';\nimport { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';\nimport { ConsoleReporter } from 'src/testing/reporter/console-reporter';\nimport { runFromMetadata } from 'src/testing/runner/run-from-metadata';\nimport type { TestingMetadata } from 'src/testing/contracts/testing-metadata.types';\nimport { SpecRegistry } from 'src/testing/core/spec-registry';\n\ninterface TestRunCommandOptions {\n module?: string;\n moduleName?: string;\n scenarioIds?: string;\n includeTags?: string;\n skipScenarioIds?: string;\n reporter?: string;\n apiBaseUrl?: string;\n uiBaseUrl?: string;\n headless?: boolean;\n timeoutMs?: number;\n retries?: number;\n listSpecs?: boolean;\n printApiLogs?: boolean;\n}\n\n@SubCommand({\n name: 'run',\n description: 'Run testing scenarios from module metadata.',\n})\nexport class TestRunCommand extends CommandRunner {\n private readonly logger = new Logger(TestRunCommand.name);\n\n constructor(\n private readonly moduleMetadataHelperService: ModuleMetadataHelperService,\n ) {\n super();\n }\n\n async run(passedParam: string[], options?: TestRunCommandOptions): Promise<void> {\n try {\n const moduleName = options?.moduleName ?? options?.module ?? passedParam?.[0];\n if (!moduleName) {\n this.logger.error('Module name is required. Use --module or pass it as the first argument.');\n return;\n }\n\n const metadataPath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);\n if (!metadataPath) {\n this.logger.error(`Unable to resolve metadata path for module: ${moduleName}`);\n return;\n }\n\n const metadata = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(metadataPath);\n if (!metadata?.testing) {\n this.logger.error(`No testing configuration found in metadata: ${metadataPath}`);\n return;\n }\n\n const listSpecs = options?.listSpecs ?? false;\n const specEntries = Array.isArray(metadata.testing?.specs)\n ? metadata.testing.specs\n : [];\n\n if (listSpecs) {\n const registry = new SpecRegistry();\n if (specEntries.length) {\n loadSpecRegistrations(specEntries, metadataPath, registry);\n }\n printSpecList(registry.list());\n return;\n }\n if (!metadata?.testing?.scenarios || !Array.isArray(metadata.testing.scenarios)) {\n this.logger.error(`No testing.scenarios found in metadata: ${metadataPath}`);\n return;\n }\n\n const scenarioIds = splitCsv(options?.scenarioIds);\n const includeTags = splitCsv(options?.includeTags);\n const skipScenarioIds = splitCsv(options?.skipScenarioIds);\n\n const reporterName = options?.reporter ?? 'console';\n if (reporterName !== 'console') {\n this.logger.error(`Unsupported reporter: ${reporterName}. Use \"console\".`);\n return;\n }\n\n const apiBaseUrl = options?.apiBaseUrl ?? process.env.BASE_URL;\n const uiBaseUrl = options?.uiBaseUrl ?? process.env.FRONTEND_BASE_URL;\n const headless = options?.headless ?? true;\n const printApiLogs = options?.printApiLogs ?? false;\n\n await runFromMetadata({\n metadata: metadata as TestingMetadata,\n scenarioIds,\n includeTags,\n skipScenarioIds,\n reporter: new ConsoleReporter(),\n api: apiBaseUrl ? { baseUrl: apiBaseUrl } : undefined,\n ui: { baseUrl: uiBaseUrl, headless },\n defaults: {\n timeoutMs: options?.timeoutMs,\n retries: options?.retries,\n },\n options: { printApiLogs },\n specs: specEntries.length\n ? (registry) => loadSpecRegistrations(specEntries, metadataPath, registry)\n : undefined,\n });\n } catch (err: any) {\n this.logger.error('Run tests command failed');\n console.error('Run tests command failed');\n process.exitCode = 1;\n return;\n }\n }\n\n @Option({\n flags: '-m, --module [module name]',\n description: 'Module name to load metadata from.',\n required: false,\n })\n parseModule(val: string): string {\n return val;\n }\n\n @Option({\n flags: '--scenario-ids [ids]',\n description: 'Comma-separated list of scenario ids to run.',\n required: false,\n })\n parseScenarioIds(val: string): string {\n return val;\n }\n\n @Option({\n flags: '--include-tags [tags]',\n description: 'Comma-separated list of tags; scenario must include all.',\n required: false,\n })\n parseIncludeTags(val: string): string {\n return val;\n }\n\n @Option({\n flags: '--skip-scenario-ids [ids]',\n description: 'Comma-separated list of scenario ids to skip.',\n required: false,\n })\n parseSkipScenarioIds(val: string): string {\n return val;\n }\n\n @Option({\n flags: '--reporter [name]',\n description: 'Reporter name (currently only \"console\").',\n required: false,\n })\n parseReporter(val: string): string {\n return val;\n }\n\n @Option({\n flags: '--list-specs [true|false]',\n description: 'List registered test specs and exit.',\n required: false,\n })\n parseListSpecs(val?: string): boolean {\n if (val === undefined) return true;\n return val === 'false' ? false : true;\n }\n\n @Option({\n flags: '--print-api-logs [true|false]',\n description: 'Print full API request/response logs for api.request steps.',\n required: false,\n })\n parsePrintApiLogs(val?: string): boolean {\n if (val === undefined) return true;\n return val === 'false' ? false : true;\n }\n\n @Option({\n flags: '--api-base-url [url]',\n description: 'API base URL (defaults to process.env.BASE_URL).',\n required: false,\n })\n parseApiBaseUrl(val: string): string {\n return val;\n }\n\n @Option({\n flags: '--ui-base-url [url]',\n description: 'UI base URL (defaults to process.env.FRONTEND_BASE_URL).',\n required: false,\n })\n parseUiBaseUrl(val: string): string {\n return val;\n }\n\n @Option({\n flags: '--headless [true|false]',\n description: 'Run UI browser in headless mode (default: true).',\n required: false,\n })\n parseHeadless(val: string): boolean {\n return val === 'false' ? false : true;\n }\n\n @Option({\n flags: '--timeout-ms [number]',\n description: 'Default scenario timeout in milliseconds.',\n required: false,\n })\n parseTimeoutMs(val: string): number {\n return Number(val);\n }\n\n @Option({\n flags: '--retries [number]',\n description: 'Default scenario retries.',\n required: false,\n })\n parseRetries(val: string): number {\n return Number(val);\n }\n}\n\nfunction splitCsv(value?: string): string[] | undefined {\n if (!value) return undefined;\n const items = value\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean);\n return items.length ? items : undefined;\n}\n\nfunction resolveSpecPath(entry: string, metadataPath: string): string {\n if (path.isAbsolute(entry)) {\n return entry;\n }\n if (entry.startsWith('.')) {\n return path.resolve(path.dirname(metadataPath), entry);\n }\n return path.resolve(process.cwd(), entry);\n}\n\nfunction loadSpecRegistrations(entries: string[], metadataPath: string, registry: SpecRegistry): void {\n for (const entry of entries) {\n const resolved = resolveSpecPath(entry, metadataPath);\n let mod: any;\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n mod = require(resolved);\n } catch (err: any) {\n const message = err?.message ?? String(err);\n throw new Error(\n `Failed to load test spec module \"${entry}\" resolved to \"${resolved}\": ${message}`,\n );\n }\n const register = mod?.registerTestSpecs ?? mod?.default ?? mod;\n if (typeof register !== 'function') {\n throw new Error(\n `Test spec module \"${entry}\" did not export a register function (expected \"registerTestSpecs\" or default export).`,\n );\n }\n register(registry);\n }\n}\nfunction printSpecList(specIds: string[]): void {\n if (!specIds.length) {\n console.log('No test specs registered.');\n return;\n }\n console.log('Registered test specs:');\n for (const id of specIds) {\n console.log(`- ${id}`);\n }\n}\n"]}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { CommandRunner } from 'nest-commander';
|
|
2
2
|
import { ModuleTestDataService } from 'src/seeders/module-test-data.service';
|
|
3
3
|
interface TestDataCommandOptions {
|
|
4
|
-
|
|
4
|
+
load?: boolean;
|
|
5
5
|
modulesToTest?: string;
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
setup?: boolean;
|
|
7
|
+
teardown?: boolean;
|
|
8
8
|
}
|
|
9
9
|
export declare class TestDataCommand extends CommandRunner {
|
|
10
10
|
private readonly testDataService;
|
|
11
11
|
private readonly logger;
|
|
12
12
|
constructor(testDataService: ModuleTestDataService);
|
|
13
13
|
run(_passedParam: string[], options?: TestDataCommandOptions): Promise<void>;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
parseLoad(): boolean;
|
|
15
|
+
parseSetup(): boolean;
|
|
16
|
+
parseTeardown(): boolean;
|
|
17
17
|
parseModulesToTest(val: string): string;
|
|
18
18
|
}
|
|
19
19
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-data.command.d.ts","sourceRoot":"","sources":["../../src/commands/test-data.command.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"test-data.command.d.ts","sourceRoot":"","sources":["../../src/commands/test-data.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,aAAa,EAAU,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,UAAU,sBAAsB;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAIa,eAAgB,SAAQ,aAAa;IAGpC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAF5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAE9B,eAAe,EAAE,qBAAqB;IAI7D,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4DlF,SAAS,IAAI,OAAO;IAQpB,UAAU,IAAI,OAAO;IAQrB,aAAa,IAAI,OAAO;IASxB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAIxC"}
|
|
@@ -22,33 +22,33 @@ let TestDataCommand = TestDataCommand_1 = class TestDataCommand extends nest_com
|
|
|
22
22
|
}
|
|
23
23
|
async run(_passedParam, options) {
|
|
24
24
|
try {
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
const selectedModes = [
|
|
25
|
+
const load = Boolean(options?.load);
|
|
26
|
+
const setup = Boolean(options?.setup);
|
|
27
|
+
const teardown = Boolean(options?.teardown);
|
|
28
|
+
const selectedModes = [load, setup, teardown].filter(Boolean).length;
|
|
29
29
|
if (selectedModes > 1) {
|
|
30
|
-
this.logger.error('Please specify only one of --load
|
|
31
|
-
console.log('Please specify only one of --load
|
|
30
|
+
this.logger.error('Please specify only one of --load, --setup, or --teardown.');
|
|
31
|
+
console.log('Please specify only one of --load, --setup, or --teardown.');
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
-
if (!
|
|
35
|
-
this.logger.error('Please specify one of --load
|
|
36
|
-
console.log('Please specify one of --load
|
|
34
|
+
if (!load && !setup && !teardown) {
|
|
35
|
+
this.logger.error('Please specify one of --load, --setup, or --teardown.');
|
|
36
|
+
console.log('Please specify one of --load, --setup, or --teardown.');
|
|
37
37
|
return;
|
|
38
38
|
}
|
|
39
|
-
if (
|
|
39
|
+
if (teardown) {
|
|
40
40
|
this.logger.log('Deleting test datasource environment and databases.');
|
|
41
41
|
console.log('Deleting test datasource environment and databases.');
|
|
42
42
|
await this.testDataService.deleteTestDatasources();
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
45
|
-
if (
|
|
45
|
+
if (setup) {
|
|
46
46
|
this.logger.log('Creating test datasource environment file and manifest.');
|
|
47
47
|
console.log('Creating test datasource environment file and manifest.');
|
|
48
48
|
await this.testDataService.createTestDatasources();
|
|
49
49
|
return;
|
|
50
50
|
}
|
|
51
|
-
if (
|
|
51
|
+
if (load) {
|
|
52
52
|
const modulesToTest = options?.modulesToTest ? options.modulesToTest.split(',').map((m) => m.trim()).filter(Boolean) : null;
|
|
53
53
|
if (modulesToTest?.length) {
|
|
54
54
|
this.logger.log(`Test data setup for modules: ${modulesToTest.join(', ')}`);
|
|
@@ -72,13 +72,13 @@ let TestDataCommand = TestDataCommand_1 = class TestDataCommand extends nest_com
|
|
|
72
72
|
throw err;
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
|
-
|
|
75
|
+
parseLoad() {
|
|
76
76
|
return true;
|
|
77
77
|
}
|
|
78
|
-
|
|
78
|
+
parseSetup() {
|
|
79
79
|
return true;
|
|
80
80
|
}
|
|
81
|
-
|
|
81
|
+
parseTeardown() {
|
|
82
82
|
return true;
|
|
83
83
|
}
|
|
84
84
|
parseModulesToTest(val) {
|
|
@@ -88,31 +88,31 @@ let TestDataCommand = TestDataCommand_1 = class TestDataCommand extends nest_com
|
|
|
88
88
|
exports.TestDataCommand = TestDataCommand;
|
|
89
89
|
__decorate([
|
|
90
90
|
(0, nest_commander_1.Option)({
|
|
91
|
-
flags: '--load
|
|
92
|
-
description: 'Seed test data from
|
|
91
|
+
flags: '--load',
|
|
92
|
+
description: 'Seed test data from testing.data sections',
|
|
93
93
|
}),
|
|
94
94
|
__metadata("design:type", Function),
|
|
95
95
|
__metadata("design:paramtypes", []),
|
|
96
96
|
__metadata("design:returntype", Boolean)
|
|
97
|
-
], TestDataCommand.prototype, "
|
|
97
|
+
], TestDataCommand.prototype, "parseLoad", null);
|
|
98
98
|
__decorate([
|
|
99
99
|
(0, nest_commander_1.Option)({
|
|
100
|
-
flags: '--
|
|
100
|
+
flags: '--setup',
|
|
101
101
|
description: 'Create a new .env.<dbRunName> and test datasource manifest',
|
|
102
102
|
}),
|
|
103
103
|
__metadata("design:type", Function),
|
|
104
104
|
__metadata("design:paramtypes", []),
|
|
105
105
|
__metadata("design:returntype", Boolean)
|
|
106
|
-
], TestDataCommand.prototype, "
|
|
106
|
+
], TestDataCommand.prototype, "parseSetup", null);
|
|
107
107
|
__decorate([
|
|
108
108
|
(0, nest_commander_1.Option)({
|
|
109
|
-
flags: '--
|
|
109
|
+
flags: '--teardown',
|
|
110
110
|
description: 'Delete test datasource env/manifest and drop test databases',
|
|
111
111
|
}),
|
|
112
112
|
__metadata("design:type", Function),
|
|
113
113
|
__metadata("design:paramtypes", []),
|
|
114
114
|
__metadata("design:returntype", Boolean)
|
|
115
|
-
], TestDataCommand.prototype, "
|
|
115
|
+
], TestDataCommand.prototype, "parseTeardown", null);
|
|
116
116
|
__decorate([
|
|
117
117
|
(0, nest_commander_1.Option)({
|
|
118
118
|
flags: '--modules-to-test [module names]',
|
|
@@ -124,9 +124,9 @@ __decorate([
|
|
|
124
124
|
__metadata("design:returntype", String)
|
|
125
125
|
], TestDataCommand.prototype, "parseModulesToTest", null);
|
|
126
126
|
exports.TestDataCommand = TestDataCommand = TestDataCommand_1 = __decorate([
|
|
127
|
-
(0, nest_commander_1.
|
|
128
|
-
name: '
|
|
129
|
-
description: 'Seed test data from
|
|
127
|
+
(0, nest_commander_1.SubCommand)({
|
|
128
|
+
name: 'data',
|
|
129
|
+
description: 'Seed test data from testing.data sections',
|
|
130
130
|
}),
|
|
131
131
|
__metadata("design:paramtypes", [module_test_data_service_1.ModuleTestDataService])
|
|
132
132
|
], TestDataCommand);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-data.command.js","sourceRoot":"","sources":["../../src/commands/test-data.command.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAwC;AACxC,
|
|
1
|
+
{"version":3,"file":"test-data.command.js","sourceRoot":"","sources":["../../src/commands/test-data.command.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from '@nestjs/common';\nimport { SubCommand, CommandRunner, Option } from 'nest-commander';\nimport { ModuleTestDataService } from 'src/seeders/module-test-data.service';\n\ninterface TestDataCommandOptions {\n load?: boolean;\n modulesToTest?: string;\n setup?: boolean;\n teardown?: boolean;\n}\n\n@SubCommand({\n name: 'data',\n description: 'Seed test data from testing.data sections',\n})\nexport class TestDataCommand extends CommandRunner {\n private readonly logger = new Logger(TestDataCommand.name);\n\n constructor(private readonly testDataService: ModuleTestDataService) {\n super();\n }\n\n async run(_passedParam: string[], options?: TestDataCommandOptions): Promise<void> {\n try {\n const load = Boolean(options?.load);\n const setup = Boolean(options?.setup);\n const teardown = Boolean(options?.teardown);\n\n const selectedModes = [load, setup, teardown].filter(Boolean).length;\n if (selectedModes > 1) {\n this.logger.error('Please specify only one of --load, --setup, or --teardown.');\n console.log('Please specify only one of --load, --setup, or --teardown.');\n return;\n }\n\n if (!load && !setup && !teardown) {\n this.logger.error('Please specify one of --load, --setup, or --teardown.');\n console.log('Please specify one of --load, --setup, or --teardown.');\n return;\n }\n\n if (teardown) {\n this.logger.log('Deleting test datasource environment and databases.');\n console.log('Deleting test datasource environment and databases.');\n await this.testDataService.deleteTestDatasources();\n return;\n }\n\n if (setup) {\n this.logger.log('Creating test datasource environment file and manifest.');\n console.log('Creating test datasource environment file and manifest.');\n await this.testDataService.createTestDatasources();\n return;\n }\n\n if (load) {\n const modulesToTest = options?.modulesToTest ? options.modulesToTest.split(',').map((m) => m.trim()).filter(Boolean) : null;\n if (modulesToTest?.length) {\n this.logger.log(`Test data setup for modules: ${modulesToTest.join(', ')}`);\n console.log(`Test data setup for modules: ${modulesToTest.join(', ')}`);\n } else {\n this.logger.log('Test data setup for all modules.');\n console.log('Test data setup for all modules.');\n }\n await this.testDataService.setupTestData(modulesToTest ?? undefined);\n return;\n }\n } catch (err: any) {\n const message = err?.message ?? String(err);\n this.logger.error(message);\n console.error(`Test data command failed: ${message}`);\n if (err?.stack) {\n console.error(err.stack);\n }\n throw err;\n }\n }\n\n @Option({\n flags: '--load',\n description: 'Seed test data from testing.data sections',\n })\n parseLoad(): boolean {\n return true;\n }\n\n @Option({\n flags: '--setup',\n description: 'Create a new .env.<dbRunName> and test datasource manifest',\n })\n parseSetup(): boolean {\n return true;\n }\n\n @Option({\n flags: '--teardown',\n description: 'Delete test datasource env/manifest and drop test databases',\n })\n parseTeardown(): boolean {\n return true;\n }\n\n @Option({\n flags: '--modules-to-test [module names]',\n description: 'Comma-separated list of module names to test (defaults to all modules).',\n required: false,\n })\n parseModulesToTest(val: string): string {\n return val;\n }\n\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.command.d.ts","sourceRoot":"","sources":["../../src/commands/test.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIxD,qBAKa,WAAY,SAAQ,aAAa;IACtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAG3B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.TestCommand = void 0;
|
|
10
|
+
const nest_commander_1 = require("nest-commander");
|
|
11
|
+
const test_data_command_1 = require("./test-data.command");
|
|
12
|
+
const run_tests_command_1 = require("./run-tests.command");
|
|
13
|
+
let TestCommand = class TestCommand extends nest_commander_1.CommandRunner {
|
|
14
|
+
async run() {
|
|
15
|
+
console.log('Usage: solidctl test <run|data> [options]');
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
exports.TestCommand = TestCommand;
|
|
19
|
+
exports.TestCommand = TestCommand = __decorate([
|
|
20
|
+
(0, nest_commander_1.Command)({
|
|
21
|
+
name: 'test',
|
|
22
|
+
description: 'Testing utilities.',
|
|
23
|
+
subCommands: [run_tests_command_1.TestRunCommand, test_data_command_1.TestDataCommand],
|
|
24
|
+
})
|
|
25
|
+
], TestCommand);
|
|
26
|
+
//# sourceMappingURL=test.command.js.map
|