@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
package/.env.example
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# OpenAPI Contract Tester - Environment Variables Configuration
|
|
2
|
+
# Copy this file to .env and customize as needed
|
|
3
|
+
|
|
4
|
+
# ============================================
|
|
5
|
+
# Directorios y Logging
|
|
6
|
+
# ============================================
|
|
7
|
+
|
|
8
|
+
# Directorio raíz para todos los archivos MCP
|
|
9
|
+
# Default: ~/.openapi-contract-tester
|
|
10
|
+
MCP_ROOT=~/.openapi-contract-tester
|
|
11
|
+
|
|
12
|
+
# Nivel de logging: debug, info, warn, error
|
|
13
|
+
# Default: info
|
|
14
|
+
LOG_LEVEL=info
|
|
15
|
+
|
|
16
|
+
# Override del directorio de logs (opcional)
|
|
17
|
+
# Si no se especifica, usa MCP_ROOT/logs
|
|
18
|
+
# LOG_DIR=/custom/path/logs
|
|
19
|
+
|
|
20
|
+
# Tamaño máximo del archivo de log antes de rotación (bytes)
|
|
21
|
+
# Default: 10485760 (10MB)
|
|
22
|
+
MAX_LOG_FILE_SIZE=10485760
|
|
23
|
+
|
|
24
|
+
# Número de archivos de log rotados a mantener
|
|
25
|
+
# Default: 5
|
|
26
|
+
MAX_LOG_FILES=5
|
|
27
|
+
|
|
28
|
+
# ============================================
|
|
29
|
+
# HTTP Client y Performance
|
|
30
|
+
# ============================================
|
|
31
|
+
|
|
32
|
+
# Timeout para requests HTTP en milisegundos
|
|
33
|
+
# Default: 5000 (5 segundos)
|
|
34
|
+
HTTP_TIMEOUT=5000
|
|
35
|
+
|
|
36
|
+
# Máximo número de requests HTTP en paralelo
|
|
37
|
+
# Default: 5
|
|
38
|
+
MAX_PARALLEL_REQUESTS=5
|
|
39
|
+
|
|
40
|
+
# Máximo número de tests a ejecutar en paralelo
|
|
41
|
+
# Default: 5
|
|
42
|
+
MAX_PARALLEL_TESTS=5
|
|
43
|
+
|
|
44
|
+
# Timeout para ejecución de tests en milisegundos
|
|
45
|
+
# Default: 30000 (30 segundos)
|
|
46
|
+
TEST_TIMEOUT=30000
|
|
47
|
+
|
|
48
|
+
# ============================================
|
|
49
|
+
# Retry Logic (Exponential Backoff)
|
|
50
|
+
# ============================================
|
|
51
|
+
|
|
52
|
+
# Número máximo de reintentos para operaciones fallidas
|
|
53
|
+
# Default: 3
|
|
54
|
+
RETRY_MAX_ATTEMPTS=3
|
|
55
|
+
|
|
56
|
+
# Delay inicial antes del primer reintento en milisegundos
|
|
57
|
+
# Default: 1000 (1 segundo)
|
|
58
|
+
RETRY_INITIAL_DELAY=1000
|
|
59
|
+
|
|
60
|
+
# Delay máximo entre reintentos en milisegundos
|
|
61
|
+
# Default: 10000 (10 segundos)
|
|
62
|
+
RETRY_MAX_DELAY=10000
|
|
63
|
+
|
|
64
|
+
# Multiplicador para exponential backoff
|
|
65
|
+
# Delays: initial, initial*multiplier, initial*multiplier^2, ...
|
|
66
|
+
# Default: 2
|
|
67
|
+
RETRY_BACKOFF_MULTIPLIER=2
|
|
68
|
+
|
|
69
|
+
# ============================================
|
|
70
|
+
# Circuit Breaker Pattern
|
|
71
|
+
# ============================================
|
|
72
|
+
|
|
73
|
+
# Número de failures consecutivos antes de abrir el circuito
|
|
74
|
+
# Default: 5
|
|
75
|
+
CIRCUIT_BREAKER_THRESHOLD=5
|
|
76
|
+
|
|
77
|
+
# Tiempo en milisegundos antes de intentar recovery (HALF_OPEN)
|
|
78
|
+
# Default: 60000 (1 minuto)
|
|
79
|
+
CIRCUIT_BREAKER_TIMEOUT=60000
|
|
80
|
+
|
|
81
|
+
# Número de éxitos necesarios en HALF_OPEN para cerrar el circuito
|
|
82
|
+
# Default: 2
|
|
83
|
+
CIRCUIT_BREAKER_SUCCESS_THRESHOLD=2
|
|
84
|
+
|
|
85
|
+
# ============================================
|
|
86
|
+
# MCP Mode (auto-detectado, raramente necesario)
|
|
87
|
+
# ============================================
|
|
88
|
+
|
|
89
|
+
# Forzar modo MCP (file logging vs console)
|
|
90
|
+
# Auto-detectado desde STDIO, solo para debugging
|
|
91
|
+
# MCP_MODE=true
|
package/README.md
ADDED
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
# OpenAPI Contract Tester - MCP Server
|
|
2
|
+
|
|
3
|
+
✅ **Status**: COMPLETE MVP - Fases 1-18 Implementadas
|
|
4
|
+
|
|
5
|
+
Servidor MCP (Model Context Protocol) para testing comprehensivo de APIs basado en especificaciones OpenAPI 3.x con soporte para contract testing usando Pact.
|
|
6
|
+
|
|
7
|
+
## 🎯 Características
|
|
8
|
+
|
|
9
|
+
### Generación de Tests
|
|
10
|
+
- ✅ **Happy Path Tests**: Tests con datos válidos para casos exitosos
|
|
11
|
+
- ✅ **Edge Case Tests**: Boundary Value Analysis (valores límite, enums, campos opcionales)
|
|
12
|
+
- ✅ **Error Case Tests**: Tests de errores 400/401/404 (campos faltantes, formatos inválidos, constraints)
|
|
13
|
+
|
|
14
|
+
### Ejecución de Tests
|
|
15
|
+
- ✅ **HTTP Client con Playwright**: Cliente robusto con soporte para todos los métodos HTTP
|
|
16
|
+
- ✅ **Ejecución Paralela**: Ejecuta múltiples tests en paralelo
|
|
17
|
+
- ✅ **Validación de Schemas**: Valida responses contra schemas OpenAPI usando ajv
|
|
18
|
+
- ✅ **Soporte de Autenticación**: Bearer, API Key, Basic, OAuth2
|
|
19
|
+
|
|
20
|
+
### Contract Testing
|
|
21
|
+
- ✅ **Generación de Contratos Pact**: Convierte OpenAPI a contratos Pact
|
|
22
|
+
- ✅ **Pact Matchers**: Matching flexible basado en tipos
|
|
23
|
+
- ✅ **Verificación de Provider**: Verifica que el provider implementa el contrato
|
|
24
|
+
- ✅ **Pact Broker**: Publicación y descarga de contratos
|
|
25
|
+
|
|
26
|
+
### Error Handling & Resilience
|
|
27
|
+
- ✅ **Custom Error Classes**: Errores semánticos con códigos (E001-E999) y mensajes user-friendly
|
|
28
|
+
- ✅ **Retry Logic**: Exponential backoff para errores transitorios (timeout, network)
|
|
29
|
+
- ✅ **Circuit Breaker**: Previene cascading failures con estados CLOSED/OPEN/HALF_OPEN
|
|
30
|
+
- ✅ **Error Wrapping**: Conversión automática de errores nativos a errores custom
|
|
31
|
+
- ✅ **Structured Logging**: Sistema de logs compatible con STDIO que escribe a archivo en modo MCP
|
|
32
|
+
|
|
33
|
+
### MCP Tools (4 herramientas principales)
|
|
34
|
+
|
|
35
|
+
1. **generate-tests**: Genera tests inteligentes desde especificaciones OpenAPI
|
|
36
|
+
- Happy path, edge cases, error cases
|
|
37
|
+
- Auto-detección de dependencias entre tests
|
|
38
|
+
- Generación de datos con IA contextual
|
|
39
|
+
|
|
40
|
+
2. **run-tests**: Ejecuta tests contra APIs con análisis avanzado
|
|
41
|
+
- Ejecución paralela con control de dependencias
|
|
42
|
+
- Auto-detección de tokens (24 campos conocidos)
|
|
43
|
+
- Validación de schemas automática
|
|
44
|
+
- AI-powered failure analysis
|
|
45
|
+
|
|
46
|
+
3. **export-results**: Exporta resultados con análisis profundo
|
|
47
|
+
- Formatos: JSON, HTML profesional, Markdown
|
|
48
|
+
- **Auto-comparación**: Si detecta specPath + codeEndpoints, ejecuta compare-sources automáticamente
|
|
49
|
+
- **Root Cause Analysis**: Correlaciona fallos con discrepancias conocidas
|
|
50
|
+
- Coverage analysis integrado
|
|
51
|
+
- AI-powered insights y recomendaciones
|
|
52
|
+
|
|
53
|
+
4. **compare-sources**: Compara OpenAPI spec vs Código vs PRD
|
|
54
|
+
- **Priorización inteligente**: Critical/High/Medium/Low según keywords
|
|
55
|
+
- **Reporte HTML visual**: Matriz de endpoints, discrepancias color-coded
|
|
56
|
+
- **Detección semántica IA**: Encuentra matches no obvios (POST /users ≈ POST /register)
|
|
57
|
+
- Business rule mappings (PRD → código)
|
|
58
|
+
- Sugerencias de remediación accionables
|
|
59
|
+
|
|
60
|
+
### 📊 Reportes Profesionales
|
|
61
|
+
- **HTML**: Diseño moderno con gradientes, cards interactivos, tablas responsivas y progress bars
|
|
62
|
+
- **Markdown**: Tablas con emojis, executive summary, métricas de performance y detalles de fallos
|
|
63
|
+
- **Contenido**: Summary dashboard, breakdown por categoría/endpoint, failed tests con errores detallados
|
|
64
|
+
|
|
65
|
+
## 📦 Instalación
|
|
66
|
+
|
|
67
|
+
### Instalación para Desarrollo
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npm install
|
|
71
|
+
npm run build
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Instalación desde npm (Cuando esté publicado)
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
npm install -g openapi-contract-tester
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 🧪 Testing Local (Pre-Publicación)
|
|
81
|
+
|
|
82
|
+
Para probar el paquete como si estuviera instalado desde npm:
|
|
83
|
+
|
|
84
|
+
#### Opción 1: npm link (desarrollo activo)
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
npm run build
|
|
88
|
+
npm link
|
|
89
|
+
|
|
90
|
+
# Ahora puedes usar el comando globalmente
|
|
91
|
+
which openapi-contract-tester
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Uso**: Ideal para desarrollo cuando haces cambios frecuentes. Los cambios se reflejan inmediatamente.
|
|
95
|
+
|
|
96
|
+
#### Opción 2: npm pack (testing de publicación)
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
npm run build
|
|
100
|
+
npm pack
|
|
101
|
+
# Crea: openapi-contract-tester-1.0.0.tgz
|
|
102
|
+
|
|
103
|
+
# Instalar globalmente desde el tarball
|
|
104
|
+
npm install -g ./openapi-contract-tester-1.0.0.tgz
|
|
105
|
+
|
|
106
|
+
# Verificar instalación
|
|
107
|
+
which openapi-contract-tester
|
|
108
|
+
# Output: /usr/local/lib/node_modules/openapi-contract-tester/dist/index.js
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Uso**: Prueba exacta de cómo funcionará cuando se publique en npm. Útil para validación final antes de `npm publish`.
|
|
112
|
+
|
|
113
|
+
**Configuración en cell-cli** (después de instalar con cualquier opción):
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"mcpServers": {
|
|
118
|
+
"openapi-contract-tester": {
|
|
119
|
+
"command": "openapi-contract-tester",
|
|
120
|
+
"env": {
|
|
121
|
+
"MCP_ROOT": "~/.openapi-contract-tester",
|
|
122
|
+
"LOG_LEVEL": "info"
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
> **Nota:** Por defecto usa `gemini-3-flash-preview`. Puedes cambiar el modelo con `AI_MODEL` en `env`.
|
|
129
|
+
|
|
130
|
+
**Limpiar instalación de prueba**:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# Si usaste npm link
|
|
134
|
+
npm unlink -g openapi-contract-tester
|
|
135
|
+
|
|
136
|
+
# Si usaste npm install -g
|
|
137
|
+
npm uninstall -g openapi-contract-tester
|
|
138
|
+
|
|
139
|
+
# Limpiar tarball
|
|
140
|
+
rm openapi-contract-tester-*.tgz
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## ⚙️ Configuración
|
|
144
|
+
|
|
145
|
+
### Variables de Entorno
|
|
146
|
+
|
|
147
|
+
Todas las configuraciones pueden ser controladas vía variables de entorno:
|
|
148
|
+
|
|
149
|
+
#### Directorios y Logging
|
|
150
|
+
```bash
|
|
151
|
+
MCP_ROOT=~/.openapi-contract-tester # Directorio raíz (default: ~/.openapi-contract-tester)
|
|
152
|
+
LOG_LEVEL=info # Nivel de log: debug, info, warn, error (default: info)
|
|
153
|
+
LOG_DIR=/custom/path/logs # Override del directorio de logs
|
|
154
|
+
MAX_LOG_FILE_SIZE=10485760 # Tamaño máximo antes de rotación en bytes (default: 10MB)
|
|
155
|
+
MAX_LOG_FILES=5 # Número de archivos rotados a mantener (default: 5)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
#### AI/LLM Configuration
|
|
159
|
+
```bash
|
|
160
|
+
# Opción 1: Solo cambiar el modelo (recomendado)
|
|
161
|
+
AI_MODEL=gemini-3-flash-preview # Nombre del modelo (default: gemini-3-flash-preview)
|
|
162
|
+
|
|
163
|
+
# Opción 2: Cambiar modelo a versión anterior
|
|
164
|
+
AI_MODEL=gemini-2.5-flash # Usa gemini-2.5-flash en lugar del default
|
|
165
|
+
|
|
166
|
+
# Opción 3: URL completa personalizada (override total)
|
|
167
|
+
AI_API_URL=https://custom-api.com/v1/generate
|
|
168
|
+
|
|
169
|
+
# Opción 4: Configuración avanzada
|
|
170
|
+
AI_BASE_URL=http://localhost:13800/cell_apps/v1.1/gemini/v1beta/models # Base URL (default)
|
|
171
|
+
AI_MODEL=gemini-3-flash-preview # Modelo específico
|
|
172
|
+
AI_ENDPOINT=generateContent # Endpoint de generación (default: generateContent)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Prioridad de configuración:**
|
|
176
|
+
1. `AI_API_URL` - URL completa (ignora otras variables)
|
|
177
|
+
2. `AI_MODEL` + `AI_BASE_URL` + `AI_ENDPOINT` - Construcción dinámica
|
|
178
|
+
3. Valores por defecto (`gemini-3-flash-preview`)
|
|
179
|
+
|
|
180
|
+
#### HTTP y Performance
|
|
181
|
+
```bash
|
|
182
|
+
HTTP_TIMEOUT=5000 # Timeout para requests HTTP en ms (default: 5000)
|
|
183
|
+
MAX_PARALLEL_REQUESTS=5 # Requests HTTP paralelos (default: 5)
|
|
184
|
+
MAX_PARALLEL_TESTS=5 # Tests paralelos (default: 5)
|
|
185
|
+
TEST_TIMEOUT=30000 # Timeout de test execution en ms (default: 30000)
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
#### Retry Logic
|
|
189
|
+
```bash
|
|
190
|
+
RETRY_MAX_ATTEMPTS=3 # Máximo de reintentos (default: 3)
|
|
191
|
+
RETRY_INITIAL_DELAY=1000 # Delay inicial en ms (default: 1000)
|
|
192
|
+
RETRY_MAX_DELAY=10000 # Delay máximo en ms (default: 10000)
|
|
193
|
+
RETRY_BACKOFF_MULTIPLIER=2 # Multiplicador para backoff (default: 2)
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
#### Circuit Breaker
|
|
197
|
+
```bash
|
|
198
|
+
CIRCUIT_BREAKER_THRESHOLD=5 # Failures antes de abrir (default: 5)
|
|
199
|
+
CIRCUIT_BREAKER_TIMEOUT=60000 # Tiempo antes de HALF_OPEN en ms (default: 60000)
|
|
200
|
+
CIRCUIT_BREAKER_SUCCESS_THRESHOLD=2 # Éxitos para cerrar en HALF_OPEN (default: 2)
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Estructura de Directorios
|
|
204
|
+
|
|
205
|
+
Cuando se configura `MCP_ROOT`, se crea la siguiente estructura:
|
|
206
|
+
|
|
207
|
+
```
|
|
208
|
+
~/.openapi-contract-tester/
|
|
209
|
+
└── logs/
|
|
210
|
+
├── mcp-server-2025-01-19.log
|
|
211
|
+
└── mcp-server-2025-01-19-2025-01-19T10-30-00-123Z.log (rotados)
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## 🚀 Uso
|
|
215
|
+
|
|
216
|
+
### Como MCP Server para cell-cli
|
|
217
|
+
|
|
218
|
+
1. Configura cell-cli para usar este servidor MCP:
|
|
219
|
+
|
|
220
|
+
```json
|
|
221
|
+
{
|
|
222
|
+
"mcpServers": {
|
|
223
|
+
"openapi-contract-tester": {
|
|
224
|
+
"command": "node",
|
|
225
|
+
"args": ["/ruta/absoluta/a/mcp_testing/dist/index.js"],
|
|
226
|
+
"env": {
|
|
227
|
+
"MCP_ROOT": "~/.openapi-contract-tester",
|
|
228
|
+
"LOG_LEVEL": "info",
|
|
229
|
+
"AI_MODEL": "gemini-3-flash-preview",
|
|
230
|
+
"HTTP_TIMEOUT": "10000",
|
|
231
|
+
"MAX_PARALLEL_TESTS": "10",
|
|
232
|
+
"RETRY_MAX_ATTEMPTS": "3",
|
|
233
|
+
"CIRCUIT_BREAKER_THRESHOLD": "5"
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
**Configuración Mínima:**
|
|
241
|
+
```json
|
|
242
|
+
{
|
|
243
|
+
"mcpServers": {
|
|
244
|
+
"openapi-contract-tester": {
|
|
245
|
+
"command": "node",
|
|
246
|
+
"args": ["/ruta/absoluta/a/mcp_testing/dist/index.js"],
|
|
247
|
+
"env": {
|
|
248
|
+
"MCP_ROOT": "~/.openapi-contract-tester",
|
|
249
|
+
"LOG_LEVEL": "info"
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
```
|
|
255
|
+
> **Nota:** Si no especificas `AI_MODEL`, usa `gemini-3-flash-preview` por defecto.
|
|
256
|
+
|
|
257
|
+
2. Usa los tools desde cell-cli:
|
|
258
|
+
|
|
259
|
+
```
|
|
260
|
+
> Genera tests para mi API usando el archivo ./api.yml
|
|
261
|
+
> Ejecuta los tests contra http://localhost:8080
|
|
262
|
+
> Crea un contrato Pact entre mi-app y user-api
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Uso Directo (sin cell-cli)
|
|
266
|
+
|
|
267
|
+
#### 1. Generar Tests
|
|
268
|
+
|
|
269
|
+
```typescript
|
|
270
|
+
import { parseOpenAPISpec, extractEndpoints } from './dist/parsers/openapi-parser.js';
|
|
271
|
+
import { generateHappyPathTests } from './dist/generators/happy-path-generator.js';
|
|
272
|
+
import { generateEdgeCaseTests } from './dist/generators/edge-case-generator.js';
|
|
273
|
+
import { generateErrorCaseTests } from './dist/generators/error-case-generator.js';
|
|
274
|
+
|
|
275
|
+
// Parsear especificación
|
|
276
|
+
const spec = await parseOpenAPISpec('./api.yml');
|
|
277
|
+
const endpoints = extractEndpoints(spec);
|
|
278
|
+
|
|
279
|
+
// Generar tests
|
|
280
|
+
const happyTests = generateHappyPathTests(endpoints, { seed: 42 });
|
|
281
|
+
const edgeTests = generateEdgeCaseTests(endpoints, { seed: 42 });
|
|
282
|
+
const errorTests = generateErrorCaseTests(endpoints, spec, { seed: 42 });
|
|
283
|
+
|
|
284
|
+
console.log(`Generated ${happyTests.length + edgeTests.length + errorTests.length} tests`);
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
#### 2. Ejecutar Tests
|
|
288
|
+
|
|
289
|
+
```typescript
|
|
290
|
+
import { TestRunner } from './dist/executor/test-runner.js';
|
|
291
|
+
|
|
292
|
+
const environment = {
|
|
293
|
+
name: 'local',
|
|
294
|
+
baseUrl: 'http://localhost:8080',
|
|
295
|
+
timeout: 5000,
|
|
296
|
+
auth: {
|
|
297
|
+
type: 'bearer',
|
|
298
|
+
token: 'your-token-here'
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
const runner = new TestRunner(environment);
|
|
303
|
+
const { results, summary } = await runner.runTests(allTests, endpoints, {
|
|
304
|
+
parallel: 5,
|
|
305
|
+
validateSchemas: true,
|
|
306
|
+
onProgress: (completed, total, current) => {
|
|
307
|
+
console.log(`Progress: ${completed}/${total} - ${current.name}`);
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
console.log(`Passed: ${summary.passed}/${summary.total}`);
|
|
312
|
+
console.log(`Failed: ${summary.failed}/${summary.total}`);
|
|
313
|
+
console.log(`Avg Response Time: ${summary.avgResponseTime}ms`);
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
#### 3. Contract Testing con Pact
|
|
317
|
+
|
|
318
|
+
```typescript
|
|
319
|
+
import { generatePactContract, pactContractToJSON } from './dist/pact/pact-generator.js';
|
|
320
|
+
import { verifyPactProvider } from './dist/pact/pact-executor.js';
|
|
321
|
+
import fs from 'fs/promises';
|
|
322
|
+
|
|
323
|
+
// Generar contrato
|
|
324
|
+
const contract = generatePactContract(endpoints, {
|
|
325
|
+
consumer: 'my-app',
|
|
326
|
+
provider: 'user-api',
|
|
327
|
+
useMatchers: true
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
// Guardar contrato
|
|
331
|
+
await fs.writeFile(
|
|
332
|
+
'./pacts/my-app-user-api.json',
|
|
333
|
+
pactContractToJSON(contract, true)
|
|
334
|
+
);
|
|
335
|
+
|
|
336
|
+
// Verificar provider
|
|
337
|
+
const result = await verifyPactProvider({
|
|
338
|
+
provider: 'user-api',
|
|
339
|
+
providerBaseUrl: 'http://localhost:8080',
|
|
340
|
+
pactUrls: ['./pacts/my-app-user-api.json']
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
console.log(`Verification: ${result.success ? 'PASSED' : 'FAILED'}`);
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
## 📊 Ejemplo de Salida
|
|
347
|
+
|
|
348
|
+
### Generación de Tests
|
|
349
|
+
Desde una API de 5 endpoints + 3 archivos de documentación:
|
|
350
|
+
```
|
|
351
|
+
✅ Happy Path Tests: 4
|
|
352
|
+
✅ Edge Case Tests: 24
|
|
353
|
+
✅ Error Case Tests: 34
|
|
354
|
+
✅ Business Rules Tests: 48 (desde docs/)
|
|
355
|
+
📈 Total: 110 tests
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### Ejecución de Tests
|
|
359
|
+
```
|
|
360
|
+
Summary:
|
|
361
|
+
Total: 62
|
|
362
|
+
Passed: 58 (93.55%)
|
|
363
|
+
Failed: 4 (6.45%)
|
|
364
|
+
Duration: 2,345ms
|
|
365
|
+
Avg Response Time: 156ms
|
|
366
|
+
|
|
367
|
+
By Category:
|
|
368
|
+
happy-path: 4 passed, 0 failed
|
|
369
|
+
edge-case: 22 passed, 2 failed
|
|
370
|
+
error-case: 32 passed, 2 failed
|
|
371
|
+
|
|
372
|
+
By Endpoint:
|
|
373
|
+
GET /users: 7 tests (7 passed)
|
|
374
|
+
POST /users: 28 tests (26 passed, 2 failed)
|
|
375
|
+
GET /users/{id}: 4 tests (4 passed)
|
|
376
|
+
PUT /users/{id}: 24 tests (22 passed, 2 failed)
|
|
377
|
+
DELETE /users/{id}: 3 tests (3 passed)
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
## 📁 Estructura del Proyecto
|
|
381
|
+
|
|
382
|
+
```
|
|
383
|
+
mcp_testing/
|
|
384
|
+
├── src/
|
|
385
|
+
│ ├── types/
|
|
386
|
+
│ │ └── index.ts (800+ líneas de tipos con JSDoc)
|
|
387
|
+
│ ├── parsers/
|
|
388
|
+
│ │ └── openapi-parser.ts (400+ líneas)
|
|
389
|
+
│ ├── generators/
|
|
390
|
+
│ │ ├── data-generator.ts (500+ líneas)
|
|
391
|
+
│ │ ├── happy-path-generator.ts (300+ líneas)
|
|
392
|
+
│ │ ├── edge-case-generator.ts (450+ líneas)
|
|
393
|
+
│ │ └── error-case-generator.ts (450+ líneas)
|
|
394
|
+
│ ├── validators/
|
|
395
|
+
│ │ ├── schema-validator.ts (400+ líneas)
|
|
396
|
+
│ │ └── openapi-validator.ts (400+ líneas)
|
|
397
|
+
│ ├── executor/
|
|
398
|
+
│ │ ├── http-client.ts (400+ líneas)
|
|
399
|
+
│ │ └── test-runner.ts (500+ líneas)
|
|
400
|
+
│ ├── pact/
|
|
401
|
+
│ │ ├── pact-generator.ts (450+ líneas)
|
|
402
|
+
│ │ └── pact-executor.ts (500+ líneas)
|
|
403
|
+
│ ├── utils/
|
|
404
|
+
│ │ ├── logger.ts (400+ líneas)
|
|
405
|
+
│ │ ├── errors.ts (450+ líneas)
|
|
406
|
+
│ │ └── resilience.ts (350+ líneas)
|
|
407
|
+
│ ├── mcp/
|
|
408
|
+
│ │ └── server.ts (650+ líneas)
|
|
409
|
+
│ └── index.ts (Entry point)
|
|
410
|
+
├── examples/
|
|
411
|
+
│ └── user-service.yml
|
|
412
|
+
├── LOGGING.md (Logging documentation)
|
|
413
|
+
├── ERROR-HANDLING.md (Error handling documentation)
|
|
414
|
+
├── package.json
|
|
415
|
+
├── tsconfig.json
|
|
416
|
+
└── README.md
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
**Total: ~7,700+ líneas de código TypeScript con 100% JSDoc**
|
|
420
|
+
|
|
421
|
+
## 🧪 Testing
|
|
422
|
+
|
|
423
|
+
```bash
|
|
424
|
+
# Ejecutar tests de validación
|
|
425
|
+
node quick-test.js
|
|
426
|
+
node test-all-generators.js
|
|
427
|
+
node test-schema-validator.js
|
|
428
|
+
node test-openapi-validator.js
|
|
429
|
+
node test-business-rules.js
|
|
430
|
+
node test-logger.js
|
|
431
|
+
node test-error-handling.js
|
|
432
|
+
node test-config.js
|
|
433
|
+
|
|
434
|
+
# Test con variables de entorno personalizadas
|
|
435
|
+
HTTP_TIMEOUT=10000 MAX_PARALLEL_TESTS=10 LOG_LEVEL=debug node test-config.js
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
## 🔧 Tecnologías
|
|
439
|
+
|
|
440
|
+
- **TypeScript**: Strict mode con tipos completos
|
|
441
|
+
- **Playwright**: HTTP client robusto
|
|
442
|
+
- **Pact**: Contract testing consumer-driven
|
|
443
|
+
- **ajv**: Validación de JSON Schemas
|
|
444
|
+
- **Faker.js**: Generación de datos realistas
|
|
445
|
+
- **MCP SDK**: Integración con CLI conversacional con MCP
|
|
446
|
+
- **Node.js 18+**: ES Modules, async/await
|
|
447
|
+
|
|
448
|
+
## 📖 Mejores Prácticas Aplicadas
|
|
449
|
+
|
|
450
|
+
- ✅ TypeScript strict mode
|
|
451
|
+
- ✅ 100% JSDoc coverage
|
|
452
|
+
- ✅ ESLint + Prettier
|
|
453
|
+
- ✅ Node.js 2025 best practices
|
|
454
|
+
- ✅ Error handling comprehensivo con retry & circuit breaker
|
|
455
|
+
- ✅ Async/await patterns
|
|
456
|
+
- ✅ ES Modules (type: "module")
|
|
457
|
+
- ✅ Reproducible test generation (seeds)
|
|
458
|
+
- ✅ STDIO-safe logging para protocolo MCP
|
|
459
|
+
- ✅ Structured error codes (E001-E999)
|
|
460
|
+
|
|
461
|
+
## 📚 Documentación
|
|
462
|
+
|
|
463
|
+
- [LOGGING.md](LOGGING.md) - Sistema de logging compatible con MCP
|
|
464
|
+
- [ERROR-HANDLING.md](ERROR-HANDLING.md) - Error handling, retry logic y circuit breaker
|
|
465
|
+
|
|
466
|
+
## 📝 Licencia
|
|
467
|
+
|
|
468
|
+
MIT
|
|
469
|
+
|
|
470
|
+
---
|
|
471
|
+
|
|
472
|
+
Servidor MCP completo para testing de APIs con OpenAPI 3.x, Playwright, y Pact.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assertion Generator - Smart business logic assertions
|
|
3
|
+
*
|
|
4
|
+
* Generates intelligent assertions beyond schema validation.
|
|
5
|
+
* Validates business rules like date consistency, logical constraints, state transitions.
|
|
6
|
+
*
|
|
7
|
+
* @module ai-engine/assertion-generator
|
|
8
|
+
*/
|
|
9
|
+
import type { OpenAPIV3 } from 'openapi-types';
|
|
10
|
+
import type { AIConfig } from '../types/ai-config.js';
|
|
11
|
+
import type { APIContext } from '../analyzers/context-analyzer.js';
|
|
12
|
+
/**
|
|
13
|
+
* Assertion definition
|
|
14
|
+
*/
|
|
15
|
+
export interface Assertion {
|
|
16
|
+
/** Assertion description */
|
|
17
|
+
description: string;
|
|
18
|
+
/** JSONPath to value */
|
|
19
|
+
path: string;
|
|
20
|
+
/** Assertion type */
|
|
21
|
+
type: 'equals' | 'notEquals' | 'greaterThan' | 'lessThan' | 'contains' | 'matches' | 'custom';
|
|
22
|
+
/** Expected value or pattern */
|
|
23
|
+
expected?: any;
|
|
24
|
+
/** Custom JavaScript expression (for complex assertions) */
|
|
25
|
+
expression?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Generates smart assertions for a test
|
|
29
|
+
*
|
|
30
|
+
* @param method - HTTP method
|
|
31
|
+
* @param path - Endpoint path
|
|
32
|
+
* @param responseSchema - Response schema
|
|
33
|
+
* @param apiContext - API context
|
|
34
|
+
* @param aiConfig - AI configuration
|
|
35
|
+
* @returns Array of assertions
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* const assertions = await generateAssertions('GET', '/users/{id}', schema, context, config);
|
|
40
|
+
* // Returns:
|
|
41
|
+
* // [
|
|
42
|
+
* // { description: 'createdAt before updatedAt', path: 'createdAt', type: 'lessThan', expected: 'updatedAt' },
|
|
43
|
+
* // { description: 'email format valid', path: 'email', type: 'matches', expected: /^.+@.+$/ }
|
|
44
|
+
* // ]
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare function generateAssertions(method: string, path: string, responseSchema: OpenAPIV3.SchemaObject | undefined, apiContext: APIContext, aiConfig: AIConfig): Promise<Assertion[]>;
|
|
48
|
+
//# sourceMappingURL=assertion-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertion-generator.d.ts","sourceRoot":"","sources":["../../src/ai-engine/assertion-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAMnE;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC9F,gCAAgC;IAChC,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,SAAS,CAAC,YAAY,GAAG,SAAS,EAClD,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,SAAS,EAAE,CAAC,CAqBtB"}
|