@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,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Detector - Automatic test dependency detection
|
|
3
|
+
*
|
|
4
|
+
* Automatically detects dependencies between tests using heuristics and optionally AI.
|
|
5
|
+
* Identifies which tests must run before others based on resource creation,
|
|
6
|
+
* authentication requirements, and endpoint relationships.
|
|
7
|
+
*
|
|
8
|
+
* @module ai-engine/dependency-detector
|
|
9
|
+
*/
|
|
10
|
+
import type { TestCase, ParsedEndpoint } from '../types/index.js';
|
|
11
|
+
import type { AIConfig } from '../types/ai-config.js';
|
|
12
|
+
/**
|
|
13
|
+
* Detects dependencies between tests automatically
|
|
14
|
+
*
|
|
15
|
+
* Uses heuristic rules first, then optionally AI for complex cases
|
|
16
|
+
*
|
|
17
|
+
* @param tests - Array of test cases
|
|
18
|
+
* @param endpoints - Array of parsed endpoints
|
|
19
|
+
* @param aiConfig - AI configuration
|
|
20
|
+
* @returns Dependency map (testId -> array of testIds it depends on)
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const deps = await detectDependencies(tests, endpoints, aiConfig);
|
|
25
|
+
* // Returns: { "get-user": ["login"], "update-user": ["login", "get-user"] }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function detectDependencies(tests: TestCase[], endpoints: ParsedEndpoint[], aiConfig: AIConfig): Promise<Record<string, string[]>>;
|
|
29
|
+
/**
|
|
30
|
+
* Detects dependencies using heuristic rules (no AI)
|
|
31
|
+
*
|
|
32
|
+
* Rules:
|
|
33
|
+
* 1. All protected endpoints depend on login/auth endpoint
|
|
34
|
+
* 2. GET /resource/{id} depends on POST /resource
|
|
35
|
+
* 3. PUT /resource/{id} depends on POST /resource
|
|
36
|
+
* 4. DELETE /resource/{id} depends on POST /resource
|
|
37
|
+
* 5. Tests in same category (same path prefix) maintain order
|
|
38
|
+
*
|
|
39
|
+
* @param tests - Array of test cases
|
|
40
|
+
* @param endpoints - Array of parsed endpoints
|
|
41
|
+
* @returns Dependency map
|
|
42
|
+
*/
|
|
43
|
+
export declare function detectHeuristicDependencies(tests: TestCase[], _endpoints: ParsedEndpoint[]): Record<string, string[]>;
|
|
44
|
+
/**
|
|
45
|
+
* Topologically sorts tests based on dependencies
|
|
46
|
+
*
|
|
47
|
+
* @param tests - Array of tests
|
|
48
|
+
* @param dependencies - Dependency map
|
|
49
|
+
* @returns Sorted tests (dependencies first)
|
|
50
|
+
*/
|
|
51
|
+
export declare function sortTestsByDependencies(tests: TestCase[], dependencies: Record<string, string[]>): TestCase[];
|
|
52
|
+
//# sourceMappingURL=dependency-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-detector.d.ts","sourceRoot":"","sources":["../../src/ai-engine/dependency-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAMtD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,QAAQ,EAAE,EACjB,SAAS,EAAE,cAAc,EAAE,EAC3B,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CA+BnC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,QAAQ,EAAE,EACjB,UAAU,EAAE,cAAc,EAAE,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAuD1B;AAsFD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,EAAE,EACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACrC,QAAQ,EAAE,CA+CZ"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Detector - Automatic test dependency detection
|
|
3
|
+
*
|
|
4
|
+
* Automatically detects dependencies between tests using heuristics and optionally AI.
|
|
5
|
+
* Identifies which tests must run before others based on resource creation,
|
|
6
|
+
* authentication requirements, and endpoint relationships.
|
|
7
|
+
*
|
|
8
|
+
* @module ai-engine/dependency-detector
|
|
9
|
+
*/
|
|
10
|
+
import { createLogger } from '../utils/logger.js';
|
|
11
|
+
import { callLLM } from '../llm/ai-client.js';
|
|
12
|
+
const log = createLogger('dependency-detector');
|
|
13
|
+
/**
|
|
14
|
+
* Detects dependencies between tests automatically
|
|
15
|
+
*
|
|
16
|
+
* Uses heuristic rules first, then optionally AI for complex cases
|
|
17
|
+
*
|
|
18
|
+
* @param tests - Array of test cases
|
|
19
|
+
* @param endpoints - Array of parsed endpoints
|
|
20
|
+
* @param aiConfig - AI configuration
|
|
21
|
+
* @returns Dependency map (testId -> array of testIds it depends on)
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const deps = await detectDependencies(tests, endpoints, aiConfig);
|
|
26
|
+
* // Returns: { "get-user": ["login"], "update-user": ["login", "get-user"] }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export async function detectDependencies(tests, endpoints, aiConfig) {
|
|
30
|
+
log.info('Detecting test dependencies', {
|
|
31
|
+
testCount: tests.length,
|
|
32
|
+
aiLevel: aiConfig.level
|
|
33
|
+
});
|
|
34
|
+
// Always use heuristic detection (free, fast, reliable)
|
|
35
|
+
const heuristicDeps = detectHeuristicDependencies(tests, endpoints);
|
|
36
|
+
log.info('Heuristic dependencies detected', {
|
|
37
|
+
count: Object.keys(heuristicDeps).length
|
|
38
|
+
});
|
|
39
|
+
// If AI capabilities enabled, enhance with AI detection
|
|
40
|
+
if (aiConfig.capabilities.autoDependencies && aiConfig.level !== 'off') {
|
|
41
|
+
try {
|
|
42
|
+
const aiDeps = await detectAIDependencies(tests, endpoints, aiConfig);
|
|
43
|
+
log.info('AI dependencies detected', {
|
|
44
|
+
count: Object.keys(aiDeps).length
|
|
45
|
+
});
|
|
46
|
+
// Merge: heuristic takes precedence (more reliable)
|
|
47
|
+
return { ...aiDeps, ...heuristicDeps };
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
log.warn('AI dependency detection failed, using heuristics only', {
|
|
51
|
+
error: error instanceof Error ? error.message : String(error)
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return heuristicDeps;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Detects dependencies using heuristic rules (no AI)
|
|
59
|
+
*
|
|
60
|
+
* Rules:
|
|
61
|
+
* 1. All protected endpoints depend on login/auth endpoint
|
|
62
|
+
* 2. GET /resource/{id} depends on POST /resource
|
|
63
|
+
* 3. PUT /resource/{id} depends on POST /resource
|
|
64
|
+
* 4. DELETE /resource/{id} depends on POST /resource
|
|
65
|
+
* 5. Tests in same category (same path prefix) maintain order
|
|
66
|
+
*
|
|
67
|
+
* @param tests - Array of test cases
|
|
68
|
+
* @param endpoints - Array of parsed endpoints
|
|
69
|
+
* @returns Dependency map
|
|
70
|
+
*/
|
|
71
|
+
export function detectHeuristicDependencies(tests, _endpoints) {
|
|
72
|
+
const deps = {};
|
|
73
|
+
// Find login/auth test (POST to /login, /auth, /token, /oauth/token, etc.)
|
|
74
|
+
const authTest = tests.find(t => t.method === 'POST' &&
|
|
75
|
+
t.category === 'happy-path' &&
|
|
76
|
+
(t.path.includes('login') ||
|
|
77
|
+
t.path.includes('auth') ||
|
|
78
|
+
t.path.includes('token') ||
|
|
79
|
+
t.path.includes('oauth')));
|
|
80
|
+
// Rule 1: Protected endpoints depend on auth
|
|
81
|
+
if (authTest) {
|
|
82
|
+
for (const test of tests) {
|
|
83
|
+
if (test.id === authTest.id)
|
|
84
|
+
continue; // Skip auth test itself
|
|
85
|
+
if (test.requiresAuth && test.category === 'happy-path') {
|
|
86
|
+
deps[test.id] = deps[test.id] || [];
|
|
87
|
+
if (!deps[test.id].includes(authTest.id)) {
|
|
88
|
+
deps[test.id].push(authTest.id);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Rules 2-4: Resource CRUD dependencies
|
|
94
|
+
for (const test of tests) {
|
|
95
|
+
// Only apply to happy-path tests
|
|
96
|
+
if (test.category !== 'happy-path')
|
|
97
|
+
continue;
|
|
98
|
+
// Extract resource path (e.g., /users/{id} -> /users)
|
|
99
|
+
const resourcePath = extractResourcePath(test.path);
|
|
100
|
+
if (!resourcePath)
|
|
101
|
+
continue;
|
|
102
|
+
// Find creation test (POST to resource)
|
|
103
|
+
const createTest = tests.find(t => t.method === 'POST' &&
|
|
104
|
+
t.category === 'happy-path' &&
|
|
105
|
+
t.path === resourcePath &&
|
|
106
|
+
t.id !== test.id);
|
|
107
|
+
if (!createTest)
|
|
108
|
+
continue;
|
|
109
|
+
// If test is GET/PUT/DELETE on resource/{id}, depend on POST
|
|
110
|
+
if (test.path.includes('{') && (test.method === 'GET' || test.method === 'PUT' || test.method === 'DELETE')) {
|
|
111
|
+
deps[test.id] = deps[test.id] || [];
|
|
112
|
+
if (!deps[test.id].includes(createTest.id)) {
|
|
113
|
+
deps[test.id].push(createTest.id);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return deps;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Detects dependencies using AI (complex cases)
|
|
121
|
+
*
|
|
122
|
+
* @param tests - Array of test cases
|
|
123
|
+
* @param endpoints - Array of parsed endpoints
|
|
124
|
+
* @param aiConfig - AI configuration
|
|
125
|
+
* @returns Dependency map
|
|
126
|
+
*/
|
|
127
|
+
async function detectAIDependencies(tests, _endpoints, aiConfig) {
|
|
128
|
+
// Prepare test summary for AI
|
|
129
|
+
const testSummary = tests.map(t => ({
|
|
130
|
+
id: t.id,
|
|
131
|
+
method: t.method,
|
|
132
|
+
path: t.path,
|
|
133
|
+
category: t.category,
|
|
134
|
+
requiresAuth: t.requiresAuth
|
|
135
|
+
}));
|
|
136
|
+
const prompt = `Analyze these API test cases and identify dependencies.
|
|
137
|
+
|
|
138
|
+
TESTS:
|
|
139
|
+
${JSON.stringify(testSummary, null, 2)}
|
|
140
|
+
|
|
141
|
+
RULES:
|
|
142
|
+
1. Test B depends on Test A if B needs data created by A
|
|
143
|
+
2. Protected endpoints need authentication first
|
|
144
|
+
3. Update/Delete operations need resource creation first
|
|
145
|
+
4. Consider logical flow (login -> profile -> update-profile)
|
|
146
|
+
|
|
147
|
+
Return ONLY JSON in this format:
|
|
148
|
+
{
|
|
149
|
+
"dependencies": {
|
|
150
|
+
"test-id": ["dependency-1", "dependency-2"],
|
|
151
|
+
...
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
Respond with JSON only, no markdown.`;
|
|
156
|
+
const result = await callLLM(prompt, aiConfig.llm);
|
|
157
|
+
if (!result.success || !result.text) {
|
|
158
|
+
return {};
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
// Parse AI response
|
|
162
|
+
const text = result.text.trim();
|
|
163
|
+
const jsonMatch = text.match(/\{[\s\S]*\}/);
|
|
164
|
+
if (!jsonMatch)
|
|
165
|
+
return {};
|
|
166
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
167
|
+
return parsed.dependencies || {};
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
log.warn('Failed to parse AI dependencies response', {
|
|
171
|
+
error: error instanceof Error ? error.message : String(error)
|
|
172
|
+
});
|
|
173
|
+
return {};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Extracts resource path from an endpoint path
|
|
178
|
+
*
|
|
179
|
+
* @param path - Endpoint path (e.g., /users/{id}, /api/v1/products/{productId})
|
|
180
|
+
* @returns Resource path (e.g., /users, /api/v1/products) or undefined
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* extractResourcePath('/users/{id}') // '/users'
|
|
184
|
+
* extractResourcePath('/api/products/{productId}/reviews') // '/api/products'
|
|
185
|
+
*/
|
|
186
|
+
function extractResourcePath(path) {
|
|
187
|
+
// Remove path parameters
|
|
188
|
+
const parts = path.split('/').filter(p => p && !p.startsWith('{'));
|
|
189
|
+
if (parts.length === 0)
|
|
190
|
+
return undefined;
|
|
191
|
+
// Reconstruct path without parameters
|
|
192
|
+
return '/' + parts.join('/');
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Topologically sorts tests based on dependencies
|
|
196
|
+
*
|
|
197
|
+
* @param tests - Array of tests
|
|
198
|
+
* @param dependencies - Dependency map
|
|
199
|
+
* @returns Sorted tests (dependencies first)
|
|
200
|
+
*/
|
|
201
|
+
export function sortTestsByDependencies(tests, dependencies) {
|
|
202
|
+
const sorted = [];
|
|
203
|
+
const visited = new Set();
|
|
204
|
+
const visiting = new Set();
|
|
205
|
+
// Create test map for quick lookup
|
|
206
|
+
const testMap = new Map(tests.map(t => [t.id, t]));
|
|
207
|
+
const visit = (testId) => {
|
|
208
|
+
if (visited.has(testId))
|
|
209
|
+
return;
|
|
210
|
+
if (visiting.has(testId)) {
|
|
211
|
+
log.warn('Circular dependency detected', { testId });
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
visiting.add(testId);
|
|
215
|
+
// Visit dependencies first
|
|
216
|
+
const deps = dependencies[testId] || [];
|
|
217
|
+
for (const depId of deps) {
|
|
218
|
+
if (testMap.has(depId)) {
|
|
219
|
+
visit(depId);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
visiting.delete(testId);
|
|
223
|
+
visited.add(testId);
|
|
224
|
+
const test = testMap.get(testId);
|
|
225
|
+
if (test) {
|
|
226
|
+
sorted.push(test);
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
// Visit all tests
|
|
230
|
+
for (const test of tests) {
|
|
231
|
+
visit(test.id);
|
|
232
|
+
}
|
|
233
|
+
// Add any tests not in dependency graph
|
|
234
|
+
for (const test of tests) {
|
|
235
|
+
if (!visited.has(test.id)) {
|
|
236
|
+
sorted.push(test);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return sorted;
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=dependency-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-detector.js","sourceRoot":"","sources":["../../src/ai-engine/dependency-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Edge Case Suggester - Domain-specific edge cases
|
|
3
|
+
*
|
|
4
|
+
* Suggests edge cases based on API domain knowledge beyond boundary value analysis.
|
|
5
|
+
* For example: payment APIs need duplicate transaction tests, booking APIs need
|
|
6
|
+
* double-booking tests.
|
|
7
|
+
*
|
|
8
|
+
* @module ai-engine/edge-case-suggester
|
|
9
|
+
*/
|
|
10
|
+
import type { TestCase, ParsedEndpoint } from '../types/index.js';
|
|
11
|
+
import type { AIConfig } from '../types/ai-config.js';
|
|
12
|
+
import type { APIContext } from '../analyzers/context-analyzer.js';
|
|
13
|
+
/**
|
|
14
|
+
* Edge case suggestion
|
|
15
|
+
*/
|
|
16
|
+
export interface EdgeCaseSuggestion {
|
|
17
|
+
/** Suggested test case ID */
|
|
18
|
+
id: string;
|
|
19
|
+
/** Test name */
|
|
20
|
+
name: string;
|
|
21
|
+
/** Description of the edge case */
|
|
22
|
+
description: string;
|
|
23
|
+
/** Endpoint method */
|
|
24
|
+
method: string;
|
|
25
|
+
/** Endpoint path */
|
|
26
|
+
path: string;
|
|
27
|
+
/** Category */
|
|
28
|
+
category: 'edge-case';
|
|
29
|
+
/** Expected status code */
|
|
30
|
+
expectedStatus: number;
|
|
31
|
+
/** Test data suggestions */
|
|
32
|
+
dataSuggestion: string;
|
|
33
|
+
/** Reason why this edge case is important */
|
|
34
|
+
rationale: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Suggests domain-specific edge cases
|
|
38
|
+
*
|
|
39
|
+
* @param endpoints - Array of parsed endpoints
|
|
40
|
+
* @param apiContext - API context
|
|
41
|
+
* @param aiConfig - AI configuration
|
|
42
|
+
* @returns Array of edge case suggestions
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const suggestions = await suggestDomainEdgeCases(endpoints, { domain: 'banking' }, config);
|
|
47
|
+
* // Returns suggestions like:
|
|
48
|
+
* // - Negative amount transfer
|
|
49
|
+
* // - Transfer to same account
|
|
50
|
+
* // - Insufficient balance
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare function suggestDomainEdgeCases(endpoints: ParsedEndpoint[], apiContext: APIContext, aiConfig: AIConfig): Promise<EdgeCaseSuggestion[]>;
|
|
54
|
+
/**
|
|
55
|
+
* Converts edge case suggestions to actual test cases
|
|
56
|
+
*
|
|
57
|
+
* Note: This generates test TEMPLATES that need data populated
|
|
58
|
+
*
|
|
59
|
+
* @param suggestions - Edge case suggestions
|
|
60
|
+
* @returns Test cases (with placeholder data)
|
|
61
|
+
*/
|
|
62
|
+
export declare function suggestionsToTests(suggestions: EdgeCaseSuggestion[]): TestCase[];
|
|
63
|
+
//# sourceMappingURL=edge-case-suggester.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-case-suggester.d.ts","sourceRoot":"","sources":["../../src/ai-engine/edge-case-suggester.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAMnE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,QAAQ,EAAE,WAAW,CAAC;IACtB,2BAA2B;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,4BAA4B;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,cAAc,EAAE,EAC3B,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAmC/B;AAmFD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,kBAAkB,EAAE,GAAG,QAAQ,EAAE,CAmChF"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Edge Case Suggester - Domain-specific edge cases
|
|
3
|
+
*
|
|
4
|
+
* Suggests edge cases based on API domain knowledge beyond boundary value analysis.
|
|
5
|
+
* For example: payment APIs need duplicate transaction tests, booking APIs need
|
|
6
|
+
* double-booking tests.
|
|
7
|
+
*
|
|
8
|
+
* @module ai-engine/edge-case-suggester
|
|
9
|
+
*/
|
|
10
|
+
import { createLogger } from '../utils/logger.js';
|
|
11
|
+
import { callLLM } from '../llm/ai-client.js';
|
|
12
|
+
const log = createLogger('edge-case-suggester');
|
|
13
|
+
/**
|
|
14
|
+
* Suggests domain-specific edge cases
|
|
15
|
+
*
|
|
16
|
+
* @param endpoints - Array of parsed endpoints
|
|
17
|
+
* @param apiContext - API context
|
|
18
|
+
* @param aiConfig - AI configuration
|
|
19
|
+
* @returns Array of edge case suggestions
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const suggestions = await suggestDomainEdgeCases(endpoints, { domain: 'banking' }, config);
|
|
24
|
+
* // Returns suggestions like:
|
|
25
|
+
* // - Negative amount transfer
|
|
26
|
+
* // - Transfer to same account
|
|
27
|
+
* // - Insufficient balance
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export async function suggestDomainEdgeCases(endpoints, apiContext, aiConfig) {
|
|
31
|
+
// Check if capability is enabled (don't require 'advanced' level)
|
|
32
|
+
if (!aiConfig.capabilities.domainEdgeCases) {
|
|
33
|
+
log.info('Domain edge cases capability disabled');
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
// Validate API context has necessary fields
|
|
37
|
+
if (!apiContext.domain && !apiContext.type) {
|
|
38
|
+
log.warn('APIContext missing domain/type, cannot suggest edge cases', { apiContext });
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
// Use domain or fall back to type
|
|
42
|
+
const domain = apiContext.domain || apiContext.type || 'unknown';
|
|
43
|
+
const industry = apiContext.industry || 'unknown';
|
|
44
|
+
const entityTypes = apiContext.entityTypes || [];
|
|
45
|
+
log.info('Suggesting domain-specific edge cases', {
|
|
46
|
+
domain,
|
|
47
|
+
industry,
|
|
48
|
+
entityTypes: entityTypes.length,
|
|
49
|
+
endpointCount: endpoints.length
|
|
50
|
+
});
|
|
51
|
+
try {
|
|
52
|
+
const suggestions = await generateAIEdgeCases(endpoints, apiContext, aiConfig);
|
|
53
|
+
log.info('Domain edge cases suggested', { count: suggestions.length });
|
|
54
|
+
return suggestions;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
log.warn('AI edge case suggestion failed', {
|
|
58
|
+
error: error instanceof Error ? error.message : String(error)
|
|
59
|
+
});
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Generates edge case suggestions using AI
|
|
65
|
+
*/
|
|
66
|
+
async function generateAIEdgeCases(endpoints, apiContext, aiConfig) {
|
|
67
|
+
// Prepare endpoint summary
|
|
68
|
+
const endpointSummary = endpoints.slice(0, 20).map(e => ({
|
|
69
|
+
method: e.method,
|
|
70
|
+
path: e.path,
|
|
71
|
+
description: e.operation?.summary || e.operation?.description
|
|
72
|
+
}));
|
|
73
|
+
const prompt = `Suggest domain-specific edge cases for this ${apiContext.domain || 'API'}.
|
|
74
|
+
|
|
75
|
+
API CONTEXT:
|
|
76
|
+
- Domain: ${apiContext.domain || 'unknown'}
|
|
77
|
+
- Industry: ${apiContext.industry || 'unknown'}
|
|
78
|
+
- Entity Types: ${apiContext.entityTypes?.join(', ') || 'unknown'}
|
|
79
|
+
|
|
80
|
+
ENDPOINTS:
|
|
81
|
+
${JSON.stringify(endpointSummary, null, 2)}
|
|
82
|
+
|
|
83
|
+
INSTRUCTIONS:
|
|
84
|
+
Based on the domain, suggest edge cases that are SPECIFIC to this industry.
|
|
85
|
+
|
|
86
|
+
Examples by domain:
|
|
87
|
+
- Banking: negative amounts, duplicate transfers, insufficient balance
|
|
88
|
+
- E-commerce: out of stock, invalid promo codes, cart expiration
|
|
89
|
+
- Healthcare: duplicate prescriptions, medication conflicts, invalid insurance
|
|
90
|
+
- Booking: double booking, past dates, cancellation policies
|
|
91
|
+
|
|
92
|
+
Generate 5-10 domain-specific edge cases.
|
|
93
|
+
|
|
94
|
+
Return JSON array:
|
|
95
|
+
[
|
|
96
|
+
{
|
|
97
|
+
"id": "test-id",
|
|
98
|
+
"name": "Test name",
|
|
99
|
+
"description": "What this tests",
|
|
100
|
+
"method": "POST",
|
|
101
|
+
"path": "/endpoint",
|
|
102
|
+
"expectedStatus": 400,
|
|
103
|
+
"dataSuggestion": "What data to use",
|
|
104
|
+
"rationale": "Why this is important for ${apiContext.domain}"
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
|
|
108
|
+
Respond with JSON array only.`;
|
|
109
|
+
const result = await callLLM(prompt, {
|
|
110
|
+
...aiConfig.llm,
|
|
111
|
+
maxTokens: 2048
|
|
112
|
+
});
|
|
113
|
+
if (!result.success || !result.text) {
|
|
114
|
+
return [];
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
const text = result.text.trim();
|
|
118
|
+
const jsonMatch = text.match(/\[[\s\S]*?\]/);
|
|
119
|
+
if (!jsonMatch)
|
|
120
|
+
return [];
|
|
121
|
+
const suggestions = JSON.parse(jsonMatch[0]);
|
|
122
|
+
return suggestions.map((s) => ({
|
|
123
|
+
...s,
|
|
124
|
+
category: 'edge-case'
|
|
125
|
+
})).filter((s) => s.id && s.name && s.method && s.path);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
log.warn('Failed to parse AI edge case suggestions', {
|
|
129
|
+
error: error instanceof Error ? error.message : String(error)
|
|
130
|
+
});
|
|
131
|
+
return [];
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Converts edge case suggestions to actual test cases
|
|
136
|
+
*
|
|
137
|
+
* Note: This generates test TEMPLATES that need data populated
|
|
138
|
+
*
|
|
139
|
+
* @param suggestions - Edge case suggestions
|
|
140
|
+
* @returns Test cases (with placeholder data)
|
|
141
|
+
*/
|
|
142
|
+
export function suggestionsToTests(suggestions) {
|
|
143
|
+
// Validate input
|
|
144
|
+
if (!suggestions || !Array.isArray(suggestions) || suggestions.length === 0) {
|
|
145
|
+
log.debug('No suggestions to convert to tests');
|
|
146
|
+
return [];
|
|
147
|
+
}
|
|
148
|
+
// Map and filter invalid suggestions
|
|
149
|
+
return suggestions
|
|
150
|
+
.map(s => ({
|
|
151
|
+
id: s.id,
|
|
152
|
+
name: s.name,
|
|
153
|
+
description: s.description,
|
|
154
|
+
category: s.category,
|
|
155
|
+
method: s.method, // Cast from string to HttpMethod
|
|
156
|
+
path: s.path,
|
|
157
|
+
pathParams: {},
|
|
158
|
+
queryParams: {},
|
|
159
|
+
headers: {},
|
|
160
|
+
body: undefined, // Need to populate based on dataSuggestion
|
|
161
|
+
expectedStatus: s.expectedStatus,
|
|
162
|
+
validateSchema: false, // Edge cases may not match schema
|
|
163
|
+
_aiSuggestion: {
|
|
164
|
+
dataSuggestion: s.dataSuggestion,
|
|
165
|
+
rationale: s.rationale
|
|
166
|
+
}
|
|
167
|
+
}))
|
|
168
|
+
.filter(test => {
|
|
169
|
+
// Filter out invalid tests (missing required fields)
|
|
170
|
+
const isValid = test.id && test.name && test.method && test.path;
|
|
171
|
+
if (!isValid) {
|
|
172
|
+
log.warn('Filtering out invalid AI suggestion', { test });
|
|
173
|
+
}
|
|
174
|
+
return isValid;
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=edge-case-suggester.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-case-suggester.js","sourceRoot":"","sources":["../../src/ai-engine/edge-case-suggester.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Engine - AI-powered test generation modules
|
|
3
|
+
*
|
|
4
|
+
* Central export for all AI-powered test generation capabilities
|
|
5
|
+
*
|
|
6
|
+
* @module ai-engine
|
|
7
|
+
*/
|
|
8
|
+
export * from './dependency-detector.js';
|
|
9
|
+
export * from './dataflow-detector.js';
|
|
10
|
+
export * from './context-data-generator.js';
|
|
11
|
+
export * from './assertion-generator.js';
|
|
12
|
+
export * from './edge-case-suggester.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai-engine/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Engine - AI-powered test generation modules
|
|
3
|
+
*
|
|
4
|
+
* Central export for all AI-powered test generation capabilities
|
|
5
|
+
*
|
|
6
|
+
* @module ai-engine
|
|
7
|
+
*/
|
|
8
|
+
export * from './dependency-detector.js';
|
|
9
|
+
export * from './dataflow-detector.js';
|
|
10
|
+
export * from './context-data-generator.js';
|
|
11
|
+
export * from './assertion-generator.js';
|
|
12
|
+
export * from './edge-case-suggester.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai-engine/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI-Powered Failure Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Takes structured failure data and uses LLM to generate:
|
|
5
|
+
* - Human-readable summary
|
|
6
|
+
* - Actionable recommendations
|
|
7
|
+
* - Pattern detection
|
|
8
|
+
* - Critical issues identification
|
|
9
|
+
*
|
|
10
|
+
* @module analyzers/ai-failure-analyzer
|
|
11
|
+
*/
|
|
12
|
+
import type { FailureAnalysisResult } from './failure-analyzer.js';
|
|
13
|
+
export interface AIAnalysisResult {
|
|
14
|
+
summary: string;
|
|
15
|
+
recommendations: Array<{
|
|
16
|
+
issue: string;
|
|
17
|
+
fix: string;
|
|
18
|
+
priority?: 'critical' | 'high' | 'medium' | 'low';
|
|
19
|
+
autoRepairSuggestion?: string;
|
|
20
|
+
}>;
|
|
21
|
+
patterns?: Array<{
|
|
22
|
+
pattern: string;
|
|
23
|
+
occurrences: number;
|
|
24
|
+
description: string;
|
|
25
|
+
impact: 'critical' | 'high' | 'medium' | 'low';
|
|
26
|
+
}>;
|
|
27
|
+
errorExplanations?: Record<string, string>;
|
|
28
|
+
criticalIssues?: Array<{
|
|
29
|
+
title: string;
|
|
30
|
+
description: string;
|
|
31
|
+
affectedEndpoints: string[];
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Analyzes failures using AI to generate actionable insights
|
|
36
|
+
*
|
|
37
|
+
* @param failureAnalysis - Structured failure analysis from heuristic analyzer
|
|
38
|
+
* @returns AI-generated insights and recommendations
|
|
39
|
+
*/
|
|
40
|
+
export declare function analyzeFailuresWithAI(failureAnalysis: FailureAnalysisResult): Promise<AIAnalysisResult>;
|
|
41
|
+
//# sourceMappingURL=ai-failure-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-failure-analyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/ai-failure-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAKnE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,KAAK,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;QAClD,oBAAoB,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;KAChD,CAAC,CAAC;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC,CAAC;CACJ;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,eAAe,EAAE,qBAAqB,GACrC,OAAO,CAAC,gBAAgB,CAAC,CAuC3B"}
|