@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,327 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Edge Case Test Generator (Boundary Value Analysis)
|
|
3
|
+
*
|
|
4
|
+
* Generates test cases that explore edge cases and boundary values based on
|
|
5
|
+
* schema validations. Uses Boundary Value Analysis (BVA) technique to test
|
|
6
|
+
* values at the limits of acceptable ranges.
|
|
7
|
+
*
|
|
8
|
+
* @module generators/edge-case-generator
|
|
9
|
+
*/
|
|
10
|
+
import { faker } from '@faker-js/faker';
|
|
11
|
+
import { generateDataFromSchemaSync, aiLevelToMode } from './data-generator.js';
|
|
12
|
+
import { generateAuthHeaders } from '../utils/auth-generator.js';
|
|
13
|
+
import { analyzeBoundaries } from './edge-cases/boundary-analyzer.js';
|
|
14
|
+
/**
|
|
15
|
+
* Generates edge case test cases for all endpoints
|
|
16
|
+
*
|
|
17
|
+
* Edge cases include:
|
|
18
|
+
* - Boundary values (min/max for numbers, minLength/maxLength for strings)
|
|
19
|
+
* - Empty values where allowed
|
|
20
|
+
* - Each enum value tested separately
|
|
21
|
+
* - Combinations of optional fields
|
|
22
|
+
*
|
|
23
|
+
* @param endpoints - Array of parsed endpoints
|
|
24
|
+
* @param options - Generation options
|
|
25
|
+
* @returns Array of edge case test cases
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const spec = await parseOpenAPISpec('./api.yml');
|
|
30
|
+
* const endpoints = extractEndpoints(spec);
|
|
31
|
+
* const edgeCases = generateEdgeCaseTests(endpoints);
|
|
32
|
+
* console.log(`Generated ${edgeCases.length} edge case tests`);
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export function generateEdgeCaseTests(endpoints, options = {}) {
|
|
36
|
+
const { seed, maxOptionalCombinations = 10 } = options;
|
|
37
|
+
if (seed !== undefined) {
|
|
38
|
+
faker.seed(seed);
|
|
39
|
+
}
|
|
40
|
+
const testCases = [];
|
|
41
|
+
for (const endpoint of endpoints) {
|
|
42
|
+
const cases = generateEdgeCasesForEndpoint(endpoint, maxOptionalCombinations, options);
|
|
43
|
+
testCases.push(...cases);
|
|
44
|
+
}
|
|
45
|
+
return testCases;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generates edge case tests for a single endpoint
|
|
49
|
+
*
|
|
50
|
+
* @param endpoint - Parsed endpoint
|
|
51
|
+
* @param maxOptionalCombinations - Max combinations to generate
|
|
52
|
+
* @param options - Edge case options (for real data)
|
|
53
|
+
* @returns Array of edge case test cases
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
56
|
+
function generateEdgeCasesForEndpoint(endpoint, maxOptionalCombinations, options = {}) {
|
|
57
|
+
const testCases = [];
|
|
58
|
+
if (!endpoint.requestBody) {
|
|
59
|
+
// No request body, no edge cases to generate
|
|
60
|
+
return testCases;
|
|
61
|
+
}
|
|
62
|
+
const schema = endpoint.requestBody;
|
|
63
|
+
const successStatus = getSuccessStatusCode(endpoint);
|
|
64
|
+
if (!successStatus) {
|
|
65
|
+
return testCases;
|
|
66
|
+
}
|
|
67
|
+
// 1. Generate boundary value tests for each field
|
|
68
|
+
const boundaryTests = generateBoundaryValueTests(endpoint, schema, successStatus, options);
|
|
69
|
+
testCases.push(...boundaryTests);
|
|
70
|
+
// 2. Generate enum value tests
|
|
71
|
+
const enumTests = generateEnumValueTests(endpoint, schema, successStatus, options);
|
|
72
|
+
testCases.push(...enumTests);
|
|
73
|
+
// 3. Generate optional field combination tests
|
|
74
|
+
const optionalTests = generateOptionalFieldTests(endpoint, schema, successStatus, maxOptionalCombinations, options);
|
|
75
|
+
testCases.push(...optionalTests);
|
|
76
|
+
return testCases;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Generates tests for boundary values (min/max)
|
|
80
|
+
*
|
|
81
|
+
* @param endpoint - Parsed endpoint
|
|
82
|
+
* @param schema - Request body schema
|
|
83
|
+
* @param successStatus - Expected success status code
|
|
84
|
+
* @param options - Edge case options (for real data)
|
|
85
|
+
* @returns Boundary value test cases
|
|
86
|
+
* @internal
|
|
87
|
+
*/
|
|
88
|
+
function generateBoundaryValueTests(endpoint, schema, successStatus, options = {}) {
|
|
89
|
+
const testCases = [];
|
|
90
|
+
if (schema.type !== 'object' || !schema.properties) {
|
|
91
|
+
return testCases;
|
|
92
|
+
}
|
|
93
|
+
// For each property, generate boundary tests
|
|
94
|
+
for (const [propName, propSchema] of Object.entries(schema.properties)) {
|
|
95
|
+
if ('$ref' in propSchema)
|
|
96
|
+
continue;
|
|
97
|
+
const prop = propSchema;
|
|
98
|
+
const boundaries = analyzeBoundaries(prop, options);
|
|
99
|
+
for (const boundary of boundaries) {
|
|
100
|
+
// Create base body with required fields + REAL DATA
|
|
101
|
+
const body = generateBaseBody(schema, false, options);
|
|
102
|
+
// Set this field to boundary value
|
|
103
|
+
body[propName] = boundary.value;
|
|
104
|
+
const testCase = {
|
|
105
|
+
id: `edge-${endpoint.method.toLowerCase()}-${endpoint.path.replace(/[^a-zA-Z0-9]/g, '-')}-${propName}-${boundary.description.replace(/\s+/g, '-')}`,
|
|
106
|
+
name: `${endpoint.method} ${endpoint.path} - ${propName} ${boundary.description}`,
|
|
107
|
+
description: `Test ${propName} at ${boundary.description}`,
|
|
108
|
+
category: 'edge-case',
|
|
109
|
+
method: endpoint.method,
|
|
110
|
+
path: endpoint.path,
|
|
111
|
+
pathParams: generatePathParams(endpoint),
|
|
112
|
+
headers: generateAuthHeaders(endpoint.securitySchemes || []),
|
|
113
|
+
body,
|
|
114
|
+
contentType: endpoint.requestContentType,
|
|
115
|
+
expectedStatus: successStatus,
|
|
116
|
+
expectedSchema: endpoint.responses[successStatus],
|
|
117
|
+
validateSchema: true,
|
|
118
|
+
requiresAuth: endpoint.requiresAuth,
|
|
119
|
+
};
|
|
120
|
+
testCases.push(testCase);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return testCases;
|
|
124
|
+
}
|
|
125
|
+
// analyzeBoundaries is now in edge-cases/boundary-analyzer.ts
|
|
126
|
+
/**
|
|
127
|
+
* Generates tests for each enum value
|
|
128
|
+
*
|
|
129
|
+
* @param endpoint - Parsed endpoint
|
|
130
|
+
* @param schema - Request body schema
|
|
131
|
+
* @param successStatus - Expected success status
|
|
132
|
+
* @param options - Edge case options (for real data)
|
|
133
|
+
* @returns Enum value test cases
|
|
134
|
+
* @internal
|
|
135
|
+
*/
|
|
136
|
+
function generateEnumValueTests(endpoint, schema, successStatus, options = {}) {
|
|
137
|
+
const testCases = [];
|
|
138
|
+
if (schema.type !== 'object' || !schema.properties) {
|
|
139
|
+
return testCases;
|
|
140
|
+
}
|
|
141
|
+
for (const [propName, propSchema] of Object.entries(schema.properties)) {
|
|
142
|
+
if ('$ref' in propSchema)
|
|
143
|
+
continue;
|
|
144
|
+
const prop = propSchema;
|
|
145
|
+
if (prop.enum && prop.enum.length > 0) {
|
|
146
|
+
// Test each enum value
|
|
147
|
+
for (const enumValue of prop.enum) {
|
|
148
|
+
const body = generateBaseBody(schema, false, options);
|
|
149
|
+
body[propName] = enumValue;
|
|
150
|
+
const testCase = {
|
|
151
|
+
id: `edge-${endpoint.method.toLowerCase()}-${endpoint.path.replace(/[^a-zA-Z0-9]/g, '-')}-${propName}-enum-${String(enumValue).replace(/\s+/g, '-')}`,
|
|
152
|
+
name: `${endpoint.method} ${endpoint.path} - ${propName} = ${String(enumValue)}`,
|
|
153
|
+
description: `Test ${propName} with enum value: ${String(enumValue)}`,
|
|
154
|
+
category: 'edge-case',
|
|
155
|
+
method: endpoint.method,
|
|
156
|
+
path: endpoint.path,
|
|
157
|
+
pathParams: generatePathParams(endpoint),
|
|
158
|
+
headers: generateAuthHeaders(endpoint.securitySchemes || []),
|
|
159
|
+
body,
|
|
160
|
+
contentType: endpoint.requestContentType,
|
|
161
|
+
expectedStatus: successStatus,
|
|
162
|
+
expectedSchema: endpoint.responses[successStatus],
|
|
163
|
+
validateSchema: true,
|
|
164
|
+
requiresAuth: endpoint.requiresAuth,
|
|
165
|
+
};
|
|
166
|
+
testCases.push(testCase);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return testCases;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Generates tests for different combinations of optional fields
|
|
174
|
+
*
|
|
175
|
+
* @param endpoint - Parsed endpoint
|
|
176
|
+
* @param schema - Request body schema
|
|
177
|
+
* @param successStatus - Expected success status
|
|
178
|
+
* @param maxCombinations - Maximum combinations to generate
|
|
179
|
+
* @param options - Edge case options (for real data)
|
|
180
|
+
* @returns Optional field combination test cases
|
|
181
|
+
* @internal
|
|
182
|
+
*/
|
|
183
|
+
function generateOptionalFieldTests(endpoint, schema, successStatus, maxCombinations, options = {}) {
|
|
184
|
+
const testCases = [];
|
|
185
|
+
if (schema.type !== 'object' || !schema.properties) {
|
|
186
|
+
return testCases;
|
|
187
|
+
}
|
|
188
|
+
const required = new Set(schema.required || []);
|
|
189
|
+
const optional = Object.keys(schema.properties).filter(name => !required.has(name));
|
|
190
|
+
if (optional.length === 0) {
|
|
191
|
+
// No optional fields
|
|
192
|
+
return testCases;
|
|
193
|
+
}
|
|
194
|
+
// Test 1: Only required fields
|
|
195
|
+
const onlyRequiredBody = generateBaseBody(schema, false, options);
|
|
196
|
+
testCases.push({
|
|
197
|
+
id: `edge-${endpoint.method.toLowerCase()}-${endpoint.path.replace(/[^a-zA-Z0-9]/g, '-')}-only-required`,
|
|
198
|
+
name: `${endpoint.method} ${endpoint.path} - Only required fields`,
|
|
199
|
+
description: 'Request with only required fields (no optional)',
|
|
200
|
+
category: 'edge-case',
|
|
201
|
+
method: endpoint.method,
|
|
202
|
+
path: endpoint.path,
|
|
203
|
+
pathParams: generatePathParams(endpoint),
|
|
204
|
+
headers: generateAuthHeaders(endpoint.securitySchemes || []),
|
|
205
|
+
body: onlyRequiredBody,
|
|
206
|
+
contentType: endpoint.requestContentType,
|
|
207
|
+
expectedStatus: successStatus,
|
|
208
|
+
expectedSchema: endpoint.responses[successStatus],
|
|
209
|
+
validateSchema: true,
|
|
210
|
+
requiresAuth: endpoint.requiresAuth,
|
|
211
|
+
});
|
|
212
|
+
// Test 2: All fields (required + optional)
|
|
213
|
+
const allFieldsBody = generateBaseBody(schema, true, options);
|
|
214
|
+
testCases.push({
|
|
215
|
+
id: `edge-${endpoint.method.toLowerCase()}-${endpoint.path.replace(/[^a-zA-Z0-9]/g, '-')}-all-fields`,
|
|
216
|
+
name: `${endpoint.method} ${endpoint.path} - All fields`,
|
|
217
|
+
description: 'Request with all fields (required + optional)',
|
|
218
|
+
category: 'edge-case',
|
|
219
|
+
method: endpoint.method,
|
|
220
|
+
path: endpoint.path,
|
|
221
|
+
pathParams: generatePathParams(endpoint),
|
|
222
|
+
headers: generateAuthHeaders(endpoint.securitySchemes || []),
|
|
223
|
+
body: allFieldsBody,
|
|
224
|
+
contentType: endpoint.requestContentType,
|
|
225
|
+
expectedStatus: successStatus,
|
|
226
|
+
expectedSchema: endpoint.responses[successStatus],
|
|
227
|
+
validateSchema: true,
|
|
228
|
+
requiresAuth: endpoint.requiresAuth,
|
|
229
|
+
});
|
|
230
|
+
// Test 3: Individual optional fields (if not too many)
|
|
231
|
+
if (optional.length <= maxCombinations) {
|
|
232
|
+
for (const optField of optional) {
|
|
233
|
+
const body = generateBaseBody(schema, false, options);
|
|
234
|
+
const propSchema = schema.properties[optField];
|
|
235
|
+
if (!('$ref' in propSchema)) {
|
|
236
|
+
body[optField] = generateDataFromSchemaSync(propSchema, {
|
|
237
|
+
realData: options.realData,
|
|
238
|
+
useExamples: options.useExamples
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
testCases.push({
|
|
242
|
+
id: `edge-${endpoint.method.toLowerCase()}-${endpoint.path.replace(/[^a-zA-Z0-9]/g, '-')}-with-${optField}`,
|
|
243
|
+
name: `${endpoint.method} ${endpoint.path} - With optional ${optField}`,
|
|
244
|
+
description: `Request with required fields + optional field: ${optField}`,
|
|
245
|
+
category: 'edge-case',
|
|
246
|
+
method: endpoint.method,
|
|
247
|
+
path: endpoint.path,
|
|
248
|
+
pathParams: generatePathParams(endpoint),
|
|
249
|
+
headers: generateAuthHeaders(endpoint.securitySchemes || []),
|
|
250
|
+
body,
|
|
251
|
+
contentType: endpoint.requestContentType,
|
|
252
|
+
expectedStatus: successStatus,
|
|
253
|
+
expectedSchema: endpoint.responses[successStatus],
|
|
254
|
+
validateSchema: true,
|
|
255
|
+
requiresAuth: endpoint.requiresAuth,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return testCases;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Generates base body with required fields
|
|
263
|
+
*
|
|
264
|
+
* @param schema - Object schema
|
|
265
|
+
* @param includeOptional - Whether to include optional fields
|
|
266
|
+
* @param options - Edge case options (for real data)
|
|
267
|
+
* @returns Generated body object
|
|
268
|
+
* @internal
|
|
269
|
+
*/
|
|
270
|
+
function generateBaseBody(schema, includeOptional = false, options = {}) {
|
|
271
|
+
const { aiLevel, aiMode, apiContext } = options;
|
|
272
|
+
const effectiveAiMode = aiLevelToMode(aiLevel, aiMode);
|
|
273
|
+
// Note: Using sync version - for AI modes, this will use faker fallback
|
|
274
|
+
// To fully support AI in edge cases, the entire edge-case-generator would need to be async
|
|
275
|
+
const result = generateDataFromSchemaSync(schema, {
|
|
276
|
+
includeOptional,
|
|
277
|
+
realData: options.realData,
|
|
278
|
+
useExamples: options.useExamples,
|
|
279
|
+
aiMode: effectiveAiMode || 'faker', // Force faker for sync compatibility
|
|
280
|
+
apiContext
|
|
281
|
+
});
|
|
282
|
+
// Ensure we always return an object
|
|
283
|
+
if (!result || typeof result !== 'object' || Array.isArray(result)) {
|
|
284
|
+
return {};
|
|
285
|
+
}
|
|
286
|
+
return result;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Generates path parameters for an endpoint
|
|
290
|
+
*
|
|
291
|
+
* @param endpoint - Parsed endpoint
|
|
292
|
+
* @returns Path parameters object
|
|
293
|
+
* @internal
|
|
294
|
+
*/
|
|
295
|
+
function generatePathParams(endpoint) {
|
|
296
|
+
const params = {};
|
|
297
|
+
for (const param of endpoint.pathParams) {
|
|
298
|
+
if (param.schema && !('$ref' in param.schema)) {
|
|
299
|
+
const schema = param.schema;
|
|
300
|
+
if (schema.type === 'integer') {
|
|
301
|
+
params[param.name] = 1;
|
|
302
|
+
}
|
|
303
|
+
else if (schema.format === 'uuid') {
|
|
304
|
+
params[param.name] = faker.string.uuid();
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
params[param.name] = faker.string.alphanumeric(10);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
params[param.name] = faker.string.uuid();
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return params;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Gets expected success status code for endpoint
|
|
318
|
+
*
|
|
319
|
+
* @param endpoint - Parsed endpoint
|
|
320
|
+
* @returns Success status code or undefined
|
|
321
|
+
* @internal
|
|
322
|
+
*/
|
|
323
|
+
function getSuccessStatusCode(endpoint) {
|
|
324
|
+
const codes = Object.keys(endpoint.responses).map(Number);
|
|
325
|
+
return codes.find(code => code >= 200 && code < 300);
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=edge-case-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-case-generator.js","sourceRoot":"","sources":["../../src/generators/edge-case-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boundary Value Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes OpenAPI schema properties to identify boundary values for testing.
|
|
5
|
+
* Implements Boundary Value Analysis (BVA) technique.
|
|
6
|
+
*
|
|
7
|
+
* @module generators/edge-cases/boundary-analyzer
|
|
8
|
+
*/
|
|
9
|
+
import type { OpenAPIV3 } from 'openapi-types';
|
|
10
|
+
import type { BoundaryValue } from '../../types/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Options for boundary analysis
|
|
13
|
+
*/
|
|
14
|
+
export interface BoundaryAnalysisOptions {
|
|
15
|
+
realData?: Record<string, unknown>;
|
|
16
|
+
useExamples?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Analyzes a schema property to identify boundary values
|
|
20
|
+
*
|
|
21
|
+
* @param schema - Property schema
|
|
22
|
+
* @param options - Analysis options
|
|
23
|
+
* @returns Array of boundary values to test
|
|
24
|
+
*/
|
|
25
|
+
export declare function analyzeBoundaries(schema: OpenAPIV3.SchemaObject, options?: BoundaryAnalysisOptions): BoundaryValue[];
|
|
26
|
+
//# sourceMappingURL=boundary-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boundary-analyzer.d.ts","sourceRoot":"","sources":["../../../src/generators/edge-cases/boundary-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,CAAC,YAAY,EAC9B,OAAO,GAAE,uBAA4B,GACpC,aAAa,EAAE,CAiFjB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boundary Value Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes OpenAPI schema properties to identify boundary values for testing.
|
|
5
|
+
* Implements Boundary Value Analysis (BVA) technique.
|
|
6
|
+
*
|
|
7
|
+
* @module generators/edge-cases/boundary-analyzer
|
|
8
|
+
*/
|
|
9
|
+
import { generateDataFromSchemaSync } from '../data-generator.js';
|
|
10
|
+
/**
|
|
11
|
+
* Analyzes a schema property to identify boundary values
|
|
12
|
+
*
|
|
13
|
+
* @param schema - Property schema
|
|
14
|
+
* @param options - Analysis options
|
|
15
|
+
* @returns Array of boundary values to test
|
|
16
|
+
*/
|
|
17
|
+
export function analyzeBoundaries(schema, options = {}) {
|
|
18
|
+
const boundaries = [];
|
|
19
|
+
switch (schema.type) {
|
|
20
|
+
case 'string':
|
|
21
|
+
if (schema.minLength !== undefined) {
|
|
22
|
+
boundaries.push({
|
|
23
|
+
type: 'valid',
|
|
24
|
+
value: 'x'.repeat(schema.minLength),
|
|
25
|
+
description: `minLength (${schema.minLength} chars)`,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
if (schema.maxLength !== undefined) {
|
|
29
|
+
boundaries.push({
|
|
30
|
+
type: 'valid',
|
|
31
|
+
value: 'x'.repeat(schema.maxLength),
|
|
32
|
+
description: `maxLength (${schema.maxLength} chars)`,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
break;
|
|
36
|
+
case 'integer':
|
|
37
|
+
case 'number':
|
|
38
|
+
if (schema.minimum !== undefined) {
|
|
39
|
+
boundaries.push({
|
|
40
|
+
type: 'valid',
|
|
41
|
+
value: schema.exclusiveMinimum ? schema.minimum + 1 : schema.minimum,
|
|
42
|
+
description: `minimum (${schema.minimum})`,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
if (schema.maximum !== undefined) {
|
|
46
|
+
boundaries.push({
|
|
47
|
+
type: 'valid',
|
|
48
|
+
value: schema.exclusiveMaximum ? schema.maximum - 1 : schema.maximum,
|
|
49
|
+
description: `maximum (${schema.maximum})`,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (schema.minimum === undefined && schema.maximum === undefined) {
|
|
53
|
+
boundaries.push({
|
|
54
|
+
type: 'valid',
|
|
55
|
+
value: 0,
|
|
56
|
+
description: 'zero',
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
break;
|
|
60
|
+
case 'array':
|
|
61
|
+
if ('items' in schema && schema.items) {
|
|
62
|
+
if (schema.minItems !== undefined) {
|
|
63
|
+
const items = [];
|
|
64
|
+
for (let i = 0; i < schema.minItems; i++) {
|
|
65
|
+
items.push(generateDataFromSchemaSync(schema.items, {
|
|
66
|
+
realData: options.realData,
|
|
67
|
+
useExamples: options.useExamples
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
boundaries.push({
|
|
71
|
+
type: 'valid',
|
|
72
|
+
value: items,
|
|
73
|
+
description: `minItems (${schema.minItems})`,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
if (schema.maxItems !== undefined) {
|
|
77
|
+
const items = [];
|
|
78
|
+
for (let i = 0; i < schema.maxItems; i++) {
|
|
79
|
+
items.push(generateDataFromSchemaSync(schema.items, {
|
|
80
|
+
realData: options.realData,
|
|
81
|
+
useExamples: options.useExamples
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
boundaries.push({
|
|
85
|
+
type: 'valid',
|
|
86
|
+
value: items,
|
|
87
|
+
description: `maxItems (${schema.maxItems})`,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
return boundaries;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=boundary-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boundary-analyzer.js","sourceRoot":"","sources":["../../../src/generators/edge-cases/boundary-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Case Test Generator - Facade
|
|
3
|
+
*
|
|
4
|
+
* Re-exports all error case generation functionality from the modular errors/ directory.
|
|
5
|
+
* Maintained for backward compatibility.
|
|
6
|
+
*
|
|
7
|
+
* @module generators/error-case-generator
|
|
8
|
+
* @see generators/errors/index.ts for the implementation
|
|
9
|
+
*/
|
|
10
|
+
export { generateErrorCaseTests, type ErrorCaseOptions, type ErrorStrategy, BaseErrorStrategy, UnauthorizedErrorStrategy, ForbiddenErrorStrategy, HeuristicAuthErrorStrategy, BadRequestErrorStrategy, NotFoundErrorStrategy, ConflictErrorStrategy, UnprocessableEntityErrorStrategy, GenericErrorStrategy, ErrorStrategyFactory, } from './errors/index.js';
|
|
11
|
+
//# sourceMappingURL=error-case-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-case-generator.d.ts","sourceRoot":"","sources":["../../src/generators/error-case-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,gCAAgC,EAChC,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Case Test Generator - Facade
|
|
3
|
+
*
|
|
4
|
+
* Re-exports all error case generation functionality from the modular errors/ directory.
|
|
5
|
+
* Maintained for backward compatibility.
|
|
6
|
+
*
|
|
7
|
+
* @module generators/error-case-generator
|
|
8
|
+
* @see generators/errors/index.ts for the implementation
|
|
9
|
+
*/
|
|
10
|
+
export { generateErrorCaseTests, BaseErrorStrategy, UnauthorizedErrorStrategy, ForbiddenErrorStrategy, HeuristicAuthErrorStrategy, BadRequestErrorStrategy, NotFoundErrorStrategy, ConflictErrorStrategy, UnprocessableEntityErrorStrategy, GenericErrorStrategy, ErrorStrategyFactory, } from './errors/index.js';
|
|
11
|
+
//# sourceMappingURL=error-case-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-case-generator.js","sourceRoot":"","sources":["../../src/generators/error-case-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,sBAAsB,EAGtB,iBAAiB,EACjB,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,gCAAgC,EAChC,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Error Strategies - 401 and 403 scenarios
|
|
3
|
+
*
|
|
4
|
+
* @module generators/errors/auth-error-strategy
|
|
5
|
+
*/
|
|
6
|
+
import type { OpenAPIV3 } from 'openapi-types';
|
|
7
|
+
import type { TestCase, ParsedEndpoint } from '../../types/index.js';
|
|
8
|
+
import { BaseErrorStrategy, type ErrorCaseOptions } from './error-strategy.js';
|
|
9
|
+
/**
|
|
10
|
+
* Strategy for 401 Unauthorized tests
|
|
11
|
+
* Generates: no-auth and invalid-token scenarios
|
|
12
|
+
*/
|
|
13
|
+
export declare class UnauthorizedErrorStrategy extends BaseErrorStrategy {
|
|
14
|
+
readonly statusCodes: number[];
|
|
15
|
+
isApplicable(endpoint: ParsedEndpoint, spec: OpenAPIV3.Document): boolean;
|
|
16
|
+
generate(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document, options: ErrorCaseOptions): TestCase[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Strategy for 403 Forbidden tests
|
|
20
|
+
* Generates: valid auth but insufficient permissions
|
|
21
|
+
*/
|
|
22
|
+
export declare class ForbiddenErrorStrategy extends BaseErrorStrategy {
|
|
23
|
+
readonly statusCodes: number[];
|
|
24
|
+
isApplicable(_endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document): boolean;
|
|
25
|
+
generate(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document, options: ErrorCaseOptions): TestCase[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Strategy for heuristic 401 tests (when spec doesn't define 401 explicitly)
|
|
29
|
+
* Used in the heuristic fallback path
|
|
30
|
+
*/
|
|
31
|
+
export declare class HeuristicAuthErrorStrategy extends BaseErrorStrategy {
|
|
32
|
+
readonly statusCodes: number[];
|
|
33
|
+
isApplicable(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document): boolean;
|
|
34
|
+
generate(endpoint: ParsedEndpoint, spec: OpenAPIV3.Document, options: ErrorCaseOptions): TestCase[];
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=auth-error-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-error-strategy.d.ts","sourceRoot":"","sources":["../../../src/generators/errors/auth-error-strategy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE/E;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,iBAAiB;IAC9D,QAAQ,CAAC,WAAW,WAAS;IAE7B,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO;IAIzE,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,EAAE;CAsCrG;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,iBAAiB;IAC3D,QAAQ,CAAC,WAAW,WAAS;IAE7B,YAAY,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO;IAI3E,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,EAAE;CAoBrG;AAED;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,iBAAiB;IAC/D,QAAQ,CAAC,WAAW,WAAS;IAE7B,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO;IAI1E,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,EAAE;CA2BpG"}
|