@machina.ai/openapi-contract-tester 2.1.0
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/.env.example +91 -0
- package/README.md +472 -0
- package/dist/ai-engine/assertion-generator.d.ts +48 -0
- package/dist/ai-engine/assertion-generator.d.ts.map +1 -0
- package/dist/ai-engine/assertion-generator.js +166 -0
- package/dist/ai-engine/assertion-generator.js.map +1 -0
- package/dist/ai-engine/context-data-generator.d.ts +38 -0
- package/dist/ai-engine/context-data-generator.d.ts.map +1 -0
- package/dist/ai-engine/context-data-generator.js +146 -0
- package/dist/ai-engine/context-data-generator.js.map +1 -0
- package/dist/ai-engine/dataflow-detector.d.ts +53 -0
- package/dist/ai-engine/dataflow-detector.d.ts.map +1 -0
- package/dist/ai-engine/dataflow-detector.js +217 -0
- package/dist/ai-engine/dataflow-detector.js.map +1 -0
- package/dist/ai-engine/dependency-detector.d.ts +52 -0
- package/dist/ai-engine/dependency-detector.d.ts.map +1 -0
- package/dist/ai-engine/dependency-detector.js +241 -0
- package/dist/ai-engine/dependency-detector.js.map +1 -0
- package/dist/ai-engine/edge-case-suggester.d.ts +63 -0
- package/dist/ai-engine/edge-case-suggester.d.ts.map +1 -0
- package/dist/ai-engine/edge-case-suggester.js +177 -0
- package/dist/ai-engine/edge-case-suggester.js.map +1 -0
- package/dist/ai-engine/index.d.ts +13 -0
- package/dist/ai-engine/index.d.ts.map +1 -0
- package/dist/ai-engine/index.js +13 -0
- package/dist/ai-engine/index.js.map +1 -0
- package/dist/analyzers/ai-failure-analyzer.d.ts +41 -0
- package/dist/analyzers/ai-failure-analyzer.d.ts.map +1 -0
- package/dist/analyzers/ai-failure-analyzer.js +220 -0
- package/dist/analyzers/ai-failure-analyzer.js.map +1 -0
- package/dist/analyzers/comparison-utils.d.ts +31 -0
- package/dist/analyzers/comparison-utils.d.ts.map +1 -0
- package/dist/analyzers/comparison-utils.js +85 -0
- package/dist/analyzers/comparison-utils.js.map +1 -0
- package/dist/analyzers/context-analyzer.d.ts +49 -0
- package/dist/analyzers/context-analyzer.d.ts.map +1 -0
- package/dist/analyzers/context-analyzer.js +292 -0
- package/dist/analyzers/context-analyzer.js.map +1 -0
- package/dist/analyzers/dependency-analyzer.d.ts +44 -0
- package/dist/analyzers/dependency-analyzer.d.ts.map +1 -0
- package/dist/analyzers/dependency-analyzer.js +313 -0
- package/dist/analyzers/dependency-analyzer.js.map +1 -0
- package/dist/analyzers/failure-analyzer.d.ts +122 -0
- package/dist/analyzers/failure-analyzer.d.ts.map +1 -0
- package/dist/analyzers/failure-analyzer.js +140 -0
- package/dist/analyzers/failure-analyzer.js.map +1 -0
- package/dist/analyzers/failure-detectors/index.d.ts +33 -0
- package/dist/analyzers/failure-detectors/index.d.ts.map +1 -0
- package/dist/analyzers/failure-detectors/index.js +164 -0
- package/dist/analyzers/failure-detectors/index.js.map +1 -0
- package/dist/analyzers/failure-discrepancy-correlator.d.ts +111 -0
- package/dist/analyzers/failure-discrepancy-correlator.d.ts.map +1 -0
- package/dist/analyzers/failure-discrepancy-correlator.js +202 -0
- package/dist/analyzers/failure-discrepancy-correlator.js.map +1 -0
- package/dist/analyzers/index.d.ts +10 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +10 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/analyzers/semantic-matcher.d.ts +123 -0
- package/dist/analyzers/semantic-matcher.d.ts.map +1 -0
- package/dist/analyzers/semantic-matcher.js +297 -0
- package/dist/analyzers/semantic-matcher.js.map +1 -0
- package/dist/analyzers/source-comparator.d.ts +177 -0
- package/dist/analyzers/source-comparator.d.ts.map +1 -0
- package/dist/analyzers/source-comparator.js +225 -0
- package/dist/analyzers/source-comparator.js.map +1 -0
- package/dist/business-rules/business-rules-analyzer.d.ts +44 -0
- package/dist/business-rules/business-rules-analyzer.d.ts.map +1 -0
- package/dist/business-rules/business-rules-analyzer.js +363 -0
- package/dist/business-rules/business-rules-analyzer.js.map +1 -0
- package/dist/business-rules/business-rules-generator.d.ts +78 -0
- package/dist/business-rules/business-rules-generator.d.ts.map +1 -0
- package/dist/business-rules/business-rules-generator.js +357 -0
- package/dist/business-rules/business-rules-generator.js.map +1 -0
- package/dist/business-rules/extractors/rule-extractors.d.ts +50 -0
- package/dist/business-rules/extractors/rule-extractors.d.ts.map +1 -0
- package/dist/business-rules/extractors/rule-extractors.js +189 -0
- package/dist/business-rules/extractors/rule-extractors.js.map +1 -0
- package/dist/business-rules/value-generators.d.ts +70 -0
- package/dist/business-rules/value-generators.d.ts.map +1 -0
- package/dist/business-rules/value-generators.js +142 -0
- package/dist/business-rules/value-generators.js.map +1 -0
- package/dist/executor/auth-providers/auth-header-builder.d.ts +16 -0
- package/dist/executor/auth-providers/auth-header-builder.d.ts.map +1 -0
- package/dist/executor/auth-providers/auth-header-builder.js +47 -0
- package/dist/executor/auth-providers/auth-header-builder.js.map +1 -0
- package/dist/executor/auth-providers/oauth2-provider.d.ts +19 -0
- package/dist/executor/auth-providers/oauth2-provider.d.ts.map +1 -0
- package/dist/executor/auth-providers/oauth2-provider.js +114 -0
- package/dist/executor/auth-providers/oauth2-provider.js.map +1 -0
- package/dist/executor/http-client.d.ts +133 -0
- package/dist/executor/http-client.d.ts.map +1 -0
- package/dist/executor/http-client.js +172 -0
- package/dist/executor/http-client.js.map +1 -0
- package/dist/executor/http-request-builder.d.ts +69 -0
- package/dist/executor/http-request-builder.d.ts.map +1 -0
- package/dist/executor/http-request-builder.js +140 -0
- package/dist/executor/http-request-builder.js.map +1 -0
- package/dist/executor/http-response-parser.d.ts +28 -0
- package/dist/executor/http-response-parser.d.ts.map +1 -0
- package/dist/executor/http-response-parser.js +74 -0
- package/dist/executor/http-response-parser.js.map +1 -0
- package/dist/executor/response-handler.d.ts +66 -0
- package/dist/executor/response-handler.d.ts.map +1 -0
- package/dist/executor/response-handler.js +135 -0
- package/dist/executor/response-handler.js.map +1 -0
- package/dist/executor/result-processor.d.ts +27 -0
- package/dist/executor/result-processor.d.ts.map +1 -0
- package/dist/executor/result-processor.js +140 -0
- package/dist/executor/result-processor.js.map +1 -0
- package/dist/executor/result-utils.d.ts +21 -0
- package/dist/executor/result-utils.d.ts.map +1 -0
- package/dist/executor/result-utils.js +29 -0
- package/dist/executor/result-utils.js.map +1 -0
- package/dist/executor/test-executor.d.ts +49 -0
- package/dist/executor/test-executor.d.ts.map +1 -0
- package/dist/executor/test-executor.js +226 -0
- package/dist/executor/test-executor.js.map +1 -0
- package/dist/executor/test-runner.d.ts +85 -0
- package/dist/executor/test-runner.d.ts.map +1 -0
- package/dist/executor/test-runner.js +177 -0
- package/dist/executor/test-runner.js.map +1 -0
- package/dist/executor/token-detector/index.d.ts +7 -0
- package/dist/executor/token-detector/index.d.ts.map +1 -0
- package/dist/executor/token-detector/index.js +7 -0
- package/dist/executor/token-detector/index.js.map +1 -0
- package/dist/executor/token-detector/token-detector.d.ts +64 -0
- package/dist/executor/token-detector/token-detector.d.ts.map +1 -0
- package/dist/executor/token-detector/token-detector.js +140 -0
- package/dist/executor/token-detector/token-detector.js.map +1 -0
- package/dist/generators/business-rule-from-stories-generator.d.ts +30 -0
- package/dist/generators/business-rule-from-stories-generator.d.ts.map +1 -0
- package/dist/generators/business-rule-from-stories-generator.js +227 -0
- package/dist/generators/business-rule-from-stories-generator.js.map +1 -0
- package/dist/generators/data/ai-data-generator.d.ts +23 -0
- package/dist/generators/data/ai-data-generator.d.ts.map +1 -0
- package/dist/generators/data/ai-data-generator.js +41 -0
- package/dist/generators/data/ai-data-generator.js.map +1 -0
- package/dist/generators/data/base-generator.d.ts +121 -0
- package/dist/generators/data/base-generator.d.ts.map +1 -0
- package/dist/generators/data/base-generator.js +200 -0
- package/dist/generators/data/base-generator.js.map +1 -0
- package/dist/generators/data/heuristic-data-generator.d.ts +28 -0
- package/dist/generators/data/heuristic-data-generator.d.ts.map +1 -0
- package/dist/generators/data/heuristic-data-generator.js +49 -0
- package/dist/generators/data/heuristic-data-generator.js.map +1 -0
- package/dist/generators/data/index.d.ts +48 -0
- package/dist/generators/data/index.d.ts.map +1 -0
- package/dist/generators/data/index.js +201 -0
- package/dist/generators/data/index.js.map +1 -0
- package/dist/generators/data/schema-walker.d.ts +45 -0
- package/dist/generators/data/schema-walker.d.ts.map +1 -0
- package/dist/generators/data/schema-walker.js +103 -0
- package/dist/generators/data/schema-walker.js.map +1 -0
- package/dist/generators/data/type-strategies.d.ts +79 -0
- package/dist/generators/data/type-strategies.d.ts.map +1 -0
- package/dist/generators/data/type-strategies.js +394 -0
- package/dist/generators/data/type-strategies.js.map +1 -0
- package/dist/generators/data-generator.d.ts +11 -0
- package/dist/generators/data-generator.d.ts.map +1 -0
- package/dist/generators/data-generator.js +11 -0
- package/dist/generators/data-generator.js.map +1 -0
- package/dist/generators/edge-case-generator.d.ts +55 -0
- package/dist/generators/edge-case-generator.d.ts.map +1 -0
- package/dist/generators/edge-case-generator.js +327 -0
- package/dist/generators/edge-case-generator.js.map +1 -0
- package/dist/generators/edge-cases/boundary-analyzer.d.ts +26 -0
- package/dist/generators/edge-cases/boundary-analyzer.d.ts.map +1 -0
- package/dist/generators/edge-cases/boundary-analyzer.js +95 -0
- package/dist/generators/edge-cases/boundary-analyzer.js.map +1 -0
- package/dist/generators/error-case-generator.d.ts +11 -0
- package/dist/generators/error-case-generator.d.ts.map +1 -0
- package/dist/generators/error-case-generator.js +11 -0
- package/dist/generators/error-case-generator.js.map +1 -0
- package/dist/generators/errors/auth-error-strategy.d.ts +36 -0
- package/dist/generators/errors/auth-error-strategy.d.ts.map +1 -0
- package/dist/generators/errors/auth-error-strategy.js +118 -0
- package/dist/generators/errors/auth-error-strategy.js.map +1 -0
- package/dist/generators/errors/business-error-strategy.d.ts +44 -0
- package/dist/generators/errors/business-error-strategy.d.ts.map +1 -0
- package/dist/generators/errors/business-error-strategy.js +152 -0
- package/dist/generators/errors/business-error-strategy.js.map +1 -0
- package/dist/generators/errors/error-strategy-factory.d.ts +27 -0
- package/dist/generators/errors/error-strategy-factory.d.ts.map +1 -0
- package/dist/generators/errors/error-strategy-factory.js +47 -0
- package/dist/generators/errors/error-strategy-factory.js.map +1 -0
- package/dist/generators/errors/error-strategy.d.ts +62 -0
- package/dist/generators/errors/error-strategy.d.ts.map +1 -0
- package/dist/generators/errors/error-strategy.js +69 -0
- package/dist/generators/errors/error-strategy.js.map +1 -0
- package/dist/generators/errors/index.d.ts +23 -0
- package/dist/generators/errors/index.d.ts.map +1 -0
- package/dist/generators/errors/index.js +73 -0
- package/dist/generators/errors/index.js.map +1 -0
- package/dist/generators/errors/validation-error-strategy.d.ts +25 -0
- package/dist/generators/errors/validation-error-strategy.d.ts.map +1 -0
- package/dist/generators/errors/validation-error-strategy.js +214 -0
- package/dist/generators/errors/validation-error-strategy.js.map +1 -0
- package/dist/generators/happy-path-generator.d.ts +93 -0
- package/dist/generators/happy-path-generator.d.ts.map +1 -0
- package/dist/generators/happy-path-generator.js +275 -0
- package/dist/generators/happy-path-generator.js.map +1 -0
- package/dist/generators/test-enricher.d.ts +44 -0
- package/dist/generators/test-enricher.d.ts.map +1 -0
- package/dist/generators/test-enricher.js +109 -0
- package/dist/generators/test-enricher.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/ai-cache.d.ts +123 -0
- package/dist/llm/ai-cache.d.ts.map +1 -0
- package/dist/llm/ai-cache.js +220 -0
- package/dist/llm/ai-cache.js.map +1 -0
- package/dist/llm/ai-client.d.ts +92 -0
- package/dist/llm/ai-client.d.ts.map +1 -0
- package/dist/llm/ai-client.js +386 -0
- package/dist/llm/ai-client.js.map +1 -0
- package/dist/llm/data-generator-ai.d.ts +84 -0
- package/dist/llm/data-generator-ai.d.ts.map +1 -0
- package/dist/llm/data-generator-ai.js +284 -0
- package/dist/llm/data-generator-ai.js.map +1 -0
- package/dist/llm/index.d.ts +7 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +7 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/mcp/handlers/base-handler.d.ts +72 -0
- package/dist/mcp/handlers/base-handler.d.ts.map +1 -0
- package/dist/mcp/handlers/base-handler.js +86 -0
- package/dist/mcp/handlers/base-handler.js.map +1 -0
- package/dist/mcp/handlers/compare-sources.d.ts +91 -0
- package/dist/mcp/handlers/compare-sources.d.ts.map +1 -0
- package/dist/mcp/handlers/compare-sources.js +182 -0
- package/dist/mcp/handlers/compare-sources.js.map +1 -0
- package/dist/mcp/handlers/export-results.d.ts +53 -0
- package/dist/mcp/handlers/export-results.d.ts.map +1 -0
- package/dist/mcp/handlers/export-results.js +132 -0
- package/dist/mcp/handlers/export-results.js.map +1 -0
- package/dist/mcp/handlers/export-to-postman.d.ts +65 -0
- package/dist/mcp/handlers/export-to-postman.d.ts.map +1 -0
- package/dist/mcp/handlers/export-to-postman.js +128 -0
- package/dist/mcp/handlers/export-to-postman.js.map +1 -0
- package/dist/mcp/handlers/generate-tests.d.ts +74 -0
- package/dist/mcp/handlers/generate-tests.d.ts.map +1 -0
- package/dist/mcp/handlers/generate-tests.js +519 -0
- package/dist/mcp/handlers/generate-tests.js.map +1 -0
- package/dist/mcp/handlers/index.d.ts +13 -0
- package/dist/mcp/handlers/index.d.ts.map +1 -0
- package/dist/mcp/handlers/index.js +12 -0
- package/dist/mcp/handlers/index.js.map +1 -0
- package/dist/mcp/handlers/run-tests.d.ts +89 -0
- package/dist/mcp/handlers/run-tests.d.ts.map +1 -0
- package/dist/mcp/handlers/run-tests.js +233 -0
- package/dist/mcp/handlers/run-tests.js.map +1 -0
- package/dist/mcp/handlers/types.d.ts +61 -0
- package/dist/mcp/handlers/types.d.ts.map +1 -0
- package/dist/mcp/handlers/types.js +9 -0
- package/dist/mcp/handlers/types.js.map +1 -0
- package/dist/mcp/server.d.ts +64 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +200 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/services/file-service.d.ts +66 -0
- package/dist/mcp/services/file-service.d.ts.map +1 -0
- package/dist/mcp/services/file-service.js +143 -0
- package/dist/mcp/services/file-service.js.map +1 -0
- package/dist/mcp/services/llm-service.d.ts +70 -0
- package/dist/mcp/services/llm-service.d.ts.map +1 -0
- package/dist/mcp/services/llm-service.js +189 -0
- package/dist/mcp/services/llm-service.js.map +1 -0
- package/dist/mcp/services/postman-service.d.ts +128 -0
- package/dist/mcp/services/postman-service.d.ts.map +1 -0
- package/dist/mcp/services/postman-service.js +266 -0
- package/dist/mcp/services/postman-service.js.map +1 -0
- package/dist/mcp/services/report-service.d.ts +81 -0
- package/dist/mcp/services/report-service.d.ts.map +1 -0
- package/dist/mcp/services/report-service.js +210 -0
- package/dist/mcp/services/report-service.js.map +1 -0
- package/dist/mcp/services/spec-service.d.ts +58 -0
- package/dist/mcp/services/spec-service.d.ts.map +1 -0
- package/dist/mcp/services/spec-service.js +140 -0
- package/dist/mcp/services/spec-service.js.map +1 -0
- package/dist/parsers/endpoint-extractor.d.ts +32 -0
- package/dist/parsers/endpoint-extractor.d.ts.map +1 -0
- package/dist/parsers/endpoint-extractor.js +160 -0
- package/dist/parsers/endpoint-extractor.js.map +1 -0
- package/dist/parsers/openapi-parser.d.ts +120 -0
- package/dist/parsers/openapi-parser.d.ts.map +1 -0
- package/dist/parsers/openapi-parser.js +257 -0
- package/dist/parsers/openapi-parser.js.map +1 -0
- package/dist/parsers/visitors/auth-visitor.d.ts +28 -0
- package/dist/parsers/visitors/auth-visitor.d.ts.map +1 -0
- package/dist/parsers/visitors/auth-visitor.js +116 -0
- package/dist/parsers/visitors/auth-visitor.js.map +1 -0
- package/dist/prd/index.d.ts +10 -0
- package/dist/prd/index.d.ts.map +1 -0
- package/dist/prd/index.js +10 -0
- package/dist/prd/index.js.map +1 -0
- package/dist/prd/prd-reader.d.ts +124 -0
- package/dist/prd/prd-reader.d.ts.map +1 -0
- package/dist/prd/prd-reader.js +308 -0
- package/dist/prd/prd-reader.js.map +1 -0
- package/dist/prd/prd-storage.d.ts +232 -0
- package/dist/prd/prd-storage.d.ts.map +1 -0
- package/dist/prd/prd-storage.js +129 -0
- package/dist/prd/prd-storage.js.map +1 -0
- package/dist/repairers/test-auto-repairer.d.ts +61 -0
- package/dist/repairers/test-auto-repairer.d.ts.map +1 -0
- package/dist/repairers/test-auto-repairer.js +213 -0
- package/dist/repairers/test-auto-repairer.js.map +1 -0
- package/dist/reporters/comparison-report-generator.d.ts +58 -0
- package/dist/reporters/comparison-report-generator.d.ts.map +1 -0
- package/dist/reporters/comparison-report-generator.js +369 -0
- package/dist/reporters/comparison-report-generator.js.map +1 -0
- package/dist/reporters/gherkin-formatter.d.ts +34 -0
- package/dist/reporters/gherkin-formatter.d.ts.map +1 -0
- package/dist/reporters/gherkin-formatter.js +231 -0
- package/dist/reporters/gherkin-formatter.js.map +1 -0
- package/dist/reporters/html-report-generator.d.ts +174 -0
- package/dist/reporters/html-report-generator.d.ts.map +1 -0
- package/dist/reporters/html-report-generator.js +194 -0
- package/dist/reporters/html-report-generator.js.map +1 -0
- package/dist/reporters/report-charts.d.ts +23 -0
- package/dist/reporters/report-charts.d.ts.map +1 -0
- package/dist/reporters/report-charts.js +182 -0
- package/dist/reporters/report-charts.js.map +1 -0
- package/dist/reporters/report-sections.d.ts +34 -0
- package/dist/reporters/report-sections.d.ts.map +1 -0
- package/dist/reporters/report-sections.js +481 -0
- package/dist/reporters/report-sections.js.map +1 -0
- package/dist/reporters/report-styles.d.ts +12 -0
- package/dist/reporters/report-styles.d.ts.map +1 -0
- package/dist/reporters/report-styles.js +412 -0
- package/dist/reporters/report-styles.js.map +1 -0
- package/dist/reporters/report-test-details.d.ts +56 -0
- package/dist/reporters/report-test-details.d.ts.map +1 -0
- package/dist/reporters/report-test-details.js +328 -0
- package/dist/reporters/report-test-details.js.map +1 -0
- package/dist/reporters/report-utils.d.ts +40 -0
- package/dist/reporters/report-utils.d.ts.map +1 -0
- package/dist/reporters/report-utils.js +163 -0
- package/dist/reporters/report-utils.js.map +1 -0
- package/dist/types/ai-config.d.ts +63 -0
- package/dist/types/ai-config.d.ts.map +1 -0
- package/dist/types/ai-config.js +79 -0
- package/dist/types/ai-config.js.map +1 -0
- package/dist/types/business-rules.d.ts +235 -0
- package/dist/types/business-rules.d.ts.map +1 -0
- package/dist/types/business-rules.js +6 -0
- package/dist/types/business-rules.js.map +1 -0
- package/dist/types/config.d.ts +106 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/core.d.ts +72 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +6 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/openapi.d.ts +139 -0
- package/dist/types/openapi.d.ts.map +1 -0
- package/dist/types/openapi.js +6 -0
- package/dist/types/openapi.js.map +1 -0
- package/dist/types/pact.d.ts +101 -0
- package/dist/types/pact.d.ts.map +1 -0
- package/dist/types/pact.js +6 -0
- package/dist/types/pact.js.map +1 -0
- package/dist/types/reporting.d.ts +93 -0
- package/dist/types/reporting.d.ts.map +1 -0
- package/dist/types/reporting.js +6 -0
- package/dist/types/reporting.js.map +1 -0
- package/dist/types/test-case.d.ts +233 -0
- package/dist/types/test-case.d.ts.map +1 -0
- package/dist/types/test-case.js +6 -0
- package/dist/types/test-case.js.map +1 -0
- package/dist/types/test-execution.d.ts +80 -0
- package/dist/types/test-execution.d.ts.map +1 -0
- package/dist/types/test-execution.js +6 -0
- package/dist/types/test-execution.js.map +1 -0
- package/dist/utils/auth-generator.d.ts +30 -0
- package/dist/utils/auth-generator.d.ts.map +1 -0
- package/dist/utils/auth-generator.js +68 -0
- package/dist/utils/auth-generator.js.map +1 -0
- package/dist/utils/config.d.ts +181 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +141 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/coverage-calculator.d.ts +81 -0
- package/dist/utils/coverage-calculator.d.ts.map +1 -0
- package/dist/utils/coverage-calculator.js +134 -0
- package/dist/utils/coverage-calculator.js.map +1 -0
- package/dist/utils/data-loader.d.ts +52 -0
- package/dist/utils/data-loader.d.ts.map +1 -0
- package/dist/utils/data-loader.js +192 -0
- package/dist/utils/data-loader.js.map +1 -0
- package/dist/utils/errors.d.ts +167 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +257 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +220 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +325 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/openapi-discovery.d.ts +31 -0
- package/dist/utils/openapi-discovery.d.ts.map +1 -0
- package/dist/utils/openapi-discovery.js +322 -0
- package/dist/utils/openapi-discovery.js.map +1 -0
- package/dist/utils/path-resolver.d.ts +101 -0
- package/dist/utils/path-resolver.d.ts.map +1 -0
- package/dist/utils/path-resolver.js +167 -0
- package/dist/utils/path-resolver.js.map +1 -0
- package/dist/utils/resilience.d.ts +181 -0
- package/dist/utils/resilience.d.ts.map +1 -0
- package/dist/utils/resilience.js +269 -0
- package/dist/utils/resilience.js.map +1 -0
- package/dist/validators/openapi-validator.d.ts +198 -0
- package/dist/validators/openapi-validator.d.ts.map +1 -0
- package/dist/validators/openapi-validator.js +349 -0
- package/dist/validators/openapi-validator.js.map +1 -0
- package/dist/validators/response-matcher.d.ts +84 -0
- package/dist/validators/response-matcher.d.ts.map +1 -0
- package/dist/validators/response-matcher.js +234 -0
- package/dist/validators/response-matcher.js.map +1 -0
- package/dist/validators/schema-validator.d.ts +174 -0
- package/dist/validators/schema-validator.d.ts.map +1 -0
- package/dist/validators/schema-validator.js +340 -0
- package/dist/validators/schema-validator.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD Storage Module
|
|
3
|
+
*
|
|
4
|
+
* Handles saving and loading normalized PRD documents.
|
|
5
|
+
* The normalized PRD is generated by the LLM and saved here for use
|
|
6
|
+
* by the test generator.
|
|
7
|
+
*
|
|
8
|
+
* @module prd/prd-storage
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Normalized PRD structure
|
|
12
|
+
* This structure is generated by the LLM from raw PRD documents
|
|
13
|
+
*/
|
|
14
|
+
export interface NormalizedPrd {
|
|
15
|
+
/**
|
|
16
|
+
* Version of the normalized PRD format
|
|
17
|
+
*/
|
|
18
|
+
version: string;
|
|
19
|
+
/**
|
|
20
|
+
* Timestamp when the PRD was normalized
|
|
21
|
+
*/
|
|
22
|
+
normalizedAt: string;
|
|
23
|
+
/**
|
|
24
|
+
* Original source files used to generate this PRD
|
|
25
|
+
*/
|
|
26
|
+
sources: string[];
|
|
27
|
+
/**
|
|
28
|
+
* Project/product information
|
|
29
|
+
*/
|
|
30
|
+
project: {
|
|
31
|
+
name: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
version?: string;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Features/functionalities described in the PRD
|
|
37
|
+
*/
|
|
38
|
+
features: PrdFeature[];
|
|
39
|
+
/**
|
|
40
|
+
* Business rules extracted from the PRD
|
|
41
|
+
*/
|
|
42
|
+
businessRules: PrdBusinessRule[];
|
|
43
|
+
/**
|
|
44
|
+
* User stories extracted from the PRD
|
|
45
|
+
*/
|
|
46
|
+
userStories: PrdUserStory[];
|
|
47
|
+
/**
|
|
48
|
+
* API requirements extracted from the PRD
|
|
49
|
+
*/
|
|
50
|
+
apiRequirements: PrdApiRequirement[];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* A feature/functionality in the PRD
|
|
54
|
+
*/
|
|
55
|
+
export interface PrdFeature {
|
|
56
|
+
/**
|
|
57
|
+
* Unique identifier for the feature
|
|
58
|
+
*/
|
|
59
|
+
id: string;
|
|
60
|
+
/**
|
|
61
|
+
* Feature name
|
|
62
|
+
*/
|
|
63
|
+
name: string;
|
|
64
|
+
/**
|
|
65
|
+
* Feature description
|
|
66
|
+
*/
|
|
67
|
+
description: string;
|
|
68
|
+
/**
|
|
69
|
+
* Priority (high, medium, low)
|
|
70
|
+
*/
|
|
71
|
+
priority?: 'high' | 'medium' | 'low';
|
|
72
|
+
/**
|
|
73
|
+
* Related endpoints
|
|
74
|
+
*/
|
|
75
|
+
relatedEndpoints?: string[];
|
|
76
|
+
/**
|
|
77
|
+
* Acceptance criteria
|
|
78
|
+
*/
|
|
79
|
+
acceptanceCriteria?: string[];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* A business rule from the PRD
|
|
83
|
+
*/
|
|
84
|
+
export interface PrdBusinessRule {
|
|
85
|
+
/**
|
|
86
|
+
* Unique identifier for the rule
|
|
87
|
+
*/
|
|
88
|
+
id: string;
|
|
89
|
+
/**
|
|
90
|
+
* Rule name/title
|
|
91
|
+
*/
|
|
92
|
+
name: string;
|
|
93
|
+
/**
|
|
94
|
+
* Rule description
|
|
95
|
+
*/
|
|
96
|
+
description: string;
|
|
97
|
+
/**
|
|
98
|
+
* The condition that triggers this rule
|
|
99
|
+
*/
|
|
100
|
+
condition: string;
|
|
101
|
+
/**
|
|
102
|
+
* Expected outcome/action
|
|
103
|
+
*/
|
|
104
|
+
expectedOutcome: string;
|
|
105
|
+
/**
|
|
106
|
+
* Related endpoints
|
|
107
|
+
*/
|
|
108
|
+
relatedEndpoints?: string[];
|
|
109
|
+
/**
|
|
110
|
+
* Example values for testing
|
|
111
|
+
*/
|
|
112
|
+
examples?: {
|
|
113
|
+
valid?: unknown[];
|
|
114
|
+
invalid?: unknown[];
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* A user story from the PRD
|
|
119
|
+
*/
|
|
120
|
+
export interface PrdUserStory {
|
|
121
|
+
/**
|
|
122
|
+
* Unique identifier
|
|
123
|
+
*/
|
|
124
|
+
id: string;
|
|
125
|
+
/**
|
|
126
|
+
* User story in "As a... I want... So that..." format
|
|
127
|
+
*/
|
|
128
|
+
story: string;
|
|
129
|
+
/**
|
|
130
|
+
* The actor/user role
|
|
131
|
+
*/
|
|
132
|
+
actor: string;
|
|
133
|
+
/**
|
|
134
|
+
* What the user wants to do
|
|
135
|
+
*/
|
|
136
|
+
action: string;
|
|
137
|
+
/**
|
|
138
|
+
* Why they want to do it
|
|
139
|
+
*/
|
|
140
|
+
benefit?: string;
|
|
141
|
+
/**
|
|
142
|
+
* Acceptance criteria
|
|
143
|
+
*/
|
|
144
|
+
acceptanceCriteria?: string[];
|
|
145
|
+
/**
|
|
146
|
+
* Related endpoints
|
|
147
|
+
*/
|
|
148
|
+
relatedEndpoints?: string[];
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* API-specific requirement from the PRD
|
|
152
|
+
*/
|
|
153
|
+
export interface PrdApiRequirement {
|
|
154
|
+
/**
|
|
155
|
+
* Unique identifier
|
|
156
|
+
*/
|
|
157
|
+
id: string;
|
|
158
|
+
/**
|
|
159
|
+
* Endpoint path pattern
|
|
160
|
+
*/
|
|
161
|
+
endpoint?: string;
|
|
162
|
+
/**
|
|
163
|
+
* HTTP method
|
|
164
|
+
*/
|
|
165
|
+
method?: string;
|
|
166
|
+
/**
|
|
167
|
+
* Description of the requirement
|
|
168
|
+
*/
|
|
169
|
+
description: string;
|
|
170
|
+
/**
|
|
171
|
+
* Expected request format
|
|
172
|
+
*/
|
|
173
|
+
expectedRequest?: {
|
|
174
|
+
headers?: Record<string, string>;
|
|
175
|
+
body?: Record<string, unknown>;
|
|
176
|
+
};
|
|
177
|
+
/**
|
|
178
|
+
* Expected response
|
|
179
|
+
*/
|
|
180
|
+
expectedResponse?: {
|
|
181
|
+
status?: number;
|
|
182
|
+
body?: Record<string, unknown>;
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* Validation rules for this endpoint
|
|
186
|
+
*/
|
|
187
|
+
validations?: string[];
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Saves a normalized PRD to a file
|
|
191
|
+
*
|
|
192
|
+
* @param prd - Normalized PRD to save
|
|
193
|
+
* @param outputPath - Path to save the PRD (default: ./standard_prd.json)
|
|
194
|
+
* @returns Path where the PRD was saved
|
|
195
|
+
*
|
|
196
|
+
* @example
|
|
197
|
+
* ```typescript
|
|
198
|
+
* const prd: NormalizedPrd = { ... };
|
|
199
|
+
* const savedPath = await savePrd(prd, './output/prd.json');
|
|
200
|
+
* ```
|
|
201
|
+
*/
|
|
202
|
+
export declare function savePrd(prd: NormalizedPrd, outputPath?: string): Promise<string>;
|
|
203
|
+
/**
|
|
204
|
+
* Loads a normalized PRD from a file
|
|
205
|
+
*
|
|
206
|
+
* @param filePath - Path to the normalized PRD file
|
|
207
|
+
* @returns Normalized PRD
|
|
208
|
+
*
|
|
209
|
+
* @example
|
|
210
|
+
* ```typescript
|
|
211
|
+
* const prd = await loadPrd('./standard_prd.json');
|
|
212
|
+
* console.log(prd.businessRules.length);
|
|
213
|
+
* ```
|
|
214
|
+
*/
|
|
215
|
+
export declare function loadPrd(filePath: string): Promise<NormalizedPrd>;
|
|
216
|
+
/**
|
|
217
|
+
* Validates a normalized PRD structure
|
|
218
|
+
*
|
|
219
|
+
* @param prd - PRD to validate
|
|
220
|
+
* @returns Validation result
|
|
221
|
+
*/
|
|
222
|
+
export declare function validatePrd(prd: unknown): {
|
|
223
|
+
valid: boolean;
|
|
224
|
+
errors: string[];
|
|
225
|
+
};
|
|
226
|
+
/**
|
|
227
|
+
* Creates an empty normalized PRD template
|
|
228
|
+
*
|
|
229
|
+
* @returns Empty normalized PRD structure
|
|
230
|
+
*/
|
|
231
|
+
export declare function createEmptyPrd(): NormalizedPrd;
|
|
232
|
+
//# sourceMappingURL=prd-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prd-storage.d.ts","sourceRoot":"","sources":["../../src/prd/prd-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD Storage Module
|
|
3
|
+
*
|
|
4
|
+
* Handles saving and loading normalized PRD documents.
|
|
5
|
+
* The normalized PRD is generated by the LLM and saved here for use
|
|
6
|
+
* by the test generator.
|
|
7
|
+
*
|
|
8
|
+
* @module prd/prd-storage
|
|
9
|
+
*/
|
|
10
|
+
import * as fs from 'fs';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
import { createLogger } from '../utils/logger.js';
|
|
13
|
+
const log = createLogger('prd-storage');
|
|
14
|
+
/**
|
|
15
|
+
* Saves a normalized PRD to a file
|
|
16
|
+
*
|
|
17
|
+
* @param prd - Normalized PRD to save
|
|
18
|
+
* @param outputPath - Path to save the PRD (default: ./standard_prd.json)
|
|
19
|
+
* @returns Path where the PRD was saved
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const prd: NormalizedPrd = { ... };
|
|
24
|
+
* const savedPath = await savePrd(prd, './output/prd.json');
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export async function savePrd(prd, outputPath = './standard_prd.json') {
|
|
28
|
+
log.debug('Saving normalized PRD', { outputPath });
|
|
29
|
+
// Ensure directory exists
|
|
30
|
+
const dir = path.dirname(outputPath);
|
|
31
|
+
if (!fs.existsSync(dir)) {
|
|
32
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
33
|
+
}
|
|
34
|
+
// Add metadata
|
|
35
|
+
const prdWithMeta = {
|
|
36
|
+
...prd,
|
|
37
|
+
version: prd.version || '1.0.0',
|
|
38
|
+
normalizedAt: prd.normalizedAt || new Date().toISOString(),
|
|
39
|
+
};
|
|
40
|
+
// Write file
|
|
41
|
+
fs.writeFileSync(outputPath, JSON.stringify(prdWithMeta, null, 2), 'utf-8');
|
|
42
|
+
log.info('Normalized PRD saved', {
|
|
43
|
+
outputPath,
|
|
44
|
+
features: prd.features.length,
|
|
45
|
+
businessRules: prd.businessRules.length,
|
|
46
|
+
userStories: prd.userStories.length,
|
|
47
|
+
apiRequirements: prd.apiRequirements.length,
|
|
48
|
+
});
|
|
49
|
+
return outputPath;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Loads a normalized PRD from a file
|
|
53
|
+
*
|
|
54
|
+
* @param filePath - Path to the normalized PRD file
|
|
55
|
+
* @returns Normalized PRD
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* const prd = await loadPrd('./standard_prd.json');
|
|
60
|
+
* console.log(prd.businessRules.length);
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export async function loadPrd(filePath) {
|
|
64
|
+
log.debug('Loading normalized PRD', { filePath });
|
|
65
|
+
if (!fs.existsSync(filePath)) {
|
|
66
|
+
throw new Error(`Normalized PRD file not found: ${filePath}`);
|
|
67
|
+
}
|
|
68
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
69
|
+
const prd = JSON.parse(content);
|
|
70
|
+
log.info('Normalized PRD loaded', {
|
|
71
|
+
filePath,
|
|
72
|
+
features: prd.features?.length || 0,
|
|
73
|
+
businessRules: prd.businessRules?.length || 0,
|
|
74
|
+
userStories: prd.userStories?.length || 0,
|
|
75
|
+
apiRequirements: prd.apiRequirements?.length || 0,
|
|
76
|
+
});
|
|
77
|
+
return prd;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Validates a normalized PRD structure
|
|
81
|
+
*
|
|
82
|
+
* @param prd - PRD to validate
|
|
83
|
+
* @returns Validation result
|
|
84
|
+
*/
|
|
85
|
+
export function validatePrd(prd) {
|
|
86
|
+
const errors = [];
|
|
87
|
+
if (!prd || typeof prd !== 'object') {
|
|
88
|
+
return { valid: false, errors: ['PRD must be an object'] };
|
|
89
|
+
}
|
|
90
|
+
const p = prd;
|
|
91
|
+
// Check required fields
|
|
92
|
+
if (!p.project || typeof p.project !== 'object') {
|
|
93
|
+
errors.push('Missing or invalid "project" field');
|
|
94
|
+
}
|
|
95
|
+
if (!Array.isArray(p.features)) {
|
|
96
|
+
errors.push('Missing or invalid "features" array');
|
|
97
|
+
}
|
|
98
|
+
if (!Array.isArray(p.businessRules)) {
|
|
99
|
+
errors.push('Missing or invalid "businessRules" array');
|
|
100
|
+
}
|
|
101
|
+
if (!Array.isArray(p.userStories)) {
|
|
102
|
+
errors.push('Missing or invalid "userStories" array');
|
|
103
|
+
}
|
|
104
|
+
if (!Array.isArray(p.apiRequirements)) {
|
|
105
|
+
errors.push('Missing or invalid "apiRequirements" array');
|
|
106
|
+
}
|
|
107
|
+
return { valid: errors.length === 0, errors };
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Creates an empty normalized PRD template
|
|
111
|
+
*
|
|
112
|
+
* @returns Empty normalized PRD structure
|
|
113
|
+
*/
|
|
114
|
+
export function createEmptyPrd() {
|
|
115
|
+
return {
|
|
116
|
+
version: '1.0.0',
|
|
117
|
+
normalizedAt: new Date().toISOString(),
|
|
118
|
+
sources: [],
|
|
119
|
+
project: {
|
|
120
|
+
name: '',
|
|
121
|
+
description: '',
|
|
122
|
+
},
|
|
123
|
+
features: [],
|
|
124
|
+
businessRules: [],
|
|
125
|
+
userStories: [],
|
|
126
|
+
apiRequirements: [],
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=prd-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prd-storage.js","sourceRoot":"","sources":["../../src/prd/prd-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Auto-Repairer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes test failures and suggests automatic repairs for common issues.
|
|
5
|
+
* Focuses on:
|
|
6
|
+
* - Missing authentication dependencies
|
|
7
|
+
* - Missing resource dependencies
|
|
8
|
+
* - Schema validation errors
|
|
9
|
+
*
|
|
10
|
+
* @module repairers/test-auto-repairer
|
|
11
|
+
*/
|
|
12
|
+
import type { TestCase, TestResult, ParsedEndpoint } from '../types/index.js';
|
|
13
|
+
/**
|
|
14
|
+
* Type of repair needed
|
|
15
|
+
*/
|
|
16
|
+
export type RepairType = 'add_auth_dependency' | 'add_resource_dependency' | 'fix_schema_validation' | 'fix_request_body';
|
|
17
|
+
/**
|
|
18
|
+
* Repair suggestion for a failed test
|
|
19
|
+
*/
|
|
20
|
+
export interface TestRepair {
|
|
21
|
+
testId: string;
|
|
22
|
+
type: RepairType;
|
|
23
|
+
description: string;
|
|
24
|
+
confidence: 'high' | 'medium' | 'low';
|
|
25
|
+
fix: {
|
|
26
|
+
addDependency?: string;
|
|
27
|
+
extractId?: string;
|
|
28
|
+
injectId?: string;
|
|
29
|
+
newBody?: unknown;
|
|
30
|
+
reason: string;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Result of repair analysis
|
|
35
|
+
*/
|
|
36
|
+
export interface RepairResult {
|
|
37
|
+
repairs: TestRepair[];
|
|
38
|
+
summary: {
|
|
39
|
+
total: number;
|
|
40
|
+
repairable: number;
|
|
41
|
+
byType: Record<RepairType, number>;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Analyzes failed tests and suggests repairs
|
|
46
|
+
*
|
|
47
|
+
* @param failedResults - Array of failed test results
|
|
48
|
+
* @param allTests - All test cases
|
|
49
|
+
* @param endpoints - Parsed endpoints
|
|
50
|
+
* @returns Repair suggestions
|
|
51
|
+
*/
|
|
52
|
+
export declare function analyzeAndRepair(failedResults: TestResult[], allTests: TestCase[], endpoints: ParsedEndpoint[]): Promise<RepairResult>;
|
|
53
|
+
/**
|
|
54
|
+
* Applies repairs to test cases
|
|
55
|
+
*
|
|
56
|
+
* @param tests - Original test cases
|
|
57
|
+
* @param repairs - Repairs to apply
|
|
58
|
+
* @returns Updated test cases
|
|
59
|
+
*/
|
|
60
|
+
export declare function applyRepairs(tests: TestCase[], repairs: TestRepair[]): TestCase[];
|
|
61
|
+
//# sourceMappingURL=test-auto-repairer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-auto-repairer.d.ts","sourceRoot":"","sources":["../../src/repairers/test-auto-repairer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAM9E;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,qBAAqB,GACrB,yBAAyB,GACzB,uBAAuB,GACvB,kBAAkB,CAAC;AAEvB;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,GAAG,EAAE;QACH,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;KACpC,CAAC;CACH;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,UAAU,EAAE,EAC3B,QAAQ,EAAE,QAAQ,EAAE,EACpB,SAAS,EAAE,cAAc,EAAE,GAC1B,OAAO,CAAC,YAAY,CAAC,CAkCvB;AA4JD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,EAAE,UAAU,EAAE,GACpB,QAAQ,EAAE,CA2BZ"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Auto-Repairer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes test failures and suggests automatic repairs for common issues.
|
|
5
|
+
* Focuses on:
|
|
6
|
+
* - Missing authentication dependencies
|
|
7
|
+
* - Missing resource dependencies
|
|
8
|
+
* - Schema validation errors
|
|
9
|
+
*
|
|
10
|
+
* @module repairers/test-auto-repairer
|
|
11
|
+
*/
|
|
12
|
+
import { callLLM } from '../llm/ai-client.js';
|
|
13
|
+
import { createLogger } from '../utils/logger.js';
|
|
14
|
+
const log = createLogger('test-auto-repairer');
|
|
15
|
+
/**
|
|
16
|
+
* Analyzes failed tests and suggests repairs
|
|
17
|
+
*
|
|
18
|
+
* @param failedResults - Array of failed test results
|
|
19
|
+
* @param allTests - All test cases
|
|
20
|
+
* @param endpoints - Parsed endpoints
|
|
21
|
+
* @returns Repair suggestions
|
|
22
|
+
*/
|
|
23
|
+
export async function analyzeAndRepair(failedResults, allTests, endpoints) {
|
|
24
|
+
log.info('Analyzing failed tests for auto-repair', {
|
|
25
|
+
failedCount: failedResults.length
|
|
26
|
+
});
|
|
27
|
+
const repairs = [];
|
|
28
|
+
for (const result of failedResults) {
|
|
29
|
+
const repair = await suggestRepair(result, allTests, endpoints);
|
|
30
|
+
if (repair) {
|
|
31
|
+
repairs.push(repair);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Build summary
|
|
35
|
+
const byType = {};
|
|
36
|
+
for (const repair of repairs) {
|
|
37
|
+
byType[repair.type] = (byType[repair.type] || 0) + 1;
|
|
38
|
+
}
|
|
39
|
+
log.info('Auto-repair analysis complete', {
|
|
40
|
+
total: failedResults.length,
|
|
41
|
+
repairable: repairs.length,
|
|
42
|
+
byType
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
repairs,
|
|
46
|
+
summary: {
|
|
47
|
+
total: failedResults.length,
|
|
48
|
+
repairable: repairs.length,
|
|
49
|
+
byType: byType
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Suggests a repair for a single failed test
|
|
55
|
+
*
|
|
56
|
+
* @param result - Failed test result
|
|
57
|
+
* @param allTests - All test cases
|
|
58
|
+
* @param endpoints - Parsed endpoints
|
|
59
|
+
* @returns Repair suggestion or null
|
|
60
|
+
*/
|
|
61
|
+
async function suggestRepair(result, allTests, endpoints) {
|
|
62
|
+
const { testCase, actualStatus, error } = result;
|
|
63
|
+
// Repair 1: Authentication failure (401/403)
|
|
64
|
+
if (actualStatus === 401 || actualStatus === 403) {
|
|
65
|
+
return {
|
|
66
|
+
testId: testCase.id,
|
|
67
|
+
type: 'add_auth_dependency',
|
|
68
|
+
description: 'Test requires authentication but has no auth dependency',
|
|
69
|
+
confidence: 'high',
|
|
70
|
+
fix: {
|
|
71
|
+
addDependency: 'login-success',
|
|
72
|
+
reason: 'Test received 401/403, needs authentication'
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// Repair 2: Resource not found (404) - add creation dependency
|
|
77
|
+
if (actualStatus === 404 && testCase.method !== 'POST') {
|
|
78
|
+
const createTest = findCreateTest(testCase, allTests);
|
|
79
|
+
if (createTest) {
|
|
80
|
+
return {
|
|
81
|
+
testId: testCase.id,
|
|
82
|
+
type: 'add_resource_dependency',
|
|
83
|
+
description: `Resource not found, needs to be created first`,
|
|
84
|
+
confidence: 'high',
|
|
85
|
+
fix: {
|
|
86
|
+
addDependency: createTest.id,
|
|
87
|
+
extractId: 'response.body.id',
|
|
88
|
+
injectId: `path:${testCase.path}`,
|
|
89
|
+
reason: `Resource doesn't exist, must create via ${createTest.path}`
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Repair 3: Schema validation or bad request (400)
|
|
95
|
+
if (actualStatus === 400) {
|
|
96
|
+
// Try to fix with AI
|
|
97
|
+
const endpoint = endpoints.find(e => e.path === testCase.path && e.method === testCase.method);
|
|
98
|
+
if (endpoint && testCase.body) {
|
|
99
|
+
const fixedBody = await fixRequestBodyWithAI(testCase, endpoint, error);
|
|
100
|
+
if (fixedBody) {
|
|
101
|
+
return {
|
|
102
|
+
testId: testCase.id,
|
|
103
|
+
type: 'fix_schema_validation',
|
|
104
|
+
description: 'Request body does not match schema',
|
|
105
|
+
confidence: 'medium',
|
|
106
|
+
fix: {
|
|
107
|
+
newBody: fixedBody,
|
|
108
|
+
reason: 'AI corrected request body to match schema'
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Finds the corresponding creation test for a resource
|
|
118
|
+
*
|
|
119
|
+
* @param testCase - Test that needs a resource
|
|
120
|
+
* @param allTests - All test cases
|
|
121
|
+
* @returns Creation test or null
|
|
122
|
+
*/
|
|
123
|
+
function findCreateTest(testCase, allTests) {
|
|
124
|
+
// Extract base path (without parameters)
|
|
125
|
+
const basePath = testCase.path.replace(/\/\{[^}]+\}.*$/, '');
|
|
126
|
+
// Find POST test to the base path
|
|
127
|
+
const createTests = allTests.filter(t => t.method === 'POST' &&
|
|
128
|
+
t.path === basePath &&
|
|
129
|
+
t.category === 'happy-path' &&
|
|
130
|
+
t.expectedStatus >= 200 &&
|
|
131
|
+
t.expectedStatus < 300);
|
|
132
|
+
return createTests.length > 0 ? createTests[0] : null;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Uses AI to fix a request body that failed validation
|
|
136
|
+
*
|
|
137
|
+
* @param testCase - Failed test case
|
|
138
|
+
* @param endpoint - Endpoint information
|
|
139
|
+
* @param error - Error message
|
|
140
|
+
* @returns Fixed body or null
|
|
141
|
+
*/
|
|
142
|
+
async function fixRequestBodyWithAI(testCase, endpoint, error) {
|
|
143
|
+
try {
|
|
144
|
+
const prompt = `Fix this API request body to match the schema.
|
|
145
|
+
|
|
146
|
+
Endpoint: ${testCase.method} ${testCase.path}
|
|
147
|
+
Current body: ${JSON.stringify(testCase.body, null, 2)}
|
|
148
|
+
Expected schema: ${JSON.stringify(endpoint.requestBody, null, 2)}
|
|
149
|
+
Error: ${error || 'Schema validation failed'}
|
|
150
|
+
|
|
151
|
+
Respond with ONLY the fixed JSON body, no explanation.`;
|
|
152
|
+
log.debug('Attempting AI body fix', { testId: testCase.id });
|
|
153
|
+
const result = await callLLM(prompt, {
|
|
154
|
+
maxTokens: 512,
|
|
155
|
+
temperature: 0.2,
|
|
156
|
+
timeout: 10000
|
|
157
|
+
});
|
|
158
|
+
if (result.success && result.text) {
|
|
159
|
+
// Clean response (remove markdown if present)
|
|
160
|
+
let cleaned = result.text.trim();
|
|
161
|
+
if (cleaned.startsWith('```')) {
|
|
162
|
+
cleaned = cleaned.replace(/^```(?:json)?\n/, '').replace(/\n```$/, '');
|
|
163
|
+
}
|
|
164
|
+
try {
|
|
165
|
+
const fixedBody = JSON.parse(cleaned);
|
|
166
|
+
log.info('AI successfully fixed request body', { testId: testCase.id });
|
|
167
|
+
return fixedBody;
|
|
168
|
+
}
|
|
169
|
+
catch (parseError) {
|
|
170
|
+
log.warn('AI response not valid JSON', { testId: testCase.id, parseError });
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
log.error('AI body fix failed', {
|
|
176
|
+
testId: testCase.id,
|
|
177
|
+
error: error instanceof Error ? error.message : String(error)
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Applies repairs to test cases
|
|
184
|
+
*
|
|
185
|
+
* @param tests - Original test cases
|
|
186
|
+
* @param repairs - Repairs to apply
|
|
187
|
+
* @returns Updated test cases
|
|
188
|
+
*/
|
|
189
|
+
export function applyRepairs(tests, repairs) {
|
|
190
|
+
const repairMap = new Map(repairs.map(r => [r.testId, r]));
|
|
191
|
+
return tests.map(test => {
|
|
192
|
+
const repair = repairMap.get(test.id);
|
|
193
|
+
if (!repair) {
|
|
194
|
+
return test;
|
|
195
|
+
}
|
|
196
|
+
log.info('Applying repair', {
|
|
197
|
+
testId: test.id,
|
|
198
|
+
type: repair.type,
|
|
199
|
+
confidence: repair.confidence
|
|
200
|
+
});
|
|
201
|
+
// Apply fix based on type
|
|
202
|
+
if (repair.type === 'fix_schema_validation' && repair.fix.newBody) {
|
|
203
|
+
return {
|
|
204
|
+
...test,
|
|
205
|
+
body: repair.fix.newBody
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
// For dependency repairs, we don't modify the test itself
|
|
209
|
+
// The dependencies will be handled separately
|
|
210
|
+
return test;
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=test-auto-repairer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-auto-repairer.js","sourceRoot":"","sources":["../../src/repairers/test-auto-repairer.ts"],"names":[],"mappings":"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"}
|