qa360 2.2.1 → 2.2.13
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/CHANGELOG.md +28 -0
- package/README.md +79 -0
- package/cli/dist/cli-minimal.d.ts +6 -0
- package/cli/dist/cli-minimal.js +36 -0
- package/cli/dist/commands/ai.d.ts +43 -0
- package/cli/dist/commands/ai.js +616 -0
- package/cli/dist/commands/ask.d.ts +94 -0
- package/cli/dist/commands/ask.js +582 -0
- package/cli/dist/commands/coverage.d.ts +8 -0
- package/cli/dist/commands/coverage.js +252 -0
- package/cli/dist/commands/crawl.d.ts +24 -0
- package/cli/dist/commands/crawl.js +121 -0
- package/cli/dist/commands/doctor.d.ts +54 -0
- package/cli/dist/commands/doctor.js +513 -0
- package/cli/dist/commands/examples.d.ts +33 -0
- package/cli/dist/commands/examples.js +193 -0
- package/cli/dist/commands/explain.d.ts +27 -0
- package/cli/dist/commands/explain.js +630 -0
- package/cli/dist/commands/flakiness.d.ts +73 -0
- package/cli/dist/commands/flakiness.js +435 -0
- package/cli/dist/commands/generate.d.ts +66 -0
- package/cli/dist/commands/generate.js +438 -0
- package/cli/dist/commands/history.d.ts +76 -0
- package/cli/dist/commands/history.js +755 -0
- package/cli/dist/commands/init.d.ts +106 -0
- package/cli/dist/commands/init.js +616 -0
- package/cli/dist/commands/monitor.d.ts +27 -0
- package/cli/dist/commands/monitor.js +225 -0
- package/cli/dist/commands/ollama.d.ts +40 -0
- package/cli/dist/commands/ollama.js +346 -0
- package/cli/dist/commands/pack.d.ts +70 -0
- package/cli/dist/commands/pack.js +413 -0
- package/cli/dist/commands/regression.d.ts +8 -0
- package/cli/dist/commands/regression.js +340 -0
- package/cli/dist/commands/repair.d.ts +26 -0
- package/cli/dist/commands/repair.js +307 -0
- package/cli/dist/commands/report.d.ts +62 -0
- package/cli/dist/commands/report.js +378 -0
- package/cli/dist/commands/retry.d.ts +43 -0
- package/cli/dist/commands/retry.js +275 -0
- package/cli/dist/commands/run.d.ts +41 -0
- package/cli/dist/commands/run.js +171 -0
- package/cli/dist/commands/scan.d.ts +5 -0
- package/cli/dist/commands/scan.js +155 -0
- package/cli/dist/commands/secrets.d.ts +58 -0
- package/cli/dist/commands/secrets.js +289 -0
- package/cli/dist/commands/serve.d.ts +13 -0
- package/cli/dist/commands/serve.js +156 -0
- package/cli/dist/commands/slo.d.ts +8 -0
- package/cli/dist/commands/slo.js +327 -0
- package/cli/dist/commands/verify.d.ts +32 -0
- package/cli/dist/commands/verify.js +278 -0
- package/cli/dist/core/adapters/gitleaks-secrets.d.ts +114 -0
- package/cli/dist/core/adapters/gitleaks-secrets.js +410 -0
- package/cli/dist/core/adapters/jest-adapter.d.ts +44 -0
- package/cli/dist/core/adapters/jest-adapter.js +261 -0
- package/cli/dist/core/adapters/k6-perf.d.ts +85 -0
- package/cli/dist/core/adapters/k6-perf.js +398 -0
- package/cli/dist/core/adapters/osv-deps.d.ts +123 -0
- package/cli/dist/core/adapters/osv-deps.js +372 -0
- package/cli/dist/core/adapters/playwright-native-adapter.d.ts +121 -0
- package/cli/dist/core/adapters/playwright-native-adapter.js +339 -0
- package/cli/dist/core/adapters/playwright-native-api.d.ts +183 -0
- package/cli/dist/core/adapters/playwright-native-api.js +465 -0
- package/cli/dist/core/adapters/playwright-ui.d.ts +197 -0
- package/cli/dist/core/adapters/playwright-ui.js +864 -0
- package/cli/dist/core/adapters/pytest-adapter.d.ts +49 -0
- package/cli/dist/core/adapters/pytest-adapter.js +324 -0
- package/cli/dist/core/adapters/semgrep-sast.d.ts +99 -0
- package/cli/dist/core/adapters/semgrep-sast.js +322 -0
- package/cli/dist/core/adapters/unit-test-types.d.ts +119 -0
- package/cli/dist/core/adapters/unit-test-types.js +6 -0
- package/cli/dist/core/adapters/vitest-adapter.d.ts +46 -0
- package/cli/dist/core/adapters/vitest-adapter.js +272 -0
- package/cli/dist/core/adapters/zap-dast.d.ts +133 -0
- package/cli/dist/core/adapters/zap-dast.js +424 -0
- package/cli/dist/core/ai/anthropic-provider.d.ts +50 -0
- package/cli/dist/core/ai/anthropic-provider.js +223 -0
- package/cli/dist/core/ai/deepseek-provider.d.ts +81 -0
- package/cli/dist/core/ai/deepseek-provider.js +266 -0
- package/cli/dist/core/ai/index.d.ts +60 -0
- package/cli/dist/core/ai/index.js +18 -0
- package/cli/dist/core/ai/llm-client.d.ts +45 -0
- package/cli/dist/core/ai/llm-client.js +7 -0
- package/cli/dist/core/ai/mock-provider.d.ts +49 -0
- package/cli/dist/core/ai/mock-provider.js +121 -0
- package/cli/dist/core/ai/ollama-provider.d.ts +78 -0
- package/cli/dist/core/ai/ollama-provider.js +216 -0
- package/cli/dist/core/ai/openai-provider.d.ts +48 -0
- package/cli/dist/core/ai/openai-provider.js +200 -0
- package/cli/dist/core/ai/provider-factory.d.ts +160 -0
- package/cli/dist/core/ai/provider-factory.js +269 -0
- package/cli/dist/core/artifacts/index.d.ts +6 -0
- package/cli/dist/core/artifacts/index.js +6 -0
- package/cli/dist/core/artifacts/ui-artifacts.d.ts +133 -0
- package/cli/dist/core/artifacts/ui-artifacts.js +304 -0
- package/cli/dist/core/assertions/engine.d.ts +51 -0
- package/cli/dist/core/assertions/engine.js +530 -0
- package/cli/dist/core/assertions/index.d.ts +11 -0
- package/cli/dist/core/assertions/index.js +11 -0
- package/cli/dist/core/assertions/types.d.ts +121 -0
- package/cli/dist/core/assertions/types.js +37 -0
- package/cli/dist/core/auth/api-key-provider.d.ts +16 -0
- package/cli/dist/core/auth/api-key-provider.js +63 -0
- package/cli/dist/core/auth/aws-iam-provider.d.ts +35 -0
- package/cli/dist/core/auth/aws-iam-provider.js +177 -0
- package/cli/dist/core/auth/azure-ad-provider.d.ts +15 -0
- package/cli/dist/core/auth/azure-ad-provider.js +99 -0
- package/cli/dist/core/auth/basic-auth-provider.d.ts +26 -0
- package/cli/dist/core/auth/basic-auth-provider.js +111 -0
- package/cli/dist/core/auth/gcp-adc-provider.d.ts +27 -0
- package/cli/dist/core/auth/gcp-adc-provider.js +126 -0
- package/cli/dist/core/auth/index.d.ts +238 -0
- package/cli/dist/core/auth/index.js +82 -0
- package/cli/dist/core/auth/jwt-provider.d.ts +19 -0
- package/cli/dist/core/auth/jwt-provider.js +160 -0
- package/cli/dist/core/auth/manager.d.ts +84 -0
- package/cli/dist/core/auth/manager.js +230 -0
- package/cli/dist/core/auth/oauth2-provider.d.ts +17 -0
- package/cli/dist/core/auth/oauth2-provider.js +114 -0
- package/cli/dist/core/auth/totp-provider.d.ts +31 -0
- package/cli/dist/core/auth/totp-provider.js +134 -0
- package/cli/dist/core/auth/ui-login-provider.d.ts +26 -0
- package/cli/dist/core/auth/ui-login-provider.js +198 -0
- package/cli/dist/core/cache/index.d.ts +7 -0
- package/cli/dist/core/cache/index.js +6 -0
- package/cli/dist/core/cache/lru-cache.d.ts +203 -0
- package/cli/dist/core/cache/lru-cache.js +397 -0
- package/cli/dist/core/coverage/analyzer.d.ts +101 -0
- package/cli/dist/core/coverage/analyzer.js +415 -0
- package/cli/dist/core/coverage/collector.d.ts +74 -0
- package/cli/dist/core/coverage/collector.js +459 -0
- package/cli/dist/core/coverage/config.d.ts +37 -0
- package/cli/dist/core/coverage/config.js +156 -0
- package/cli/dist/core/coverage/index.d.ts +11 -0
- package/cli/dist/core/coverage/index.js +15 -0
- package/cli/dist/core/coverage/types.d.ts +267 -0
- package/cli/dist/core/coverage/types.js +6 -0
- package/cli/dist/core/coverage/vault.d.ts +95 -0
- package/cli/dist/core/coverage/vault.js +405 -0
- package/cli/dist/core/crawler/index.d.ts +57 -0
- package/cli/dist/core/crawler/index.js +281 -0
- package/cli/dist/core/crawler/journey-generator.d.ts +49 -0
- package/cli/dist/core/crawler/journey-generator.js +412 -0
- package/cli/dist/core/crawler/page-analyzer.d.ts +88 -0
- package/cli/dist/core/crawler/page-analyzer.js +709 -0
- package/cli/dist/core/crawler/selector-generator.d.ts +34 -0
- package/cli/dist/core/crawler/selector-generator.js +309 -0
- package/cli/dist/core/crawler/types.d.ts +353 -0
- package/cli/dist/core/crawler/types.js +6 -0
- package/cli/dist/core/dashboard/assets.d.ts +6 -0
- package/cli/dist/core/dashboard/assets.js +690 -0
- package/cli/dist/core/dashboard/index.d.ts +6 -0
- package/cli/dist/core/dashboard/index.js +5 -0
- package/cli/dist/core/dashboard/server.d.ts +72 -0
- package/cli/dist/core/dashboard/server.js +354 -0
- package/cli/dist/core/dashboard/types.d.ts +70 -0
- package/cli/dist/core/dashboard/types.js +5 -0
- package/cli/dist/core/discoverer/index.d.ts +115 -0
- package/cli/dist/core/discoverer/index.js +250 -0
- package/cli/dist/core/fixtures/index.d.ts +8 -0
- package/cli/dist/core/fixtures/index.js +8 -0
- package/cli/dist/core/fixtures/loader.d.ts +65 -0
- package/cli/dist/core/fixtures/loader.js +161 -0
- package/cli/dist/core/fixtures/resolver.d.ts +79 -0
- package/cli/dist/core/fixtures/resolver.js +181 -0
- package/cli/dist/core/fixtures/types.d.ts +75 -0
- package/cli/dist/core/fixtures/types.js +30 -0
- package/cli/dist/core/flakiness/index.d.ts +228 -0
- package/cli/dist/core/flakiness/index.js +384 -0
- package/cli/dist/core/generation/code-formatter.d.ts +111 -0
- package/cli/dist/core/generation/code-formatter.js +307 -0
- package/cli/dist/core/generation/code-generator.d.ts +144 -0
- package/cli/dist/core/generation/code-generator.js +293 -0
- package/cli/dist/core/generation/crawler-pack-generator.d.ts +44 -0
- package/cli/dist/core/generation/crawler-pack-generator.js +245 -0
- package/cli/dist/core/generation/generator.d.ts +40 -0
- package/cli/dist/core/generation/generator.js +76 -0
- package/cli/dist/core/generation/index.d.ts +32 -0
- package/cli/dist/core/generation/index.js +30 -0
- package/cli/dist/core/generation/pack-generator.d.ts +107 -0
- package/cli/dist/core/generation/pack-generator.js +416 -0
- package/cli/dist/core/generation/prompt-builder.d.ts +132 -0
- package/cli/dist/core/generation/prompt-builder.js +672 -0
- package/cli/dist/core/generation/source-analyzer.d.ts +213 -0
- package/cli/dist/core/generation/source-analyzer.js +657 -0
- package/cli/dist/core/generation/test-optimizer.d.ts +117 -0
- package/cli/dist/core/generation/test-optimizer.js +328 -0
- package/cli/dist/core/generation/types.d.ts +214 -0
- package/cli/dist/core/generation/types.js +4 -0
- package/cli/dist/core/hooks/compose.d.ts +61 -0
- package/cli/dist/core/hooks/compose.js +225 -0
- package/cli/dist/core/hooks/runner.d.ts +68 -0
- package/cli/dist/core/hooks/runner.js +303 -0
- package/cli/dist/core/index.d.ts +110 -0
- package/cli/dist/core/index.js +99 -0
- package/cli/dist/core/pack/migrator.d.ts +51 -0
- package/cli/dist/core/pack/migrator.js +304 -0
- package/cli/dist/core/pack/validator.d.ts +42 -0
- package/cli/dist/core/pack/validator.js +330 -0
- package/cli/dist/core/pack-v2/index.d.ts +9 -0
- package/cli/dist/core/pack-v2/index.js +8 -0
- package/cli/dist/core/pack-v2/loader.d.ts +63 -0
- package/cli/dist/core/pack-v2/loader.js +292 -0
- package/cli/dist/core/pack-v2/migrator.d.ts +62 -0
- package/cli/dist/core/pack-v2/migrator.js +505 -0
- package/cli/dist/core/pack-v2/validator.d.ts +65 -0
- package/cli/dist/core/pack-v2/validator.js +629 -0
- package/cli/dist/core/parallel/index.d.ts +6 -0
- package/cli/dist/core/parallel/index.js +6 -0
- package/cli/dist/core/parallel/parallel-runner.d.ts +107 -0
- package/cli/dist/core/parallel/parallel-runner.js +192 -0
- package/cli/dist/core/pom/base-page.d.ts +237 -0
- package/cli/dist/core/pom/base-page.js +354 -0
- package/cli/dist/core/pom/index.d.ts +22 -0
- package/cli/dist/core/pom/index.js +23 -0
- package/cli/dist/core/pom/loader.d.ts +118 -0
- package/cli/dist/core/pom/loader.js +382 -0
- package/cli/dist/core/pom/types.d.ts +112 -0
- package/cli/dist/core/pom/types.js +9 -0
- package/cli/dist/core/proof/bundle.d.ts +137 -0
- package/cli/dist/core/proof/bundle.js +160 -0
- package/cli/dist/core/proof/canonicalize.d.ts +47 -0
- package/cli/dist/core/proof/canonicalize.js +105 -0
- package/cli/dist/core/proof/index.d.ts +13 -0
- package/cli/dist/core/proof/index.js +18 -0
- package/cli/dist/core/proof/schema.d.ts +217 -0
- package/cli/dist/core/proof/schema.js +263 -0
- package/cli/dist/core/proof/signer.d.ts +111 -0
- package/cli/dist/core/proof/signer.js +226 -0
- package/cli/dist/core/proof/verifier.d.ts +97 -0
- package/cli/dist/core/proof/verifier.js +308 -0
- package/cli/dist/core/regression/detector.d.ts +107 -0
- package/cli/dist/core/regression/detector.js +497 -0
- package/cli/dist/core/regression/index.d.ts +9 -0
- package/cli/dist/core/regression/index.js +11 -0
- package/cli/dist/core/regression/trend-analyzer.d.ts +102 -0
- package/cli/dist/core/regression/trend-analyzer.js +345 -0
- package/cli/dist/core/regression/types.d.ts +222 -0
- package/cli/dist/core/regression/types.js +7 -0
- package/cli/dist/core/regression/vault.d.ts +87 -0
- package/cli/dist/core/regression/vault.js +289 -0
- package/cli/dist/core/repair/engine/fixer.d.ts +24 -0
- package/cli/dist/core/repair/engine/fixer.js +226 -0
- package/cli/dist/core/repair/engine/suggestion-engine.d.ts +18 -0
- package/cli/dist/core/repair/engine/suggestion-engine.js +187 -0
- package/cli/dist/core/repair/index.d.ts +10 -0
- package/cli/dist/core/repair/index.js +13 -0
- package/cli/dist/core/repair/repairer.d.ts +90 -0
- package/cli/dist/core/repair/repairer.js +284 -0
- package/cli/dist/core/repair/types.d.ts +91 -0
- package/cli/dist/core/repair/types.js +6 -0
- package/cli/dist/core/repair/utils/error-analyzer.d.ts +28 -0
- package/cli/dist/core/repair/utils/error-analyzer.js +264 -0
- package/cli/dist/core/reporting/html-reporter.d.ts +119 -0
- package/cli/dist/core/reporting/html-reporter.js +737 -0
- package/cli/dist/core/reporting/index.d.ts +6 -0
- package/cli/dist/core/reporting/index.js +6 -0
- package/cli/dist/core/retry/flakiness-integration.d.ts +60 -0
- package/cli/dist/core/retry/flakiness-integration.js +228 -0
- package/cli/dist/core/retry/index.d.ts +14 -0
- package/cli/dist/core/retry/index.js +16 -0
- package/cli/dist/core/retry/retry-engine.d.ts +80 -0
- package/cli/dist/core/retry/retry-engine.js +296 -0
- package/cli/dist/core/retry/types.d.ts +178 -0
- package/cli/dist/core/retry/types.js +52 -0
- package/cli/dist/core/retry/vault.d.ts +77 -0
- package/cli/dist/core/retry/vault.js +304 -0
- package/cli/dist/core/runner/e2e-helpers.d.ts +102 -0
- package/cli/dist/core/runner/e2e-helpers.js +153 -0
- package/cli/dist/core/runner/phase3-runner.d.ts +249 -0
- package/cli/dist/core/runner/phase3-runner.js +1323 -0
- package/cli/dist/core/schemas/pack.schema.json +236 -0
- package/cli/dist/core/secrets/crypto.d.ts +75 -0
- package/cli/dist/core/secrets/crypto.js +223 -0
- package/cli/dist/core/secrets/manager.d.ts +76 -0
- package/cli/dist/core/secrets/manager.js +219 -0
- package/cli/dist/core/security/redaction-patterns-extended.d.ts +27 -0
- package/cli/dist/core/security/redaction-patterns-extended.js +247 -0
- package/cli/dist/core/security/redactor.d.ts +71 -0
- package/cli/dist/core/security/redactor.js +279 -0
- package/cli/dist/core/self-healing/assertion-healer.d.ts +97 -0
- package/cli/dist/core/self-healing/assertion-healer.js +371 -0
- package/cli/dist/core/self-healing/engine.d.ts +122 -0
- package/cli/dist/core/self-healing/engine.js +538 -0
- package/cli/dist/core/self-healing/index.d.ts +10 -0
- package/cli/dist/core/self-healing/index.js +11 -0
- package/cli/dist/core/self-healing/selector-healer.d.ts +103 -0
- package/cli/dist/core/self-healing/selector-healer.js +372 -0
- package/cli/dist/core/self-healing/types.d.ts +152 -0
- package/cli/dist/core/self-healing/types.js +6 -0
- package/cli/dist/core/serve/diagnostics-collector.d.ts +32 -0
- package/cli/dist/core/serve/diagnostics-collector.js +149 -0
- package/cli/dist/core/serve/health-checker.d.ts +44 -0
- package/cli/dist/core/serve/health-checker.js +219 -0
- package/cli/dist/core/serve/index.d.ts +8 -0
- package/cli/dist/core/serve/index.js +8 -0
- package/cli/dist/core/serve/metrics-collector.d.ts +24 -0
- package/cli/dist/core/serve/metrics-collector.js +322 -0
- package/cli/dist/core/serve/process-manager.d.ts +36 -0
- package/cli/dist/core/serve/process-manager.js +213 -0
- package/cli/dist/core/serve/server.d.ts +36 -0
- package/cli/dist/core/serve/server.js +191 -0
- package/cli/dist/core/slo/config.d.ts +107 -0
- package/cli/dist/core/slo/config.js +360 -0
- package/cli/dist/core/slo/index.d.ts +11 -0
- package/cli/dist/core/slo/index.js +15 -0
- package/cli/dist/core/slo/sli-calculator.d.ts +92 -0
- package/cli/dist/core/slo/sli-calculator.js +364 -0
- package/cli/dist/core/slo/slo-tracker.d.ts +148 -0
- package/cli/dist/core/slo/slo-tracker.js +379 -0
- package/cli/dist/core/slo/types.d.ts +281 -0
- package/cli/dist/core/slo/types.js +7 -0
- package/cli/dist/core/slo/vault.d.ts +102 -0
- package/cli/dist/core/slo/vault.js +427 -0
- package/cli/dist/core/tui/index.d.ts +7 -0
- package/cli/dist/core/tui/index.js +6 -0
- package/cli/dist/core/tui/monitor.d.ts +92 -0
- package/cli/dist/core/tui/monitor.js +271 -0
- package/cli/dist/core/tui/renderer.d.ts +33 -0
- package/cli/dist/core/tui/renderer.js +218 -0
- package/cli/dist/core/tui/types.d.ts +63 -0
- package/cli/dist/core/tui/types.js +5 -0
- package/cli/dist/core/types/pack-v1.d.ts +251 -0
- package/cli/dist/core/types/pack-v1.js +5 -0
- package/cli/dist/core/types/pack-v2.d.ts +456 -0
- package/cli/dist/core/types/pack-v2.js +8 -0
- package/cli/dist/core/types/trust-score.d.ts +69 -0
- package/cli/dist/core/types/trust-score.js +191 -0
- package/cli/dist/core/vault/cas.d.ts +90 -0
- package/cli/dist/core/vault/cas.js +261 -0
- package/cli/dist/core/vault/index.d.ts +326 -0
- package/cli/dist/core/vault/index.js +1042 -0
- package/cli/dist/core/visual/index.d.ts +6 -0
- package/cli/dist/core/visual/index.js +6 -0
- package/cli/dist/core/visual/visual-regression.d.ts +113 -0
- package/cli/dist/core/visual/visual-regression.js +236 -0
- package/cli/dist/core/watch/index.d.ts +7 -0
- package/cli/dist/core/watch/index.js +6 -0
- package/cli/dist/core/watch/watch-mode.d.ts +213 -0
- package/cli/dist/core/watch/watch-mode.js +389 -0
- package/cli/dist/generators/index.d.ts +5 -0
- package/cli/dist/generators/index.js +5 -0
- package/cli/dist/generators/json-reporter.d.ts +10 -0
- package/cli/dist/generators/json-reporter.js +12 -0
- package/cli/dist/generators/test-generator.d.ts +18 -0
- package/cli/dist/generators/test-generator.js +78 -0
- package/cli/dist/index.d.ts +8 -0
- package/cli/dist/index.js +262 -0
- package/cli/dist/scanners/dom-scanner.d.ts +52 -0
- package/cli/dist/scanners/dom-scanner.js +296 -0
- package/cli/dist/scanners/index.d.ts +4 -0
- package/cli/dist/scanners/index.js +4 -0
- package/cli/dist/schemas/pack.schema.json +236 -0
- package/cli/dist/types/scan.d.ts +68 -0
- package/cli/dist/types/scan.js +4 -0
- package/cli/dist/utils/config.d.ts +35 -0
- package/cli/dist/utils/config.js +196 -0
- package/cli/package.json +1 -1
- package/package.json +26 -2
- package/.BETA_TESTING_FEEDBACK.md +0 -256
- package/.claude/settings.local.json +0 -154
- package/.editorconfig +0 -21
- package/.github/CODEOWNERS +0 -23
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -108
- package/.github/ISSUE_TEMPLATE/feedback_dx.yml +0 -121
- package/.github/dependabot.yml +0 -35
- package/.github/workflows/mcp-dx.yml +0 -106
- package/.github/workflows/release.yml +0 -26
- package/.github/workflows/test.yml +0 -93
- package/.nvmrc +0 -1
- package/.qa360/vault.db +0 -0
- package/.qa360/vault.db-shm +0 -0
- package/.qa360/vault.db-wal +0 -0
- package/.qa360-artifacts/.gitkeep +0 -0
- package/.qa360-artifacts/baselines/.gitkeep +0 -0
- package/.qa360-artifacts/cache/.gitkeep +0 -0
- package/.qa360-artifacts/reports/.gitkeep +0 -0
- package/.qa360-artifacts/screenshots/.gitkeep +0 -0
- package/.qa360-baselines/www_xyqo_ai.baseline.json +0 -33
- package/CODEOWNERS +0 -43
- package/NOVICE_USER_GUIDE.md +0 -272
- package/adapters/README.md +0 -46
- package/check-branches.sh +0 -32
- package/cli/.qa360/keys/ed25519.key +0 -1
- package/cli/.qa360/keys/ed25519.pub +0 -1
- package/cli/examples/README.md +0 -160
- package/cli/examples/accessibility.yml +0 -48
- package/cli/examples/api-basic.yml +0 -27
- package/cli/examples/complete.yml +0 -146
- package/cli/examples/crawler.yml +0 -38
- package/cli/examples/fullstack.yml +0 -78
- package/cli/examples/security.yml +0 -58
- package/cli/examples/ui-advanced.yml +0 -49
- package/cli/examples/ui-basic.yml +0 -24
- package/cli/scripts/bundle-for-npm.sh +0 -51
- package/cli/scripts/validate-package.js +0 -116
- package/cli/src/__tests__/commands/doctor.test.ts +0 -108
- package/cli/src/__tests__/index.test.ts +0 -15
- package/cli/src/cli-minimal.ts +0 -44
- package/cli/src/commands/__tests__/crawl.test.ts +0 -412
- package/cli/src/commands/__tests__/doctor-qa360-home.test.ts +0 -156
- package/cli/src/commands/__tests__/e2e-ui-tests.test.ts +0 -494
- package/cli/src/commands/__tests__/e2e.test.ts +0 -187
- package/cli/src/commands/__tests__/flakiness.test.ts +0 -528
- package/cli/src/commands/__tests__/generate.test.ts +0 -507
- package/cli/src/commands/__tests__/history.integration.test.ts +0 -358
- package/cli/src/commands/__tests__/history.test.ts +0 -433
- package/cli/src/commands/__tests__/monitor-realworld.test.ts +0 -199
- package/cli/src/commands/__tests__/monitor.test.ts +0 -81
- package/cli/src/commands/__tests__/ollama.test.ts +0 -529
- package/cli/src/commands/__tests__/repair.test.ts +0 -225
- package/cli/src/commands/__tests__/report.integration.test.ts +0 -167
- package/cli/src/commands/__tests__/report.test.ts +0 -294
- package/cli/src/commands/__tests__/report.vitest.ts +0 -288
- package/cli/src/commands/__tests__/retry.test.ts +0 -78
- package/cli/src/commands/__tests__/run.integration.test.ts +0 -240
- package/cli/src/commands/__tests__/run.test.ts +0 -346
- package/cli/src/commands/__tests__/run.vitest.ts +0 -301
- package/cli/src/commands/__tests__/secrets.test.ts +0 -114
- package/cli/src/commands/__tests__/serve.test.ts +0 -80
- package/cli/src/commands/__tests__/verify.test.ts +0 -103
- package/cli/src/commands/ai.ts +0 -702
- package/cli/src/commands/ask.ts +0 -678
- package/cli/src/commands/coverage.ts +0 -305
- package/cli/src/commands/crawl.ts +0 -155
- package/cli/src/commands/doctor.ts +0 -610
- package/cli/src/commands/examples.ts +0 -248
- package/cli/src/commands/explain.ts +0 -710
- package/cli/src/commands/flakiness.ts +0 -560
- package/cli/src/commands/generate.ts +0 -566
- package/cli/src/commands/history.ts +0 -914
- package/cli/src/commands/init.ts +0 -777
- package/cli/src/commands/monitor.ts +0 -270
- package/cli/src/commands/ollama.ts +0 -337
- package/cli/src/commands/pack.ts +0 -497
- package/cli/src/commands/regression.ts +0 -400
- package/cli/src/commands/repair.ts +0 -356
- package/cli/src/commands/report.ts +0 -463
- package/cli/src/commands/retry.ts +0 -380
- package/cli/src/commands/run.ts +0 -220
- package/cli/src/commands/scan.ts +0 -177
- package/cli/src/commands/secrets.ts +0 -340
- package/cli/src/commands/serve.ts +0 -194
- package/cli/src/commands/slo.ts +0 -387
- package/cli/src/commands/verify-temp-note.md +0 -11
- package/cli/src/commands/verify.ts +0 -322
- package/cli/src/generators/index.ts +0 -6
- package/cli/src/generators/json-reporter.ts +0 -15
- package/cli/src/generators/test-generator.ts +0 -90
- package/cli/src/index.ts +0 -289
- package/cli/src/scanners/dom-scanner.ts +0 -360
- package/cli/src/scanners/index.ts +0 -5
- package/cli/src/types/scan.ts +0 -84
- package/cli/src/utils/config.ts +0 -145
- package/cli/tsconfig.bundle.json +0 -12
- package/cli/tsconfig.json +0 -23
- package/cli/vitest.config.ts +0 -59
- package/core/src/__tests__/adapters-contract/adapters-contract.test.md +0 -156
- package/core/src/__tests__/index.test.ts +0 -31
- package/core/src/__tests__/integration/phase3.test.ts +0 -405
- package/core/src/__tests__/pack/validator.test.ts +0 -312
- package/core/src/__tests__/secrets/crypto.test.ts +0 -190
- package/core/src/__tests__/secrets/manager.test.ts +0 -316
- package/core/src/__tests__/security/redactor-phase3.test.ts +0 -233
- package/core/src/__tests__/serve/health-checker.test.ts +0 -155
- package/core/src/__tests__/serve/process-manager.test.ts +0 -213
- package/core/src/__tests__/serve/server.test.ts +0 -103
- package/core/src/__tests__/vault/cas.test.ts +0 -178
- package/core/src/__tests__/vault/vault.test.ts +0 -296
- package/core/src/adapters/__tests__/fixtures/jest-coverage.json +0 -8
- package/core/src/adapters/__tests__/fixtures/jest-results.json +0 -41
- package/core/src/adapters/__tests__/fixtures/pytest-junit.xml +0 -16
- package/core/src/adapters/__tests__/fixtures/vitest-coverage.json +0 -8
- package/core/src/adapters/__tests__/fixtures/vitest-results.json +0 -50
- package/core/src/adapters/__tests__/gitleaks-secrets.test.ts +0 -452
- package/core/src/adapters/__tests__/jest-adapter.test.ts +0 -276
- package/core/src/adapters/__tests__/k6-perf.test.ts +0 -538
- package/core/src/adapters/__tests__/osv-deps.test.ts +0 -471
- package/core/src/adapters/__tests__/playwright-native-api.test.ts +0 -792
- package/core/src/adapters/__tests__/playwright-ui-e2e.test.ts +0 -431
- package/core/src/adapters/__tests__/playwright-ui.test.ts +0 -1073
- package/core/src/adapters/__tests__/pytest-adapter.test.ts +0 -207
- package/core/src/adapters/__tests__/semgrep-sast.test.ts +0 -436
- package/core/src/adapters/__tests__/vitest-adapter.test.ts +0 -208
- package/core/src/adapters/__tests__/zap-dast.test.ts +0 -453
- package/core/src/adapters/gitleaks-secrets.ts +0 -521
- package/core/src/adapters/jest-adapter.ts +0 -306
- package/core/src/adapters/k6-perf.ts +0 -479
- package/core/src/adapters/osv-deps.ts +0 -467
- package/core/src/adapters/playwright-native-adapter.ts +0 -472
- package/core/src/adapters/playwright-native-api.ts +0 -619
- package/core/src/adapters/playwright-ui.ts +0 -1088
- package/core/src/adapters/pytest-adapter.ts +0 -472
- package/core/src/adapters/semgrep-sast.ts +0 -410
- package/core/src/adapters/unit-test-types.ts +0 -106
- package/core/src/adapters/vitest-adapter.ts +0 -295
- package/core/src/adapters/zap-dast.ts +0 -551
- package/core/src/ai/__tests__/deepseek-provider.test.ts +0 -586
- package/core/src/ai/__tests__/ollama-provider.test.ts +0 -641
- package/core/src/ai/anthropic-provider.ts +0 -262
- package/core/src/ai/deepseek-provider.ts +0 -315
- package/core/src/ai/index.ts +0 -87
- package/core/src/ai/llm-client.ts +0 -52
- package/core/src/ai/mock-provider.ts +0 -146
- package/core/src/ai/ollama-provider.ts +0 -269
- package/core/src/ai/openai-provider.ts +0 -240
- package/core/src/ai/provider-factory.ts +0 -408
- package/core/src/artifacts/README.md +0 -78
- package/core/src/artifacts/index.ts +0 -16
- package/core/src/artifacts/ui-artifacts.ts +0 -412
- package/core/src/assertions/__tests__/engine.test.ts +0 -360
- package/core/src/assertions/engine.ts +0 -577
- package/core/src/assertions/index.ts +0 -13
- package/core/src/assertions/types.ts +0 -229
- package/core/src/auth/__tests__/api-key-provider.test.ts +0 -282
- package/core/src/auth/__tests__/auth-manager.test.ts +0 -430
- package/core/src/auth/__tests__/basic-auth-provider.test.ts +0 -364
- package/core/src/auth/__tests__/cloud-providers.test.ts +0 -751
- package/core/src/auth/__tests__/jwt-provider.test.ts +0 -400
- package/core/src/auth/__tests__/oauth2-provider.test.ts +0 -383
- package/core/src/auth/__tests__/totp-provider.test.ts +0 -294
- package/core/src/auth/__tests__/ui-login-provider.test.ts +0 -323
- package/core/src/auth/api-key-provider.ts +0 -75
- package/core/src/auth/aws-iam-provider.ts +0 -212
- package/core/src/auth/azure-ad-provider.ts +0 -126
- package/core/src/auth/basic-auth-provider.ts +0 -133
- package/core/src/auth/gcp-adc-provider.ts +0 -146
- package/core/src/auth/index.ts +0 -342
- package/core/src/auth/jwt-provider.ts +0 -193
- package/core/src/auth/manager.ts +0 -281
- package/core/src/auth/oauth2-provider.ts +0 -141
- package/core/src/auth/totp-provider.ts +0 -163
- package/core/src/auth/ui-login-provider.ts +0 -242
- package/core/src/cache/__tests__/lru-cache.test.ts +0 -564
- package/core/src/cache/index.ts +0 -13
- package/core/src/cache/lru-cache.ts +0 -536
- package/core/src/crawler/__tests__/journey-generator.test.ts +0 -344
- package/core/src/crawler/__tests__/selector-generator.test.ts +0 -211
- package/core/src/crawler/index.ts +0 -335
- package/core/src/crawler/journey-generator.ts +0 -471
- package/core/src/crawler/page-analyzer.ts +0 -857
- package/core/src/crawler/selector-generator.ts +0 -280
- package/core/src/crawler/types.ts +0 -475
- package/core/src/dashboard/__tests__/real-world.test.ts +0 -430
- package/core/src/dashboard/__tests__/server.test.ts +0 -283
- package/core/src/dashboard/__tests__/types.test.ts +0 -208
- package/core/src/dashboard/assets.ts +0 -692
- package/core/src/dashboard/index.ts +0 -17
- package/core/src/dashboard/server.ts +0 -401
- package/core/src/dashboard/types.ts +0 -78
- package/core/src/discoverer/__tests__/test-discoverer.test.ts +0 -444
- package/core/src/discoverer/index.ts +0 -374
- package/core/src/fixtures/__tests__/loader.test.ts +0 -246
- package/core/src/fixtures/__tests__/resolver.test.ts +0 -334
- package/core/src/fixtures/index.ts +0 -9
- package/core/src/fixtures/loader.ts +0 -200
- package/core/src/fixtures/resolver.ts +0 -221
- package/core/src/fixtures/types.ts +0 -86
- package/core/src/flakiness/__tests__/flakiness.test.ts +0 -554
- package/core/src/flakiness/index.ts +0 -536
- package/core/src/generation/__tests__/code-formatter.test.ts +0 -170
- package/core/src/generation/__tests__/code-generator-contract.test.ts +0 -207
- package/core/src/generation/__tests__/code-generator.test.ts +0 -586
- package/core/src/generation/__tests__/crawler-pack-generator.test.ts +0 -479
- package/core/src/generation/__tests__/generation-e2e-b2bshop.test.ts +0 -718
- package/core/src/generation/__tests__/generation-integration.test.ts +0 -655
- package/core/src/generation/__tests__/pack-generator.test.ts +0 -408
- package/core/src/generation/__tests__/prompt-builder.test.ts +0 -200
- package/core/src/generation/__tests__/real-provider-integration.test.ts +0 -414
- package/core/src/generation/__tests__/source-analyzer.test.ts +0 -774
- package/core/src/generation/__tests__/test-optimizer.test.ts +0 -255
- package/core/src/generation/code-formatter.ts +0 -408
- package/core/src/generation/code-generator.ts +0 -470
- package/core/src/generation/crawler-pack-generator.ts +0 -289
- package/core/src/generation/generator.ts +0 -113
- package/core/src/generation/index.ts +0 -59
- package/core/src/generation/pack-generator.ts +0 -527
- package/core/src/generation/prompt-builder.ts +0 -772
- package/core/src/generation/source-analyzer.ts +0 -830
- package/core/src/generation/test-optimizer.ts +0 -474
- package/core/src/generation/types.ts +0 -217
- package/core/src/hooks/__tests__/compose.test.ts +0 -636
- package/core/src/hooks/__tests__/runner.test.ts +0 -478
- package/core/src/hooks/compose.ts +0 -268
- package/core/src/hooks/runner.ts +0 -364
- package/core/src/index.ts +0 -255
- package/core/src/pack/__tests__/migrator.test.ts +0 -594
- package/core/src/pack/__tests__/validator.test.ts +0 -759
- package/core/src/pack/migrator.ts +0 -353
- package/core/src/pack/validator.ts +0 -359
- package/core/src/pack-v2/__tests__/loader.test.ts +0 -533
- package/core/src/pack-v2/__tests__/migrator.test.ts +0 -455
- package/core/src/pack-v2/__tests__/validator.test.ts +0 -609
- package/core/src/pack-v2/index.ts +0 -41
- package/core/src/pack-v2/loader.ts +0 -358
- package/core/src/pack-v2/migrator.ts +0 -540
- package/core/src/pack-v2/validator.ts +0 -731
- package/core/src/parallel/README.md +0 -143
- package/core/src/parallel/index.ts +0 -16
- package/core/src/parallel/parallel-runner.ts +0 -282
- package/core/src/pom/__tests__/loader.test.ts +0 -378
- package/core/src/pom/base-page.ts +0 -425
- package/core/src/pom/index.ts +0 -45
- package/core/src/pom/loader.ts +0 -480
- package/core/src/pom/types.ts +0 -146
- package/core/src/proof/__tests__/proof-roundtrip.test.ts +0 -149
- package/core/src/proof/__tests__/schema-validation-manual.mjs +0 -211
- package/core/src/proof/__tests__/schema-validation.test.ts +0 -336
- package/core/src/proof/__tests__/signer.test.ts +0 -486
- package/core/src/proof/__tests__/temporal-regression.test.ts +0 -537
- package/core/src/proof/__tests__/verifier-advanced.test.ts +0 -588
- package/core/src/proof/__tests__/verifier.test.ts +0 -413
- package/core/src/proof/bundle.ts +0 -290
- package/core/src/proof/canonicalize.ts +0 -116
- package/core/src/proof/index.ts +0 -74
- package/core/src/proof/schema.ts +0 -285
- package/core/src/proof/signer.ts +0 -293
- package/core/src/proof/verifier.ts +0 -380
- package/core/src/regression/__tests__/detector.test.ts +0 -396
- package/core/src/regression/__tests__/trend-analyzer.test.ts +0 -300
- package/core/src/regression/detector.ts +0 -629
- package/core/src/regression/index.ts +0 -34
- package/core/src/regression/trend-analyzer.ts +0 -468
- package/core/src/regression/types.ts +0 -295
- package/core/src/regression/vault.ts +0 -419
- package/core/src/repair/__tests__/repairer.test.ts +0 -572
- package/core/src/repair/__tests__/types.test.ts +0 -302
- package/core/src/repair/engine/__tests__/fixer.test.ts +0 -482
- package/core/src/repair/engine/__tests__/suggestion-engine.test.ts +0 -395
- package/core/src/repair/engine/fixer.ts +0 -271
- package/core/src/repair/engine/suggestion-engine.ts +0 -234
- package/core/src/repair/index.ts +0 -53
- package/core/src/repair/repairer.ts +0 -376
- package/core/src/repair/types.ts +0 -119
- package/core/src/repair/utils/__tests__/error-analyzer.test.ts +0 -454
- package/core/src/repair/utils/error-analyzer.ts +0 -308
- package/core/src/reporting/README.md +0 -144
- package/core/src/reporting/html-reporter.ts +0 -835
- package/core/src/reporting/index.ts +0 -16
- package/core/src/retry/README.md +0 -192
- package/core/src/retry/__tests__/flakiness-integration.test.ts +0 -475
- package/core/src/retry/__tests__/retry-engine.test.ts +0 -424
- package/core/src/retry/flakiness-integration.ts +0 -267
- package/core/src/retry/index.ts +0 -48
- package/core/src/retry/retry-engine.ts +0 -368
- package/core/src/retry/types.ts +0 -208
- package/core/src/retry/vault.ts +0 -413
- package/core/src/runner/__tests__/flakiness-integration.test.ts +0 -566
- package/core/src/runner/__tests__/phase3-e2e-b2bshop.test.ts +0 -218
- package/core/src/runner/__tests__/phase3-e2e-reqres.test.ts +0 -199
- package/core/src/runner/__tests__/phase3-runner.test.ts +0 -1118
- package/core/src/runner/e2e-helpers.ts +0 -216
- package/core/src/runner/phase3-runner.ts +0 -1536
- package/core/src/schemas/gherkin-report.json +0 -122
- package/core/src/secrets/__tests__/crypto.test.ts +0 -180
- package/core/src/secrets/crypto.ts +0 -289
- package/core/src/secrets/manager.ts +0 -272
- package/core/src/security/__tests__/hardening.test.ts +0 -480
- package/core/src/security/redaction-patterns-extended.ts +0 -278
- package/core/src/security/redactor.ts +0 -326
- package/core/src/self-healing/assertion-healer.ts +0 -485
- package/core/src/self-healing/engine.ts +0 -626
- package/core/src/self-healing/index.ts +0 -33
- package/core/src/self-healing/selector-healer.ts +0 -488
- package/core/src/self-healing/types.ts +0 -193
- package/core/src/serve/diagnostics-collector.ts +0 -201
- package/core/src/serve/health-checker.ts +0 -274
- package/core/src/serve/index.ts +0 -9
- package/core/src/serve/metrics-collector.ts +0 -386
- package/core/src/serve/process-manager.ts +0 -265
- package/core/src/serve/server.ts +0 -230
- package/core/src/slo/config.ts +0 -408
- package/core/src/slo/index.ts +0 -68
- package/core/src/slo/sli-calculator.ts +0 -474
- package/core/src/slo/slo-tracker.ts +0 -481
- package/core/src/slo/types.ts +0 -408
- package/core/src/slo/vault.ts +0 -600
- package/core/src/tui/__tests__/monitor.test.ts +0 -336
- package/core/src/tui/__tests__/real-world.test.ts +0 -376
- package/core/src/tui/__tests__/renderer.test.ts +0 -201
- package/core/src/tui/__tests__/types.test.ts +0 -295
- package/core/src/tui/index.ts +0 -19
- package/core/src/tui/monitor.ts +0 -331
- package/core/src/tui/renderer.ts +0 -269
- package/core/src/tui/types.ts +0 -68
- package/core/src/types/pack-v1.ts +0 -305
- package/core/src/types/pack-v2.ts +0 -525
- package/core/src/types/trust-score.ts +0 -258
- package/core/src/vault/__tests__/flakiness-vault.test.ts +0 -562
- package/core/src/vault/__tests__/vault.test.ts +0 -259
- package/core/src/vault/cas.ts +0 -323
- package/core/src/vault/index.ts +0 -1361
- package/core/src/vault/schema.sql +0 -168
- package/core/src/visual/README.md +0 -185
- package/core/src/visual/index.ts +0 -14
- package/core/src/visual/visual-regression.ts +0 -347
- package/core/src/watch/__tests__/watch-mode.test.ts +0 -192
- package/core/src/watch/index.ts +0 -14
- package/core/src/watch/watch-mode.ts +0 -565
- package/core/tsconfig.json +0 -12
- package/core/vitest.config.ts +0 -52
- package/docs/ARCHITECTURE.md +0 -901
- package/docs/AUDIT-GLOBAL-DEC2025.md +0 -271
- package/docs/BETA_TESTING.md +0 -257
- package/docs/BETA_TESTING_PLAN.md +0 -727
- package/docs/CERTIFICATION-REPORT.md +0 -142
- package/docs/COMPLETE_AUDIT_REFACTORING.md +0 -965
- package/docs/DEVELOPMENT.md +0 -545
- package/docs/DEVELOPMENT_HISTORY.md +0 -345
- package/docs/LIMITATIONS.md +0 -176
- package/docs/MIGRATION.md +0 -303
- package/docs/OPTION_3_4_EXPLORATION.md +0 -1257
- package/docs/PHASE1_PERFORMANCE.md +0 -144
- package/docs/QA360_Cloud.postman_collection.json +0 -89
- package/docs/QA360_TESTING_PHILOSOPHY.md +0 -769
- package/docs/QA_TEST_PLAN.md +0 -727
- package/docs/README.md +0 -50
- package/docs/STATUS.md +0 -198
- package/docs/STRATEGIC_STUDY_GOOSE_INTEGRATION.md +0 -615
- package/docs/USER_GUIDE.md +0 -687
- package/docs/WORK-DONE-ADAPTER-TESTS.md +0 -136
- package/docs/adapters-security.md +0 -485
- package/docs/architecture-diagram.mmd +0 -168
- package/docs/archive/ARCH-01-DAY6-BUILD-FIXES.md +0 -396
- package/docs/archive/ARCH-01-DAY6-FINAL-STATUS.md +0 -324
- package/docs/archive/ARCH-01_MCP_MERGE_ANALYSIS.md +0 -644
- package/docs/archive/ARCH-01_NEXT_STEPS.md +0 -60
- package/docs/archive/BRANCH_PROTECTION.md +0 -183
- package/docs/archive/CI_LOCKDOWN_CHECKLIST.md +0 -222
- package/docs/archive/HANDOFF_TEST-01.md +0 -669
- package/docs/archive/LEGAL_READY_PLACEHOLDERS.md +0 -372
- package/docs/archive/NODE_UPGRADE_GUIDE.md +0 -188
- package/docs/archive/PHASE1_COMPLETION.md +0 -386
- package/docs/archive/PHASE2_COMPLETION.md +0 -404
- package/docs/archive/PHASE3_AND_4_FINAL.md +0 -360
- package/docs/archive/PHASE3_COMPLETE.md +0 -301
- package/docs/archive/PHASE3_STATUS.md +0 -255
- package/docs/archive/PRE-WEEK2-AUDIT.md +0 -364
- package/docs/archive/README.md +0 -16
- package/docs/archive/SCHEMA_AJV_2020_FIX.md +0 -245
- package/docs/archive/TEST-01_AUDIT_REPORT.md +0 -240
- package/docs/archive/TEST-01_COVERAGE_PLAN.md +0 -423
- package/docs/archive/obsolete-proposals/dom-element-discovery-mode.md +0 -250
- package/docs/archive/obsolete-proposals/qa360-comprehensive-test-plan.md +0 -1249
- package/docs/archive/obsolete-proposals/qa360-quick-start-guide.md +0 -298
- package/docs/archive/obsolete-proposals/technical-plan-dom-discovery.md +0 -870
- package/docs/budgets-advanced.md +0 -308
- package/docs/examples/history-export-gc.md +0 -285
- package/docs/examples/pack-v2-complete.yaml +0 -158
- package/docs/examples/pack-v2-quickstart.yaml +0 -24
- package/docs/examples/pack-v2-ui-login.yaml +0 -81
- package/docs/examples/qa360-report.json +0 -50
- package/docs/history.md +0 -565
- package/docs/hooks.md +0 -304
- package/docs/llm-providers.md +0 -512
- package/docs/mcp-server.md +0 -651
- package/docs/mcp-tools.md +0 -1131
- package/docs/pack-v1.md +0 -383
- package/docs/pack-v2.md +0 -558
- package/docs/page-objects.md +0 -366
- package/docs/proofs.md +0 -670
- package/docs/quickstart-5min.md +0 -257
- package/docs/readiness-ci.md +0 -654
- package/docs/rfc/README.md +0 -20
- package/docs/rfc/proof-bundle-v1.md +0 -787
- package/docs/secrets.md +0 -392
- package/docs/serve.md +0 -494
- package/docs/unit-test-adapters.md +0 -168
- package/docs/vault.md +0 -491
- package/e2e/qa360-e2e.test.ts +0 -696
- package/e2e/vitest.config.ts +0 -18
- package/examples/README.md +0 -50
- package/examples/ci/docker-compose-serve.yml +0 -375
- package/examples/ci/github-actions-serve.yml +0 -345
- package/examples/ci/gitlab-ci-serve.yml +0 -407
- package/examples/datasets/README.md +0 -101
- package/examples/datasets/b2bshop.ts +0 -155
- package/examples/datasets/index.ts +0 -57
- package/examples/datasets/reqres.ts +0 -195
- package/examples/fixtures-demo/fixtures/users.yml +0 -39
- package/examples/fixtures-demo/pack.yml +0 -71
- package/examples/future-api/README.md +0 -16
- package/examples/future-api/diag.js +0 -7
- package/examples/future-api/health.js +0 -4
- package/examples/future-api/packs.js +0 -13
- package/examples/future-api/runpack.js +0 -10
- package/examples/generation/README.md +0 -148
- package/examples/generation/pack-generator-example.js +0 -115
- package/examples/generation/source-analyzer-example.js +0 -115
- package/examples/httpbin/pack.yml +0 -59
- package/examples/load-testing/mcp-load.yml +0 -115
- package/examples/load-testing/mcp-stdio.yml +0 -95
- package/examples/mcp/claude-desktop-config.json +0 -33
- package/examples/mcp/claude-desktop.json +0 -16
- package/examples/mcp/conversation-sample.md +0 -131
- package/examples/mcp/demo-60s.md +0 -330
- package/examples/mcp/sample-conversation.jsonl +0 -21
- package/examples/mcp/vscode-settings.json +0 -22
- package/examples/pack-v2-complete.yml +0 -242
- package/examples/pack-v2-examples.md +0 -244
- package/examples/pack-v2-quickstart.yml +0 -55
- package/examples/packs-business/ecommerce-api.yml +0 -121
- package/examples/packs-business/saas-dashboard-ui.yml +0 -133
- package/examples/packs-conformance/compose-multi.yml +0 -174
- package/examples/packs-conformance/full.yml +0 -152
- package/examples/packs-conformance/heavy-artifacts.yml +0 -152
- package/examples/packs-conformance/minimal.yml +0 -71
- package/examples/packs-conformance/secrets-missing.yml +0 -97
- package/examples/packs-conformance/timeouts.yml +0 -77
- package/examples/pom-demo/README.md +0 -104
- package/examples/pom-demo/pack.yml +0 -60
- package/examples/pom-demo/pages/DashboardPage.page.ts +0 -73
- package/examples/pom-demo/pages/LoginPage.page.ts +0 -76
- package/examples/proofs/e2e-playwright-proof.json +0 -75
- package/examples/proofs/httpbin-proof.json +0 -69
- package/examples/proofs/multi-adapter-proof.json +0 -117
- package/examples/proofs/test-proof.json +0 -26
- package/examples/restful-api-dev/README.md +0 -102
- package/examples/restful-api-dev/restful-api-advanced.yml +0 -29
- package/examples/restful-api-dev/restful-api-basic.yml +0 -29
- package/examples/web-lite/.github/workflows/qa360-phase3.yml +0 -73
- package/examples/web-lite/api-mock/server.js +0 -258
- package/examples/web-lite/pack.yml +0 -71
- package/examples/web-lite/services.yml +0 -43
- package/examples/web-lite/web-content/healthz +0 -1
- package/examples/web-lite/web-content/index.html +0 -259
- package/packages/mcp/CHANGELOG.md +0 -109
- package/packages/mcp/IMPLEMENTATION_SUMMARY.md +0 -350
- package/packages/mcp/LICENSE +0 -21
- package/packages/mcp/QUICK_START.md +0 -291
- package/packages/mcp/README.md +0 -294
- package/packages/mcp/TELEMETRY.md +0 -220
- package/packages/mcp/package.json +0 -91
- package/packages/mcp/scripts/generate-sbom-fallback.cjs +0 -84
- package/packages/mcp/scripts/safe-postinstall.cjs +0 -32
- package/packages/mcp/src/__tests__/contract.test.ts +0 -902
- package/packages/mcp/src/cli/cli.ts +0 -137
- package/packages/mcp/src/cli/doctor.ts +0 -286
- package/packages/mcp/src/cli/fix.ts +0 -99
- package/packages/mcp/src/cli/init.ts +0 -233
- package/packages/mcp/src/cli/postinstall.ts +0 -14
- package/packages/mcp/src/cli/reset.ts +0 -44
- package/packages/mcp/src/cli/telemetry.ts +0 -166
- package/packages/mcp/src/cli/test-dx.ts +0 -94
- package/packages/mcp/src/cli/uninstall.ts +0 -80
- package/packages/mcp/src/cli/up.ts +0 -178
- package/packages/mcp/src/index.ts +0 -12
- package/packages/mcp/src/scripts/e2e-local.ts +0 -337
- package/packages/mcp/src/scripts/verify-settings.ts +0 -242
- package/packages/mcp/src/security/audit.ts +0 -244
- package/packages/mcp/src/security/manager.ts +0 -242
- package/packages/mcp/src/server/full-server.ts +0 -212
- package/packages/mcp/src/server/minimal-server.ts +0 -134
- package/packages/mcp/src/tools/history.ts +0 -388
- package/packages/mcp/src/tools/pack.ts +0 -449
- package/packages/mcp/src/tools/registry.ts +0 -638
- package/packages/mcp/src/tools/report.ts +0 -100
- package/packages/mcp/src/tools/run.ts +0 -268
- package/packages/mcp/src/tools/secrets.ts +0 -198
- package/packages/mcp/src/tools/serve.ts +0 -221
- package/packages/mcp/src/tools/triage.ts +0 -532
- package/packages/mcp/src/tools/types.ts +0 -26
- package/packages/mcp/src/tools/vault.ts +0 -164
- package/packages/mcp/src/tools/verify.ts +0 -166
- package/packages/mcp/src/types/index.ts +0 -311
- package/packages/mcp/src/types/mcp-stubs.ts +0 -83
- package/packages/mcp/tsconfig.json +0 -16
- package/playwright.config.ts +0 -20
- package/pnpm-workspace.yaml +0 -4
- package/run-test-and-push.sh +0 -20
- package/scripts/build-proof-cli.sh +0 -110
- package/scripts/ci/check-windows-paths.js +0 -92
- package/scripts/ci/invariants.sh +0 -124
- package/scripts/ci/make-final-bundle.js +0 -106
- package/scripts/ci/mcp-run-multipack.js +0 -305
- package/scripts/ci/run-pack-suite.sh +0 -103
- package/scripts/ci/run-phase7-final.sh +0 -190
- package/scripts/ci/slo-assert.js +0 -158
- package/scripts/ci/test-fault-tolerance.sh +0 -301
- package/scripts/install-mcp.sh +0 -66
- package/scripts/mcp-smoke.mjs +0 -27
- package/scripts/smoke.sh +0 -26
- package/scripts/stress-test.js +0 -288
- package/scripts/sync-version.mjs +0 -50
- package/scripts/validate-examples.mjs +0 -404
- package/scripts/validation/simple-pack-check.sh +0 -51
- package/scripts/validation/validate-universal-pack.mjs +0 -77
- package/scripts/verify-persistence.js +0 -127
- package/test-pack.yaml +0 -43
- package/test-results/.last-run.json +0 -4
- package/test-runner.mjs +0 -87
- package/tests/artifacts.spec.js +0 -147
- package/tests/contracts.spec.js +0 -239
- package/tests/e2e/assertions.test.mjs +0 -370
- package/tests/e2e/crawler.test.mjs +0 -451
- package/tests/e2e/playwright-plus-plus.test.mjs +0 -604
- package/tests/e2e/proof-bundle.test.mjs +0 -258
- package/tests/e2e/real-world/saucedemo.test.mjs +0 -714
- package/tests/e2e/real-world/the-internet-herokuapp.test.mjs +0 -760
- package/tests/e2e/ui-actions.test.mjs +0 -546
- package/tests/gherkin.e2e.spec.ts +0 -310
- package/tests/no-console-errors.spec.js +0 -136
- package/tests/pdf.spec.ts +0 -252
- package/tests/run-pack.spec.ts +0 -58
- package/tsconfig.base.json +0 -15
- package/tsconfig.build.json +0 -8
- package/tsconfig.json +0 -37
- package/tsconfig.test.json +0 -18
- package/typedoc.json +0 -37
- package/ui/README.md +0 -50
- package/verify-proof.mjs +0 -60
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
// QA360 Gherkin E2E Tests
|
|
2
|
-
// Validates complete Gherkin + Traceability workflow
|
|
3
|
-
|
|
4
|
-
import { test, expect } from '@playwright/test';
|
|
5
|
-
|
|
6
|
-
test.describe('QA360 Gherkin + Traceability E2E', () => {
|
|
7
|
-
const baseURL = process.env.QA360_BASE_URL || 'https://qa360-cloud-preview.vercel.app';
|
|
8
|
-
const apiKey = process.env.QA360_API_KEY || '176402b75ec5a56176fc99a1139f3bd16268cd4b1e71798d5dd55c76f33b69de';
|
|
9
|
-
|
|
10
|
-
test('should generate and display Gherkin report for httpbin pack', async ({ page, request }) => {
|
|
11
|
-
// Step 1: Execute pack to generate Gherkin report
|
|
12
|
-
const runResponse = await request.post(`${baseURL}/api/pack`, {
|
|
13
|
-
headers: {
|
|
14
|
-
'content-type': 'application/json',
|
|
15
|
-
'x-qa360-api-key': apiKey
|
|
16
|
-
},
|
|
17
|
-
data: { pack: 'httpbin' }
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
expect(runResponse.ok()).toBeTruthy();
|
|
21
|
-
const runData = await runResponse.json();
|
|
22
|
-
expect(runData.success).toBe(true);
|
|
23
|
-
expect(runData.runId).toBeDefined();
|
|
24
|
-
expect(runData.gherkinAvailable).toBe(true);
|
|
25
|
-
|
|
26
|
-
// Step 2: Verify Gherkin report API endpoint
|
|
27
|
-
const gherkinResponse = await request.get(`${baseURL}/api/report/gherkin?pack=httpbin&runId=${runData.runId}`);
|
|
28
|
-
expect(gherkinResponse.ok()).toBeTruthy();
|
|
29
|
-
|
|
30
|
-
const gherkinData = await gherkinResponse.json();
|
|
31
|
-
expect(gherkinData.pack).toBe('httpbin');
|
|
32
|
-
expect(gherkinData.runId).toBe(runData.runId);
|
|
33
|
-
expect(gherkinData.summary).toBeDefined();
|
|
34
|
-
expect(gherkinData.routes).toBeDefined();
|
|
35
|
-
expect(gherkinData.routes.length).toBeGreaterThan(0);
|
|
36
|
-
|
|
37
|
-
// Validate Gherkin structure
|
|
38
|
-
const firstRoute = gherkinData.routes[0];
|
|
39
|
-
expect(firstRoute.method).toBeDefined();
|
|
40
|
-
expect(firstRoute.path).toBeDefined();
|
|
41
|
-
expect(firstRoute.scenarios).toBeDefined();
|
|
42
|
-
expect(firstRoute.scenarios.length).toBeGreaterThan(0);
|
|
43
|
-
|
|
44
|
-
const firstScenario = firstRoute.scenarios[0];
|
|
45
|
-
expect(firstScenario.feature).toBe('HTTPBin API Testing');
|
|
46
|
-
expect(firstScenario.scenario).toBeDefined();
|
|
47
|
-
expect(firstScenario.steps).toBeDefined();
|
|
48
|
-
expect(firstScenario.steps.length).toBe(3); // Given, When, Then
|
|
49
|
-
expect(firstScenario.sourceSpec).toBeDefined();
|
|
50
|
-
|
|
51
|
-
// Validate steps structure
|
|
52
|
-
const steps = firstScenario.steps;
|
|
53
|
-
expect(steps[0].type).toBe('Given');
|
|
54
|
-
expect(steps[1].type).toBe('When');
|
|
55
|
-
expect(steps[2].type).toBe('Then');
|
|
56
|
-
steps.forEach(step => {
|
|
57
|
-
expect(step.text).toBeDefined();
|
|
58
|
-
expect(step.status).toMatch(/^(passed|failed)$/);
|
|
59
|
-
expect(step.durationMs).toBeGreaterThanOrEqual(0);
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
// Step 3: Navigate to QA360 Cloud UI
|
|
63
|
-
await page.goto(baseURL);
|
|
64
|
-
await expect(page.locator('h1')).toContainText('QA360 Cloud Preview');
|
|
65
|
-
|
|
66
|
-
// Step 4: Execute pack from UI
|
|
67
|
-
await page.locator(`[data-pack="httpbin"] .run-btn`).click();
|
|
68
|
-
|
|
69
|
-
// Wait for execution to complete
|
|
70
|
-
await expect(page.locator('.status.success')).toBeVisible({ timeout: 30000 });
|
|
71
|
-
|
|
72
|
-
// Step 5: Click Gherkin View link
|
|
73
|
-
const gherkinLink = page.locator('a:has-text("📋 Gherkin View")');
|
|
74
|
-
await expect(gherkinLink).toBeVisible();
|
|
75
|
-
await gherkinLink.click();
|
|
76
|
-
|
|
77
|
-
// Step 6: Verify Gherkin modal opens
|
|
78
|
-
const modal = page.locator('#gherkin-modal');
|
|
79
|
-
await expect(modal).toBeVisible();
|
|
80
|
-
await expect(page.locator('#gherkin-title')).toContainText('📋 Gherkin Report - httpbin');
|
|
81
|
-
|
|
82
|
-
// Step 7: Verify summary section
|
|
83
|
-
await expect(page.locator('.summary')).toBeVisible();
|
|
84
|
-
await expect(page.locator('.summary')).toContainText('Test Execution Summary');
|
|
85
|
-
await expect(page.locator('.stat-item')).toHaveCount(6); // Routes, Scenarios, Steps, Passed, Failed, Pass Rate
|
|
86
|
-
|
|
87
|
-
// Step 8: Verify route sections
|
|
88
|
-
const routeSections = page.locator('.route-section');
|
|
89
|
-
await expect(routeSections).toHaveCount(4); // HTTPBin has 4 routes
|
|
90
|
-
|
|
91
|
-
// Step 9: Test route expansion
|
|
92
|
-
const firstRouteHeader = routeSections.first().locator('.route-header');
|
|
93
|
-
await expect(firstRouteHeader).toBeVisible();
|
|
94
|
-
await expect(firstRouteHeader).toContainText('GET');
|
|
95
|
-
await expect(firstRouteHeader).toContainText('/status/200');
|
|
96
|
-
|
|
97
|
-
// Click to expand first route
|
|
98
|
-
await firstRouteHeader.click();
|
|
99
|
-
const firstRouteScenarios = routeSections.first().locator('.route-scenarios');
|
|
100
|
-
await expect(firstRouteScenarios).toHaveClass(/expanded/);
|
|
101
|
-
|
|
102
|
-
// Step 10: Verify scenario content
|
|
103
|
-
const scenario = firstRouteScenarios.locator('.scenario').first();
|
|
104
|
-
await expect(scenario).toBeVisible();
|
|
105
|
-
await expect(scenario).toContainText('Feature: HTTPBin API Testing');
|
|
106
|
-
await expect(scenario).toContainText('Scenario:');
|
|
107
|
-
|
|
108
|
-
// Step 11: Verify steps display
|
|
109
|
-
const stepElements = scenario.locator('.step');
|
|
110
|
-
await expect(stepElements).toHaveCount(3);
|
|
111
|
-
|
|
112
|
-
await expect(stepElements.nth(0)).toContainText('Given');
|
|
113
|
-
await expect(stepElements.nth(1)).toContainText('When');
|
|
114
|
-
await expect(stepElements.nth(2)).toContainText('Then');
|
|
115
|
-
|
|
116
|
-
// Step 12: Test filters
|
|
117
|
-
const passedFilter = page.locator('.filter-btn:has-text("✅ Passed")');
|
|
118
|
-
await passedFilter.click();
|
|
119
|
-
await expect(passedFilter).toHaveClass(/active/);
|
|
120
|
-
|
|
121
|
-
const failedFilter = page.locator('.filter-btn:has-text("❌ Failed")');
|
|
122
|
-
await failedFilter.click();
|
|
123
|
-
await expect(failedFilter).toHaveClass(/active/);
|
|
124
|
-
|
|
125
|
-
// Step 13: Test search functionality
|
|
126
|
-
const searchInput = page.locator('.search-input');
|
|
127
|
-
await searchInput.fill('HTTPBin');
|
|
128
|
-
await page.waitForTimeout(500); // Allow search to process
|
|
129
|
-
|
|
130
|
-
// Step 14: Test Expand All functionality
|
|
131
|
-
const expandAllBtn = page.locator('.filter-btn:has-text("Expand All")');
|
|
132
|
-
await expandAllBtn.click();
|
|
133
|
-
await expect(expandAllBtn).toContainText('Collapse All');
|
|
134
|
-
|
|
135
|
-
// Verify all routes are expanded
|
|
136
|
-
const allRouteScenarios = page.locator('.route-scenarios');
|
|
137
|
-
for (let i = 0; i < await allRouteScenarios.count(); i++) {
|
|
138
|
-
await expect(allRouteScenarios.nth(i)).toHaveClass(/expanded/);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// Step 15: Test source code viewer
|
|
142
|
-
const viewCodeLink = scenario.locator('a:has-text("💻 View Code")');
|
|
143
|
-
await viewCodeLink.click();
|
|
144
|
-
|
|
145
|
-
const sourceModal = page.locator('.source-modal');
|
|
146
|
-
await expect(sourceModal).toBeVisible();
|
|
147
|
-
await expect(sourceModal).toContainText('Source Code');
|
|
148
|
-
await expect(sourceModal).toContainText('HTTPBin API Test Suite');
|
|
149
|
-
await expect(sourceModal).toContainText('const { test, expect }');
|
|
150
|
-
|
|
151
|
-
// Close source modal
|
|
152
|
-
await sourceModal.locator('button').click();
|
|
153
|
-
await expect(sourceModal).not.toBeVisible();
|
|
154
|
-
|
|
155
|
-
// Step 16: Test PDF export link
|
|
156
|
-
const pdfLink = scenario.locator('a:has-text("📄 Export PDF")');
|
|
157
|
-
await expect(pdfLink).toBeVisible();
|
|
158
|
-
expect(await pdfLink.getAttribute('href')).toContain('/api/report/pdf');
|
|
159
|
-
|
|
160
|
-
// Step 17: Close Gherkin modal
|
|
161
|
-
await page.locator('.gherkin-close').click();
|
|
162
|
-
await expect(modal).not.toBeVisible();
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
test('should validate Gherkin report index endpoint', async ({ request }) => {
|
|
166
|
-
// Test the report index endpoint
|
|
167
|
-
const indexResponse = await request.get(`${baseURL}/api/report/index`);
|
|
168
|
-
expect(indexResponse.ok()).toBeTruthy();
|
|
169
|
-
|
|
170
|
-
const indexData = await indexResponse.json();
|
|
171
|
-
expect(indexData.reports).toBeDefined();
|
|
172
|
-
expect(indexData.total).toBeGreaterThanOrEqual(0);
|
|
173
|
-
expect(indexData.availablePacks).toBeDefined();
|
|
174
|
-
expect(Array.isArray(indexData.reports)).toBe(true);
|
|
175
|
-
expect(Array.isArray(indexData.availablePacks)).toBe(true);
|
|
176
|
-
|
|
177
|
-
// If reports exist, validate structure
|
|
178
|
-
if (indexData.reports.length > 0) {
|
|
179
|
-
const report = indexData.reports[0];
|
|
180
|
-
expect(report.pack).toBeDefined();
|
|
181
|
-
expect(report.runId).toBeDefined();
|
|
182
|
-
expect(report.timestamp).toBeDefined();
|
|
183
|
-
expect(report.duration).toBeGreaterThanOrEqual(0);
|
|
184
|
-
expect(report.passRate).toBeGreaterThanOrEqual(0);
|
|
185
|
-
expect(report.passRate).toBeLessThanOrEqual(100);
|
|
186
|
-
expect(report.totalTests).toBeGreaterThanOrEqual(0);
|
|
187
|
-
expect(report.passed).toBeGreaterThanOrEqual(0);
|
|
188
|
-
expect(report.failed).toBeGreaterThanOrEqual(0);
|
|
189
|
-
expect(report.routes).toBeGreaterThanOrEqual(0);
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
test('should validate PDF export functionality', async ({ request }) => {
|
|
194
|
-
// First run a pack to generate a report
|
|
195
|
-
const runResponse = await request.post(`${baseURL}/api/pack`, {
|
|
196
|
-
headers: {
|
|
197
|
-
'content-type': 'application/json',
|
|
198
|
-
'x-qa360-api-key': apiKey
|
|
199
|
-
},
|
|
200
|
-
data: { pack: 'httpbin' }
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
expect(runResponse.ok()).toBeTruthy();
|
|
204
|
-
const runData = await runResponse.json();
|
|
205
|
-
|
|
206
|
-
// Test PDF export endpoint
|
|
207
|
-
const pdfResponse = await request.get(`${baseURL}/api/report/pdf?pack=httpbin&runId=${runData.runId}`);
|
|
208
|
-
expect(pdfResponse.ok()).toBeTruthy();
|
|
209
|
-
|
|
210
|
-
const contentType = pdfResponse.headers()['content-type'];
|
|
211
|
-
expect(contentType).toContain('text/html');
|
|
212
|
-
|
|
213
|
-
const htmlContent = await pdfResponse.text();
|
|
214
|
-
expect(htmlContent).toContain('QA360 Cloud Intelligence');
|
|
215
|
-
expect(htmlContent).toContain('Enterprise Testing Platform');
|
|
216
|
-
expect(htmlContent).toContain('Test Execution Summary');
|
|
217
|
-
expect(htmlContent).toContain('HTTPBin API Testing');
|
|
218
|
-
expect(htmlContent).toContain('Document Signature:');
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
test('should validate multi-pack Gherkin generation', async ({ request }) => {
|
|
222
|
-
const packs = ['httpbin', 'petstore', 'custom-api'];
|
|
223
|
-
const results = [];
|
|
224
|
-
|
|
225
|
-
// Execute multiple packs
|
|
226
|
-
for (const pack of packs) {
|
|
227
|
-
const runResponse = await request.post(`${baseURL}/api/pack`, {
|
|
228
|
-
headers: {
|
|
229
|
-
'content-type': 'application/json',
|
|
230
|
-
'x-qa360-api-key': apiKey
|
|
231
|
-
},
|
|
232
|
-
data: { pack }
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
expect(runResponse.ok()).toBeTruthy();
|
|
236
|
-
const runData = await runResponse.json();
|
|
237
|
-
expect(runData.gherkinAvailable).toBe(true);
|
|
238
|
-
|
|
239
|
-
// Verify Gherkin report
|
|
240
|
-
const gherkinResponse = await request.get(`${baseURL}/api/report/gherkin?pack=${pack}&runId=${runData.runId}`);
|
|
241
|
-
expect(gherkinResponse.ok()).toBeTruthy();
|
|
242
|
-
|
|
243
|
-
const gherkinData = await gherkinResponse.json();
|
|
244
|
-
expect(gherkinData.pack).toBe(pack);
|
|
245
|
-
expect(gherkinData.routes).toBeDefined();
|
|
246
|
-
expect(gherkinData.routes.length).toBeGreaterThan(0);
|
|
247
|
-
|
|
248
|
-
results.push({ pack, runId: runData.runId, routes: gherkinData.routes.length });
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
// Verify all packs generated reports
|
|
252
|
-
expect(results).toHaveLength(3);
|
|
253
|
-
results.forEach(result => {
|
|
254
|
-
expect(result.pack).toBeDefined();
|
|
255
|
-
expect(result.runId).toBeDefined();
|
|
256
|
-
expect(result.routes).toBeGreaterThan(0);
|
|
257
|
-
});
|
|
258
|
-
|
|
259
|
-
// Verify index shows all reports
|
|
260
|
-
const indexResponse = await request.get(`${baseURL}/api/report/index?limit=10`);
|
|
261
|
-
const indexData = await indexResponse.json();
|
|
262
|
-
|
|
263
|
-
const recentPacks = indexData.reports.slice(0, 3).map(r => r.pack);
|
|
264
|
-
packs.forEach(pack => {
|
|
265
|
-
expect(recentPacks).toContain(pack);
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
|
|
269
|
-
test('should validate ETag caching on Gherkin endpoints', async ({ request }) => {
|
|
270
|
-
// Generate a report
|
|
271
|
-
const runResponse = await request.post(`${baseURL}/api/pack`, {
|
|
272
|
-
headers: {
|
|
273
|
-
'content-type': 'application/json',
|
|
274
|
-
'x-qa360-api-key': apiKey
|
|
275
|
-
},
|
|
276
|
-
data: { pack: 'httpbin' }
|
|
277
|
-
});
|
|
278
|
-
|
|
279
|
-
const runData = await runResponse.json();
|
|
280
|
-
|
|
281
|
-
// First request to get ETag
|
|
282
|
-
const firstResponse = await request.get(`${baseURL}/api/report/gherkin?pack=httpbin&runId=${runData.runId}`);
|
|
283
|
-
expect(firstResponse.ok()).toBeTruthy();
|
|
284
|
-
|
|
285
|
-
const etag = firstResponse.headers()['etag'];
|
|
286
|
-
expect(etag).toBeDefined();
|
|
287
|
-
|
|
288
|
-
// Second request with If-None-Match header
|
|
289
|
-
const secondResponse = await request.get(`${baseURL}/api/report/gherkin?pack=httpbin&runId=${runData.runId}`, {
|
|
290
|
-
headers: {
|
|
291
|
-
'if-none-match': etag
|
|
292
|
-
}
|
|
293
|
-
});
|
|
294
|
-
|
|
295
|
-
expect(secondResponse.status()).toBe(304); // Not Modified
|
|
296
|
-
|
|
297
|
-
// Test index endpoint caching
|
|
298
|
-
const indexResponse1 = await request.get(`${baseURL}/api/report/index`);
|
|
299
|
-
const indexEtag = indexResponse1.headers()['etag'];
|
|
300
|
-
expect(indexEtag).toBeDefined();
|
|
301
|
-
|
|
302
|
-
const indexResponse2 = await request.get(`${baseURL}/api/report/index`, {
|
|
303
|
-
headers: {
|
|
304
|
-
'if-none-match': indexEtag
|
|
305
|
-
}
|
|
306
|
-
});
|
|
307
|
-
|
|
308
|
-
expect(indexResponse2.status()).toBe(304);
|
|
309
|
-
});
|
|
310
|
-
});
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
// tests/no-console-errors.spec.js - Test gate "no console errors"
|
|
2
|
-
import { test, expect } from '@playwright/test';
|
|
3
|
-
|
|
4
|
-
const BASE_URL = process.env.BASE_URL || 'https://qa360-cloud-preview.vercel.app';
|
|
5
|
-
|
|
6
|
-
test.describe('No Console Errors Gate', () => {
|
|
7
|
-
|
|
8
|
-
test('Homepage should load without console errors', async ({ page }) => {
|
|
9
|
-
const consoleErrors = [];
|
|
10
|
-
|
|
11
|
-
// Intercepter les erreurs console
|
|
12
|
-
page.on('console', msg => {
|
|
13
|
-
if (msg.type() === 'error') {
|
|
14
|
-
consoleErrors.push({
|
|
15
|
-
type: msg.type(),
|
|
16
|
-
text: msg.text(),
|
|
17
|
-
location: msg.location()
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
// Intercepter les erreurs JavaScript non gérées
|
|
23
|
-
page.on('pageerror', error => {
|
|
24
|
-
consoleErrors.push({
|
|
25
|
-
type: 'pageerror',
|
|
26
|
-
text: error.message,
|
|
27
|
-
stack: error.stack
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
// Charger la page d'accueil
|
|
32
|
-
await page.goto(BASE_URL);
|
|
33
|
-
|
|
34
|
-
// Attendre que le contenu se charge
|
|
35
|
-
await page.waitForSelector('#packs-container', { timeout: 10000 });
|
|
36
|
-
|
|
37
|
-
// Attendre un peu pour que tous les scripts s'exécutent
|
|
38
|
-
await page.waitForTimeout(2000);
|
|
39
|
-
|
|
40
|
-
// Vérifier qu'aucune erreur console n'est apparue
|
|
41
|
-
if (consoleErrors.length > 0) {
|
|
42
|
-
console.error('Console errors detected:', consoleErrors);
|
|
43
|
-
expect(consoleErrors).toHaveLength(0);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Vérifier que la page s'est chargée correctement
|
|
47
|
-
await expect(page.locator('#packs-container')).toBeVisible();
|
|
48
|
-
|
|
49
|
-
// Vérifier qu'aucune bannière d'erreur n'est affichée
|
|
50
|
-
const errorBanner = page.locator('#packs-error');
|
|
51
|
-
if (await errorBanner.isVisible()) {
|
|
52
|
-
const errorText = await errorBanner.textContent();
|
|
53
|
-
throw new Error(`Error banner visible: ${errorText}`);
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
test('Pack execution should not generate console errors', async ({ page }) => {
|
|
58
|
-
const consoleErrors = [];
|
|
59
|
-
|
|
60
|
-
page.on('console', msg => {
|
|
61
|
-
if (msg.type() === 'error') {
|
|
62
|
-
consoleErrors.push({
|
|
63
|
-
type: msg.type(),
|
|
64
|
-
text: msg.text(),
|
|
65
|
-
location: msg.location()
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
page.on('pageerror', error => {
|
|
71
|
-
consoleErrors.push({
|
|
72
|
-
type: 'pageerror',
|
|
73
|
-
text: error.message,
|
|
74
|
-
stack: error.stack
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
await page.goto(BASE_URL);
|
|
79
|
-
|
|
80
|
-
// Attendre que les packs se chargent
|
|
81
|
-
await page.waitForSelector('.run-btn', { timeout: 10000 });
|
|
82
|
-
|
|
83
|
-
// Cliquer sur le premier bouton Run
|
|
84
|
-
const runButton = page.locator('.run-btn').first();
|
|
85
|
-
await runButton.click();
|
|
86
|
-
|
|
87
|
-
// Attendre que l'exécution se termine (toast ou mise à jour)
|
|
88
|
-
await page.waitForTimeout(5000);
|
|
89
|
-
|
|
90
|
-
// Vérifier qu'aucune erreur console n'est apparue pendant l'exécution
|
|
91
|
-
if (consoleErrors.length > 0) {
|
|
92
|
-
console.error('Console errors during pack execution:', consoleErrors);
|
|
93
|
-
expect(consoleErrors).toHaveLength(0);
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
test('Deep-link page should load without console errors', async ({ page }) => {
|
|
98
|
-
const consoleErrors = [];
|
|
99
|
-
|
|
100
|
-
page.on('console', msg => {
|
|
101
|
-
if (msg.type() === 'error') {
|
|
102
|
-
consoleErrors.push({
|
|
103
|
-
type: msg.type(),
|
|
104
|
-
text: msg.text(),
|
|
105
|
-
location: msg.location()
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
page.on('pageerror', error => {
|
|
111
|
-
consoleErrors.push({
|
|
112
|
-
type: 'pageerror',
|
|
113
|
-
text: error.message,
|
|
114
|
-
stack: error.stack
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
// Tester une page de rapport détaillé
|
|
119
|
-
await page.goto(`${BASE_URL}/r/httpbin/test-123`);
|
|
120
|
-
|
|
121
|
-
// Attendre que le contenu se charge
|
|
122
|
-
await page.waitForSelector('table, .loading', { timeout: 10000 });
|
|
123
|
-
|
|
124
|
-
// Attendre un peu pour que tous les scripts s'exécutent
|
|
125
|
-
await page.waitForTimeout(2000);
|
|
126
|
-
|
|
127
|
-
// Vérifier qu'aucune erreur console n'est apparue
|
|
128
|
-
if (consoleErrors.length > 0) {
|
|
129
|
-
console.error('Console errors on deep-link page:', consoleErrors);
|
|
130
|
-
expect(consoleErrors).toHaveLength(0);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// Vérifier que la page s'est chargée correctement
|
|
134
|
-
await expect(page.locator('h1, .title')).toBeVisible();
|
|
135
|
-
});
|
|
136
|
-
});
|
package/tests/pdf.spec.ts
DELETED
|
@@ -1,252 +0,0 @@
|
|
|
1
|
-
// QA360 PDF Generation Tests
|
|
2
|
-
// Validates real PDF generation with Puppeteer and SHA256 validation
|
|
3
|
-
|
|
4
|
-
import { test, expect } from '@playwright/test';
|
|
5
|
-
import crypto from 'crypto';
|
|
6
|
-
|
|
7
|
-
test.describe('QA360 PDF Generation', () => {
|
|
8
|
-
const baseURL = process.env.QA360_BASE_URL || 'https://qa360-cloud-preview.vercel.app';
|
|
9
|
-
const apiKey = process.env.QA360_API_KEY || '176402b75ec5a56176fc99a1139f3bd16268cd4b1e71798d5dd55c76f33b69de';
|
|
10
|
-
|
|
11
|
-
test('should generate HTML PDF report', async ({ request }) => {
|
|
12
|
-
// First run a pack to generate a report
|
|
13
|
-
const runResponse = await request.post(`${baseURL}/api/pack`, {
|
|
14
|
-
headers: {
|
|
15
|
-
'content-type': 'application/json',
|
|
16
|
-
'x-qa360-api-key': apiKey
|
|
17
|
-
},
|
|
18
|
-
data: { pack: 'httpbin' }
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
expect(runResponse.ok()).toBeTruthy();
|
|
22
|
-
const runData = await runResponse.json();
|
|
23
|
-
expect(runData.runId).toBeDefined();
|
|
24
|
-
|
|
25
|
-
// Test HTML PDF export (default)
|
|
26
|
-
const pdfResponse = await request.get(`${baseURL}/api/report/pdf?pack=httpbin&runId=${runData.runId}`);
|
|
27
|
-
expect(pdfResponse.ok()).toBeTruthy();
|
|
28
|
-
|
|
29
|
-
const contentType = pdfResponse.headers()['content-type'];
|
|
30
|
-
expect(contentType).toContain('text/html');
|
|
31
|
-
|
|
32
|
-
const htmlContent = await pdfResponse.text();
|
|
33
|
-
|
|
34
|
-
// Validate HTML structure
|
|
35
|
-
expect(htmlContent).toContain('<!DOCTYPE html>');
|
|
36
|
-
expect(htmlContent).toContain('QA360 Cloud Intelligence');
|
|
37
|
-
expect(htmlContent).toContain('Enterprise Testing Platform');
|
|
38
|
-
expect(htmlContent).toContain('Test Execution Summary');
|
|
39
|
-
expect(htmlContent).toContain('HTTPBin API Testing');
|
|
40
|
-
expect(htmlContent).toContain('Document Signature:');
|
|
41
|
-
|
|
42
|
-
// Validate branding elements
|
|
43
|
-
expect(htmlContent).toContain('Generated by QA360 © 2025 XyqoTech');
|
|
44
|
-
expect(htmlContent).toContain('qa360-cloud-preview.vercel.app');
|
|
45
|
-
|
|
46
|
-
// Validate CSS styling
|
|
47
|
-
expect(htmlContent).toContain('@page');
|
|
48
|
-
expect(htmlContent).toContain('format: A4');
|
|
49
|
-
expect(htmlContent).toContain('margin: 2cm');
|
|
50
|
-
|
|
51
|
-
// Validate report content
|
|
52
|
-
expect(htmlContent).toContain(`Pack: httpbin`);
|
|
53
|
-
expect(htmlContent).toContain(`Run ID: ${runData.runId}`);
|
|
54
|
-
expect(htmlContent).toContain('Given');
|
|
55
|
-
expect(htmlContent).toContain('When');
|
|
56
|
-
expect(htmlContent).toContain('Then');
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
test('should generate real PDF with Puppeteer', async ({ request }) => {
|
|
60
|
-
// First run a pack to generate a report
|
|
61
|
-
const runResponse = await request.post(`${baseURL}/api/pack`, {
|
|
62
|
-
headers: {
|
|
63
|
-
'content-type': 'application/json',
|
|
64
|
-
'x-qa360-api-key': apiKey
|
|
65
|
-
},
|
|
66
|
-
data: { pack: 'httpbin' }
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
expect(runResponse.ok()).toBeTruthy();
|
|
70
|
-
const runData = await runResponse.json();
|
|
71
|
-
|
|
72
|
-
// Test real PDF generation
|
|
73
|
-
const pdfResponse = await request.get(`${baseURL}/api/report/pdf?pack=httpbin&runId=${runData.runId}&real=true`);
|
|
74
|
-
expect(pdfResponse.ok()).toBeTruthy();
|
|
75
|
-
|
|
76
|
-
const contentType = pdfResponse.headers()['content-type'];
|
|
77
|
-
expect(contentType).toBe('application/pdf');
|
|
78
|
-
|
|
79
|
-
const contentDisposition = pdfResponse.headers()['content-disposition'];
|
|
80
|
-
expect(contentDisposition).toContain('attachment');
|
|
81
|
-
expect(contentDisposition).toContain(`qa360-report-httpbin-${runData.runId}.pdf`);
|
|
82
|
-
|
|
83
|
-
const pdfBuffer = await pdfResponse.body();
|
|
84
|
-
expect(pdfBuffer).toBeDefined();
|
|
85
|
-
expect(pdfBuffer.length).toBeGreaterThan(0);
|
|
86
|
-
|
|
87
|
-
// Validate PDF magic bytes
|
|
88
|
-
const pdfHeader = pdfBuffer.slice(0, 4).toString();
|
|
89
|
-
expect(pdfHeader).toBe('%PDF');
|
|
90
|
-
|
|
91
|
-
// Validate PDF size (should be reasonable)
|
|
92
|
-
const pdfSizeMB = pdfBuffer.length / (1024 * 1024);
|
|
93
|
-
expect(pdfSizeMB).toBeLessThan(1.5); // Less than 1.5MB as specified
|
|
94
|
-
|
|
95
|
-
// Validate content length header
|
|
96
|
-
const contentLength = pdfResponse.headers()['content-length'];
|
|
97
|
-
expect(parseInt(contentLength)).toBe(pdfBuffer.length);
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
test('should validate SHA256 signature in PDF reports', async ({ request }) => {
|
|
101
|
-
// Generate a report
|
|
102
|
-
const runResponse = await request.post(`${baseURL}/api/pack`, {
|
|
103
|
-
headers: {
|
|
104
|
-
'content-type': 'application/json',
|
|
105
|
-
'x-qa360-api-key': apiKey
|
|
106
|
-
},
|
|
107
|
-
data: { pack: 'httpbin' }
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
const runData = await runResponse.json();
|
|
111
|
-
|
|
112
|
-
// Get Gherkin report to calculate expected signature
|
|
113
|
-
const gherkinResponse = await request.get(`${baseURL}/api/report/gherkin?pack=httpbin&runId=${runData.runId}`);
|
|
114
|
-
const gherkinData = await gherkinResponse.json();
|
|
115
|
-
|
|
116
|
-
// Calculate expected signature
|
|
117
|
-
const content = `${gherkinData.pack}:${gherkinData.runId}:${gherkinData.timestamp}:${gherkinData.summary.totalSteps}`;
|
|
118
|
-
const expectedSignature = crypto.createHash('sha256').update(content).digest('hex').substring(0, 16);
|
|
119
|
-
|
|
120
|
-
// Get HTML PDF and validate signature
|
|
121
|
-
const pdfResponse = await request.get(`${baseURL}/api/report/pdf?pack=httpbin&runId=${runData.runId}`);
|
|
122
|
-
const htmlContent = await pdfResponse.text();
|
|
123
|
-
|
|
124
|
-
expect(htmlContent).toContain(`Document Signature: ${expectedSignature}`);
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
test('should handle PDF generation errors gracefully', async ({ request }) => {
|
|
128
|
-
// Test with non-existent report
|
|
129
|
-
const pdfResponse = await request.get(`${baseURL}/api/report/pdf?pack=httpbin&runId=non-existent-id`);
|
|
130
|
-
expect(pdfResponse.status()).toBe(404);
|
|
131
|
-
|
|
132
|
-
const errorData = await pdfResponse.json();
|
|
133
|
-
expect(errorData.error).toContain('Gherkin report not found');
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
test('should validate PDF caching headers', async ({ request }) => {
|
|
137
|
-
// Generate a report
|
|
138
|
-
const runResponse = await request.post(`${baseURL}/api/pack`, {
|
|
139
|
-
headers: {
|
|
140
|
-
'content-type': 'application/json',
|
|
141
|
-
'x-qa360-api-key': apiKey
|
|
142
|
-
},
|
|
143
|
-
data: { pack: 'httpbin' }
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
const runData = await runResponse.json();
|
|
147
|
-
|
|
148
|
-
// Test PDF caching
|
|
149
|
-
const pdfResponse = await request.get(`${baseURL}/api/report/pdf?pack=httpbin&runId=${runData.runId}`);
|
|
150
|
-
expect(pdfResponse.ok()).toBeTruthy();
|
|
151
|
-
|
|
152
|
-
const cacheControl = pdfResponse.headers()['cache-control'];
|
|
153
|
-
expect(cacheControl).toContain('public');
|
|
154
|
-
expect(cacheControl).toContain('max-age=3600');
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
test('should support multiple pack PDF generation', async ({ request }) => {
|
|
158
|
-
const packs = ['httpbin', 'petstore'];
|
|
159
|
-
const results = [];
|
|
160
|
-
|
|
161
|
-
// Generate reports for multiple packs
|
|
162
|
-
for (const pack of packs) {
|
|
163
|
-
const runResponse = await request.post(`${baseURL}/api/pack`, {
|
|
164
|
-
headers: {
|
|
165
|
-
'content-type': 'application/json',
|
|
166
|
-
'x-qa360-api-key': apiKey
|
|
167
|
-
},
|
|
168
|
-
data: { pack }
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
expect(runResponse.ok()).toBeTruthy();
|
|
172
|
-
const runData = await runResponse.json();
|
|
173
|
-
|
|
174
|
-
// Generate PDF
|
|
175
|
-
const pdfResponse = await request.get(`${baseURL}/api/report/pdf?pack=${pack}&runId=${runData.runId}`);
|
|
176
|
-
expect(pdfResponse.ok()).toBeTruthy();
|
|
177
|
-
|
|
178
|
-
const htmlContent = await pdfResponse.text();
|
|
179
|
-
expect(htmlContent).toContain(`Pack: ${pack}`);
|
|
180
|
-
expect(htmlContent).toContain(`Run ID: ${runData.runId}`);
|
|
181
|
-
|
|
182
|
-
results.push({ pack, runId: runData.runId });
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
expect(results).toHaveLength(2);
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
test('should validate PDF performance requirements', async ({ request }) => {
|
|
189
|
-
// Generate a report
|
|
190
|
-
const runResponse = await request.post(`${baseURL}/api/pack`, {
|
|
191
|
-
headers: {
|
|
192
|
-
'content-type': 'application/json',
|
|
193
|
-
'x-qa360-api-key': apiKey
|
|
194
|
-
},
|
|
195
|
-
data: { pack: 'httpbin' }
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
const runData = await runResponse.json();
|
|
199
|
-
|
|
200
|
-
// Measure PDF generation time
|
|
201
|
-
const startTime = Date.now();
|
|
202
|
-
const pdfResponse = await request.get(`${baseURL}/api/report/pdf?pack=httpbin&runId=${runData.runId}&real=true`);
|
|
203
|
-
const endTime = Date.now();
|
|
204
|
-
|
|
205
|
-
expect(pdfResponse.ok()).toBeTruthy();
|
|
206
|
-
|
|
207
|
-
const generationTime = endTime - startTime;
|
|
208
|
-
console.log(`PDF generation time: ${generationTime}ms`);
|
|
209
|
-
|
|
210
|
-
// Should generate PDF in reasonable time (less than 30 seconds for Vercel timeout)
|
|
211
|
-
expect(generationTime).toBeLessThan(30000);
|
|
212
|
-
|
|
213
|
-
// Validate PDF size
|
|
214
|
-
const pdfBuffer = await pdfResponse.body();
|
|
215
|
-
const pdfSizeMB = pdfBuffer.length / (1024 * 1024);
|
|
216
|
-
|
|
217
|
-
console.log(`PDF size: ${pdfSizeMB.toFixed(2)}MB`);
|
|
218
|
-
expect(pdfSizeMB).toBeLessThan(1.5); // Less than 1.5MB as specified
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
test('should validate PDF accessibility and structure', async ({ request }) => {
|
|
222
|
-
// Generate a report
|
|
223
|
-
const runResponse = await request.post(`${baseURL}/api/pack`, {
|
|
224
|
-
headers: {
|
|
225
|
-
'content-type': 'application/json',
|
|
226
|
-
'x-qa360-api-key': apiKey
|
|
227
|
-
},
|
|
228
|
-
data: { pack: 'httpbin' }
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
const runData = await runResponse.json();
|
|
232
|
-
|
|
233
|
-
// Get HTML PDF
|
|
234
|
-
const pdfResponse = await request.get(`${baseURL}/api/report/pdf?pack=httpbin&runId=${runData.runId}`);
|
|
235
|
-
const htmlContent = await pdfResponse.text();
|
|
236
|
-
|
|
237
|
-
// Validate accessibility elements
|
|
238
|
-
expect(htmlContent).toContain('<title>QA360 Gherkin Report - httpbin</title>');
|
|
239
|
-
expect(htmlContent).toContain('lang="en"');
|
|
240
|
-
expect(htmlContent).toContain('charset="UTF-8"');
|
|
241
|
-
|
|
242
|
-
// Validate semantic structure
|
|
243
|
-
expect(htmlContent).toContain('<h1>');
|
|
244
|
-
expect(htmlContent).toContain('<h2>');
|
|
245
|
-
expect(htmlContent).toContain('<h3>');
|
|
246
|
-
|
|
247
|
-
// Validate print styles
|
|
248
|
-
expect(htmlContent).toContain('@page');
|
|
249
|
-
expect(htmlContent).toContain('print-color-adjust: exact');
|
|
250
|
-
expect(htmlContent).toContain('page-break-before: always');
|
|
251
|
-
});
|
|
252
|
-
});
|