@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,328 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Detail Renderers for HTML Report
|
|
3
|
+
*
|
|
4
|
+
* Renders per-test cards, category groupings, and expandable detail panels.
|
|
5
|
+
*
|
|
6
|
+
* @module reporters/report-test-details
|
|
7
|
+
*/
|
|
8
|
+
import { escapeHtml, formatErrorMessage } from './report-utils.js';
|
|
9
|
+
import { toGherkinScenario, renderGherkinScenarioHTML } from './gherkin-formatter.js';
|
|
10
|
+
const CATEGORY_NAMES = {
|
|
11
|
+
'happy-path': '✅ Happy Path',
|
|
12
|
+
'edge-case': '⚡ Edge Cases',
|
|
13
|
+
'error-case': '❌ Error Cases',
|
|
14
|
+
'business-rule': '📋 Reglas de Negocio',
|
|
15
|
+
'other': '📌 Otros',
|
|
16
|
+
};
|
|
17
|
+
const CATEGORY_ORDER = ['happy-path', 'edge-case', 'error-case', 'business-rule', 'other'];
|
|
18
|
+
const METHOD_COLORS = {
|
|
19
|
+
GET: 'bg-blue-500 text-white',
|
|
20
|
+
POST: 'bg-green-500 text-white',
|
|
21
|
+
PUT: 'bg-yellow-500 text-white',
|
|
22
|
+
PATCH: 'bg-orange-500 text-white',
|
|
23
|
+
DELETE: 'bg-red-500 text-white',
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Syntax highlights JSON with color-coded tokens
|
|
27
|
+
* @param obj - Object to highlight
|
|
28
|
+
* @returns HTML string with syntax-highlighted JSON
|
|
29
|
+
*/
|
|
30
|
+
function syntaxHighlightJson(obj) {
|
|
31
|
+
const json = JSON.stringify(obj, null, 2);
|
|
32
|
+
return `<pre class="json-highlight">${json
|
|
33
|
+
.replace(/&/g, '&')
|
|
34
|
+
.replace(/</g, '<')
|
|
35
|
+
.replace(/>/g, '>')
|
|
36
|
+
.replace(/"([^"]+)":/g, '<span class="json-key">"$1"</span>:')
|
|
37
|
+
.replace(/: "([^"]*)"/g, ': <span class="json-string">"$1"</span>')
|
|
38
|
+
.replace(/: (\d+)/g, ': <span class="json-number">$1</span>')
|
|
39
|
+
.replace(/: (true|false)/g, ': <span class="json-boolean">$1</span>')
|
|
40
|
+
.replace(/: null/g, ': <span class="json-null">null</span>')}</pre>`;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Renders JSON with auto-collapse for large bodies
|
|
44
|
+
* @param obj - Object to render
|
|
45
|
+
* @param id - Unique ID for collapse control
|
|
46
|
+
* @returns HTML string with collapsible JSON
|
|
47
|
+
*/
|
|
48
|
+
function renderCollapsibleJson(obj, id) {
|
|
49
|
+
const json = JSON.stringify(obj, null, 2);
|
|
50
|
+
const lines = json.split('\n');
|
|
51
|
+
const isLarge = lines.length > 15;
|
|
52
|
+
const uniqueId = `${id}-${Math.random().toString(36).substring(7)}`;
|
|
53
|
+
if (!isLarge) {
|
|
54
|
+
return `
|
|
55
|
+
<div class="code-block">
|
|
56
|
+
<div class="code-actions">
|
|
57
|
+
<button class="tab-btn active" onclick="switchTab(this, 'formatted')">Formateado</button>
|
|
58
|
+
<button class="tab-btn" onclick="switchTab(this, 'raw')">Raw</button>
|
|
59
|
+
<button class="copy-btn" onclick="copyToClipboard(this)">📋 Copiar</button>
|
|
60
|
+
</div>
|
|
61
|
+
<div class="tab-content formatted active">${syntaxHighlightJson(obj)}</div>
|
|
62
|
+
<div class="tab-content raw">${escapeHtml(json)}</div>
|
|
63
|
+
</div>
|
|
64
|
+
`;
|
|
65
|
+
}
|
|
66
|
+
const previewLines = lines.slice(0, 10);
|
|
67
|
+
const previewJson = previewLines.join('\n');
|
|
68
|
+
return `
|
|
69
|
+
<div class="code-block">
|
|
70
|
+
<div class="code-actions">
|
|
71
|
+
<button class="tab-btn active" onclick="switchTab(this, 'formatted')">Formateado</button>
|
|
72
|
+
<button class="tab-btn" onclick="switchTab(this, 'raw')">Raw</button>
|
|
73
|
+
<button class="toggle-collapse-btn" onclick="toggleCollapse('${uniqueId}')">
|
|
74
|
+
<span class="collapse-show">▼ Ver completo (${lines.length} líneas)</span>
|
|
75
|
+
<span class="collapse-hide" style="display:none;">▲ Ocultar</span>
|
|
76
|
+
</button>
|
|
77
|
+
<button class="copy-btn" onclick="copyToClipboard(this)">📋 Copiar</button>
|
|
78
|
+
</div>
|
|
79
|
+
<div id="${uniqueId}-preview" class="tab-content formatted active">
|
|
80
|
+
<pre class="json-highlight">${escapeHtml(previewJson)}</pre>
|
|
81
|
+
<div class="text-gray-500 italic mt-2 px-4">... ${lines.length - 10} líneas más (click "Ver completo" para expandir)</div>
|
|
82
|
+
</div>
|
|
83
|
+
<div id="${uniqueId}-full" class="tab-content formatted" style="display:none;">
|
|
84
|
+
${syntaxHighlightJson(obj)}
|
|
85
|
+
</div>
|
|
86
|
+
<div class="tab-content raw">${escapeHtml(json)}</div>
|
|
87
|
+
</div>
|
|
88
|
+
`;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Groups tests by category and renders each group with its items.
|
|
92
|
+
*
|
|
93
|
+
* @param tests - All test result items
|
|
94
|
+
* @param aiAnalysis - Optional AI analysis for error explanations
|
|
95
|
+
* @returns HTML string of all test categories
|
|
96
|
+
*/
|
|
97
|
+
export function generateDetailsByCategory(tests, aiAnalysis) {
|
|
98
|
+
const byCategory = {};
|
|
99
|
+
for (const test of tests) {
|
|
100
|
+
const category = test.category || 'other';
|
|
101
|
+
if (!byCategory[category]) {
|
|
102
|
+
byCategory[category] = [];
|
|
103
|
+
}
|
|
104
|
+
byCategory[category].push(test);
|
|
105
|
+
}
|
|
106
|
+
return Object.entries(byCategory)
|
|
107
|
+
.sort(([a], [b]) => CATEGORY_ORDER.indexOf(a) - CATEGORY_ORDER.indexOf(b))
|
|
108
|
+
.map(([category, categoryTests]) => `
|
|
109
|
+
<div class="category-section">
|
|
110
|
+
<h3 class="category-header">${CATEGORY_NAMES[category] || category}</h3>
|
|
111
|
+
<div class="space-y-4">
|
|
112
|
+
${categoryTests.map(test => generateTestItem(test, aiAnalysis?.errorExplanations)).join('')}
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
`).join('');
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Renders a collapsible test item card.
|
|
119
|
+
*
|
|
120
|
+
* @param test - The test result to render
|
|
121
|
+
* @param errorExplanations - Optional AI-generated error explanations keyed by error prefix
|
|
122
|
+
* @returns HTML string for a single test item
|
|
123
|
+
*/
|
|
124
|
+
export function generateTestItem(test, errorExplanations) {
|
|
125
|
+
const statusClass = test.status;
|
|
126
|
+
const statusIcon = test.status === 'passed' ? '✅' : test.status === 'failed' ? '❌' : '⚠️';
|
|
127
|
+
const method = (test.method || 'GET').toUpperCase();
|
|
128
|
+
const borderColor = test.status === 'passed' ? 'border-green-500' : test.status === 'failed' ? 'border-red-500' : 'border-yellow-500';
|
|
129
|
+
const bgColor = test.status === 'passed' ? 'bg-green-50' : test.status === 'failed' ? 'bg-red-50' : 'bg-yellow-50';
|
|
130
|
+
const methodColor = METHOD_COLORS[method] || 'bg-gray-500 text-white';
|
|
131
|
+
return `
|
|
132
|
+
<div class="border-2 ${borderColor} rounded-xl overflow-hidden transition-shadow duration-200 hover:shadow-lg test-item" data-status="${statusClass}">
|
|
133
|
+
<div class="p-5 ${bgColor} cursor-pointer flex flex-wrap items-center gap-3 test-header hover:bg-opacity-75 transition-colors" onclick="toggleTest(this)">
|
|
134
|
+
<span class="text-2xl">${statusIcon}</span>
|
|
135
|
+
<span class="px-3 py-1 ${methodColor} rounded-md font-bold text-sm">${method}</span>
|
|
136
|
+
<span class="flex-1 min-w-0">
|
|
137
|
+
<span class="font-semibold text-gray-800 text-base">${test.name}</span>
|
|
138
|
+
${test.id ? `<span class="text-sm text-gray-500 ml-2">(${test.id})</span>` : ''}
|
|
139
|
+
</span>
|
|
140
|
+
${test.duration ? `<span class="px-3 py-1 bg-yellow-100 text-yellow-800 rounded-md font-semibold text-sm whitespace-nowrap">⏱️ ${test.duration}ms</span>` : ''}
|
|
141
|
+
<span class="text-xl transform transition-transform duration-200 expand-icon">▼</span>
|
|
142
|
+
</div>
|
|
143
|
+
|
|
144
|
+
<div class="test-details hidden p-6 bg-white border-t-2 ${borderColor}">
|
|
145
|
+
${generateTestDetails(test, errorExplanations)}
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
`;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Renders the expanded detail panel for a test item.
|
|
152
|
+
*
|
|
153
|
+
* @param test - The test result to render details for
|
|
154
|
+
* @param errorExplanations - Optional AI-generated error explanations
|
|
155
|
+
* @returns HTML string for the detail panel
|
|
156
|
+
*/
|
|
157
|
+
export function generateTestDetails(test, errorExplanations) {
|
|
158
|
+
const uniqueId = `test-${test.id || Math.random().toString(36).substring(7)}`;
|
|
159
|
+
// Generate Gherkin scenario
|
|
160
|
+
const gherkinScenario = toGherkinScenario(test);
|
|
161
|
+
const gherkinHTML = renderGherkinScenarioHTML(gherkinScenario);
|
|
162
|
+
let html = '';
|
|
163
|
+
// View Toggle
|
|
164
|
+
html += `
|
|
165
|
+
<div class="view-toggle-container">
|
|
166
|
+
<div class="view-toggle-buttons">
|
|
167
|
+
<button class="view-toggle-btn active" onclick="switchView('${uniqueId}', 'gherkin')">
|
|
168
|
+
📋 Gherkin View
|
|
169
|
+
</button>
|
|
170
|
+
<button class="view-toggle-btn" onclick="switchView('${uniqueId}', 'technical')">
|
|
171
|
+
🔧 Technical View
|
|
172
|
+
</button>
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
175
|
+
`;
|
|
176
|
+
// Gherkin View (default visible)
|
|
177
|
+
html += `
|
|
178
|
+
<div id="${uniqueId}-gherkin" class="view-content view-gherkin">
|
|
179
|
+
${gherkinHTML}
|
|
180
|
+
</div>
|
|
181
|
+
`;
|
|
182
|
+
// Technical View (hidden by default)
|
|
183
|
+
html += `
|
|
184
|
+
<div id="${uniqueId}-technical" class="view-content view-technical" style="display:none;">
|
|
185
|
+
${generateTechnicalView(test, errorExplanations)}
|
|
186
|
+
</div>
|
|
187
|
+
`;
|
|
188
|
+
return html;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Generates the technical view (original detailed view)
|
|
192
|
+
*/
|
|
193
|
+
function generateTechnicalView(test, errorExplanations) {
|
|
194
|
+
let html = '';
|
|
195
|
+
// Basic Info
|
|
196
|
+
html += `
|
|
197
|
+
<div class="detail-section">
|
|
198
|
+
<h4>📋 Información del Test</h4>
|
|
199
|
+
<ul class="assertions-list">
|
|
200
|
+
${test.id ? `<li class="passed">🆔 ID: <code>${test.id}</code></li>` : ''}
|
|
201
|
+
<li class="passed">📍 Endpoint: <code>${test.endpoint}</code></li>
|
|
202
|
+
<li class="passed">🏷️ Categoría: <strong>${test.category}</strong></li>
|
|
203
|
+
${test.duration ? `<li class="passed">⏱️ Duración: <strong>${test.duration}ms</strong></li>` : ''}
|
|
204
|
+
</ul>
|
|
205
|
+
</div>
|
|
206
|
+
`;
|
|
207
|
+
// Request Details
|
|
208
|
+
if (test.request) {
|
|
209
|
+
html += `
|
|
210
|
+
<div class="detail-section">
|
|
211
|
+
<h4>📤 Petición</h4>
|
|
212
|
+
${test.request.headers ? `
|
|
213
|
+
<p><strong>Headers:</strong></p>
|
|
214
|
+
<div class="code-block">
|
|
215
|
+
<div class="code-actions">
|
|
216
|
+
<button class="tab-btn active" onclick="switchTab(this, 'formatted')">Formateado</button>
|
|
217
|
+
<button class="tab-btn" onclick="switchTab(this, 'raw')">Raw</button>
|
|
218
|
+
<button class="copy-btn" onclick="copyToClipboard(this)">📋 Copiar</button>
|
|
219
|
+
</div>
|
|
220
|
+
<div class="tab-content formatted active">${syntaxHighlightJson(test.request.headers)}</div>
|
|
221
|
+
<div class="tab-content raw">${escapeHtml(JSON.stringify(test.request.headers))}</div>
|
|
222
|
+
</div>
|
|
223
|
+
` : ''}
|
|
224
|
+
${test.request.body ? `
|
|
225
|
+
<p><strong>Body:</strong></p>
|
|
226
|
+
${renderCollapsibleJson(test.request.body, 'request-body')}
|
|
227
|
+
` : ''}
|
|
228
|
+
</div>
|
|
229
|
+
`;
|
|
230
|
+
}
|
|
231
|
+
// Response Details
|
|
232
|
+
if (test.response || test.actualStatus) {
|
|
233
|
+
const statusMatch = test.actualStatus === test.expectedStatus;
|
|
234
|
+
html += `
|
|
235
|
+
<div class="detail-section">
|
|
236
|
+
<h4>📥 Respuesta</h4>
|
|
237
|
+
${test.actualStatus ? `
|
|
238
|
+
<p><strong>Código de Estado:</strong>
|
|
239
|
+
<span class="status-badge ${statusMatch ? 'status-success' : 'status-error'}">
|
|
240
|
+
${test.actualStatus}
|
|
241
|
+
${!statusMatch && test.expectedStatus ? ` ≠ ${test.expectedStatus} (esperado)` : ''}
|
|
242
|
+
</span>
|
|
243
|
+
</p>
|
|
244
|
+
` : ''}
|
|
245
|
+
${test.response?.headers ? `
|
|
246
|
+
<p><strong>Headers:</strong></p>
|
|
247
|
+
<div class="code-block">
|
|
248
|
+
<div class="code-actions">
|
|
249
|
+
<button class="tab-btn active" onclick="switchTab(this, 'formatted')">Formateado</button>
|
|
250
|
+
<button class="tab-btn" onclick="switchTab(this, 'raw')">Raw</button>
|
|
251
|
+
<button class="copy-btn" onclick="copyToClipboard(this)">📋 Copiar</button>
|
|
252
|
+
</div>
|
|
253
|
+
<div class="tab-content formatted active">${syntaxHighlightJson(test.response.headers)}</div>
|
|
254
|
+
<div class="tab-content raw">${escapeHtml(JSON.stringify(test.response.headers))}</div>
|
|
255
|
+
</div>
|
|
256
|
+
` : ''}
|
|
257
|
+
${test.response?.body ? `
|
|
258
|
+
<p><strong>Body:</strong></p>
|
|
259
|
+
${renderCollapsibleJson(test.response.body, 'response-body')}
|
|
260
|
+
` : ''}
|
|
261
|
+
</div>
|
|
262
|
+
`;
|
|
263
|
+
}
|
|
264
|
+
// Validations
|
|
265
|
+
html += `
|
|
266
|
+
<div class="detail-section">
|
|
267
|
+
<h4>✓ Validaciones</h4>
|
|
268
|
+
<ul class="assertions-list">
|
|
269
|
+
${test.expectedStatus ? `
|
|
270
|
+
<li class="${test.actualStatus === test.expectedStatus ? 'passed' : 'failed'}">
|
|
271
|
+
${test.actualStatus === test.expectedStatus ? '✅' : '❌'}
|
|
272
|
+
Código de estado: Esperado ${test.expectedStatus}, Obtenido ${test.actualStatus}
|
|
273
|
+
</li>
|
|
274
|
+
` : ''}
|
|
275
|
+
${test.duration ? `
|
|
276
|
+
<li class="${test.duration < 1000 ? 'passed' : 'failed'}">
|
|
277
|
+
${test.duration < 1000 ? '✅' : '⚠️'}
|
|
278
|
+
Tiempo de respuesta: ${test.duration}ms ${test.duration < 1000 ? '(Bajo 1s)' : '(Sobre 1s)'}
|
|
279
|
+
</li>
|
|
280
|
+
` : ''}
|
|
281
|
+
${!test.error && !test.schemaErrors ? '<li class="passed">✅ Sin errores detectados</li>' : ''}
|
|
282
|
+
</ul>
|
|
283
|
+
</div>
|
|
284
|
+
`;
|
|
285
|
+
// Errors - with AI explanation if available
|
|
286
|
+
if (test.error || test.schemaErrors) {
|
|
287
|
+
let aiExplanation = '';
|
|
288
|
+
if (errorExplanations && test.error) {
|
|
289
|
+
for (const [key, explanation] of Object.entries(errorExplanations)) {
|
|
290
|
+
if (test.error.startsWith(key) || key.startsWith(test.error.substring(0, 30))) {
|
|
291
|
+
aiExplanation = explanation;
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
html += `
|
|
297
|
+
<div class="detail-section">
|
|
298
|
+
<h4>🚨 Detalles del Error</h4>
|
|
299
|
+
${aiExplanation ? `
|
|
300
|
+
<div class="ai-explanation">
|
|
301
|
+
<span class="ai-label">🤖 Explicación IA:</span>
|
|
302
|
+
<p>${escapeHtml(aiExplanation)}</p>
|
|
303
|
+
</div>
|
|
304
|
+
` : ''}
|
|
305
|
+
${test.error ? `<div class="error-summary">${formatErrorMessage(test.error)}</div>` : ''}
|
|
306
|
+
${test.schemaErrors && test.schemaErrors.length > 0 ? `
|
|
307
|
+
<div class="schema-errors">
|
|
308
|
+
<p class="error-intro"><strong>Errores de Validación de Schema:</strong></p>
|
|
309
|
+
<ul class="error-list">
|
|
310
|
+
${test.schemaErrors.map((err) => `
|
|
311
|
+
<li class="error-item">
|
|
312
|
+
<span class="error-icon">⚠️</span>
|
|
313
|
+
<div class="error-content">
|
|
314
|
+
<span class="error-field">${err.instancePath || 'root'}</span>
|
|
315
|
+
<span class="error-message">${escapeHtml(err.message)}</span>
|
|
316
|
+
${err.keyword ? `<span class="error-keyword">[${err.keyword}]</span>` : ''}
|
|
317
|
+
</div>
|
|
318
|
+
</li>
|
|
319
|
+
`).join('')}
|
|
320
|
+
</ul>
|
|
321
|
+
</div>
|
|
322
|
+
` : ''}
|
|
323
|
+
</div>
|
|
324
|
+
`;
|
|
325
|
+
}
|
|
326
|
+
return html;
|
|
327
|
+
}
|
|
328
|
+
//# sourceMappingURL=report-test-details.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-test-details.js","sourceRoot":"","sources":["../../src/reporters/report-test-details.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML Report Utilities
|
|
3
|
+
*
|
|
4
|
+
* Helper functions for formatting and styling report content.
|
|
5
|
+
*
|
|
6
|
+
* @module reporters/report-utils
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Formats a duration in milliseconds to a human-readable string
|
|
10
|
+
*/
|
|
11
|
+
export declare function formatDuration(ms: number): string;
|
|
12
|
+
/**
|
|
13
|
+
* Escapes HTML special characters to prevent XSS
|
|
14
|
+
*/
|
|
15
|
+
export declare function escapeHtml(text: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Formats error messages into human-readable HTML
|
|
18
|
+
*/
|
|
19
|
+
export declare function formatErrorMessage(error: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Get Tailwind CSS color classes for HTTP method badges
|
|
22
|
+
*/
|
|
23
|
+
export declare function getMethodColorClass(method: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Get Tailwind CSS classes for priority badges
|
|
26
|
+
*/
|
|
27
|
+
export declare function getPriorityBadgeClass(priority: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Get Tailwind CSS border classes for pattern cards
|
|
30
|
+
*/
|
|
31
|
+
export declare function getPatternBorderClass(impact: string): string;
|
|
32
|
+
/** Get label for root cause */
|
|
33
|
+
export declare function getRootCauseLabel(rootCause: string): string;
|
|
34
|
+
/** Get border color class for root cause */
|
|
35
|
+
export declare function getRootCauseBorderColor(rootCause: string): string;
|
|
36
|
+
/** Get priority badge class for root cause */
|
|
37
|
+
export declare function getRootCausePriorityBadge(rootCause: string): string;
|
|
38
|
+
/** Get method badge class */
|
|
39
|
+
export declare function getMethodBadgeClass(method: string): string;
|
|
40
|
+
//# sourceMappingURL=report-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-utils.d.ts","sourceRoot":"","sources":["../../src/reporters/report-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS/C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA8CxD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAS1D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQ9D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQ5D;AAED,+BAA+B;AAC/B,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAW3D;AAED,4CAA4C;AAC5C,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAWjE;AAED,8CAA8C;AAC9C,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAWnE;AAED,6BAA6B;AAC7B,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAS1D"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML Report Utilities
|
|
3
|
+
*
|
|
4
|
+
* Helper functions for formatting and styling report content.
|
|
5
|
+
*
|
|
6
|
+
* @module reporters/report-utils
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Formats a duration in milliseconds to a human-readable string
|
|
10
|
+
*/
|
|
11
|
+
export function formatDuration(ms) {
|
|
12
|
+
if (ms < 1000)
|
|
13
|
+
return `${ms}ms`;
|
|
14
|
+
if (ms < 60000)
|
|
15
|
+
return `${(ms / 1000).toFixed(2)}s`;
|
|
16
|
+
const minutes = Math.floor(ms / 60000);
|
|
17
|
+
const seconds = ((ms % 60000) / 1000).toFixed(0);
|
|
18
|
+
return `${minutes}m ${seconds}s`;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Escapes HTML special characters to prevent XSS
|
|
22
|
+
*/
|
|
23
|
+
export function escapeHtml(text) {
|
|
24
|
+
const map = {
|
|
25
|
+
'&': '&',
|
|
26
|
+
'<': '<',
|
|
27
|
+
'>': '>',
|
|
28
|
+
'"': '"',
|
|
29
|
+
"'": '''
|
|
30
|
+
};
|
|
31
|
+
return text.replace(/[&<>"']/g, m => map[m]);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Formats error messages into human-readable HTML
|
|
35
|
+
*/
|
|
36
|
+
export function formatErrorMessage(error) {
|
|
37
|
+
const parts = error.split(';').map(s => s.trim()).filter(Boolean);
|
|
38
|
+
if (parts.length === 1) {
|
|
39
|
+
return `<p class="error-main">${escapeHtml(error)}</p>`;
|
|
40
|
+
}
|
|
41
|
+
let html = '<div class="error-multi">';
|
|
42
|
+
for (const part of parts) {
|
|
43
|
+
if (part.includes('Expected status') && part.includes('got')) {
|
|
44
|
+
const match = part.match(/Expected status (\d+), got (\d+)/);
|
|
45
|
+
if (match) {
|
|
46
|
+
html += `
|
|
47
|
+
<div class="error-status-mismatch">
|
|
48
|
+
<span class="error-label">Status Mismatch:</span>
|
|
49
|
+
<span class="expected">Expected: <code>${match[1]}</code></span>
|
|
50
|
+
<span class="vs">→</span>
|
|
51
|
+
<span class="actual">Actual: <code>${match[2]}</code></span>
|
|
52
|
+
</div>`;
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (part.includes('Schema validation failed')) {
|
|
57
|
+
html += `<p class="error-schema-header">📋 Schema validation failed</p>`;
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (part.includes('must have required property')) {
|
|
61
|
+
const match = part.match(/must have required property '([^']+)'/);
|
|
62
|
+
if (match) {
|
|
63
|
+
html += `
|
|
64
|
+
<div class="error-missing-prop">
|
|
65
|
+
<span class="error-icon">📦</span>
|
|
66
|
+
<span>Missing required field: <code>${match[1]}</code></span>
|
|
67
|
+
</div>`;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
html += `<p class="error-line">${escapeHtml(part)}</p>`;
|
|
72
|
+
}
|
|
73
|
+
html += '</div>';
|
|
74
|
+
return html;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get Tailwind CSS color classes for HTTP method badges
|
|
78
|
+
*/
|
|
79
|
+
export function getMethodColorClass(method) {
|
|
80
|
+
switch (method.toUpperCase()) {
|
|
81
|
+
case 'GET': return 'bg-blue-100 text-blue-800';
|
|
82
|
+
case 'POST': return 'bg-green-100 text-green-800';
|
|
83
|
+
case 'PUT': return 'bg-yellow-100 text-yellow-800';
|
|
84
|
+
case 'PATCH': return 'bg-orange-100 text-orange-800';
|
|
85
|
+
case 'DELETE': return 'bg-red-100 text-red-800';
|
|
86
|
+
default: return 'bg-gray-100 text-gray-800';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get Tailwind CSS classes for priority badges
|
|
91
|
+
*/
|
|
92
|
+
export function getPriorityBadgeClass(priority) {
|
|
93
|
+
switch (priority.toLowerCase()) {
|
|
94
|
+
case 'critical': return 'bg-red-600 text-white';
|
|
95
|
+
case 'high': return 'bg-orange-500 text-white';
|
|
96
|
+
case 'medium': return 'bg-yellow-500 text-white';
|
|
97
|
+
case 'low': return 'bg-blue-500 text-white';
|
|
98
|
+
default: return 'bg-gray-500 text-white';
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get Tailwind CSS border classes for pattern cards
|
|
103
|
+
*/
|
|
104
|
+
export function getPatternBorderClass(impact) {
|
|
105
|
+
switch (impact.toLowerCase()) {
|
|
106
|
+
case 'critical': return 'border-red-500 bg-red-50';
|
|
107
|
+
case 'high': return 'border-orange-500 bg-orange-50';
|
|
108
|
+
case 'medium': return 'border-yellow-500 bg-yellow-50';
|
|
109
|
+
case 'low': return 'border-blue-500 bg-blue-50';
|
|
110
|
+
default: return 'border-gray-300 bg-gray-50';
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/** Get label for root cause */
|
|
114
|
+
export function getRootCauseLabel(rootCause) {
|
|
115
|
+
const labels = {
|
|
116
|
+
endpoint_not_implemented: 'Not Implemented',
|
|
117
|
+
endpoint_not_documented: 'Not Documented',
|
|
118
|
+
auth_mismatch: 'Auth Mismatch',
|
|
119
|
+
missing_dependency: 'Missing Dependency',
|
|
120
|
+
schema_mismatch: 'Schema Mismatch',
|
|
121
|
+
business_rule_violation: 'Business Rule',
|
|
122
|
+
unknown: 'Unknown',
|
|
123
|
+
};
|
|
124
|
+
return labels[rootCause] || rootCause;
|
|
125
|
+
}
|
|
126
|
+
/** Get border color class for root cause */
|
|
127
|
+
export function getRootCauseBorderColor(rootCause) {
|
|
128
|
+
const colors = {
|
|
129
|
+
endpoint_not_implemented: 'border-red-500',
|
|
130
|
+
business_rule_violation: 'border-orange-600',
|
|
131
|
+
auth_mismatch: 'border-orange-500',
|
|
132
|
+
schema_mismatch: 'border-yellow-500',
|
|
133
|
+
missing_dependency: 'border-blue-500',
|
|
134
|
+
endpoint_not_documented: 'border-gray-400',
|
|
135
|
+
unknown: 'border-gray-300',
|
|
136
|
+
};
|
|
137
|
+
return colors[rootCause] || 'border-gray-300';
|
|
138
|
+
}
|
|
139
|
+
/** Get priority badge class for root cause */
|
|
140
|
+
export function getRootCausePriorityBadge(rootCause) {
|
|
141
|
+
const badges = {
|
|
142
|
+
endpoint_not_implemented: 'bg-red-600 text-white',
|
|
143
|
+
business_rule_violation: 'bg-orange-600 text-white',
|
|
144
|
+
auth_mismatch: 'bg-orange-500 text-white',
|
|
145
|
+
schema_mismatch: 'bg-yellow-500 text-white',
|
|
146
|
+
missing_dependency: 'bg-blue-500 text-white',
|
|
147
|
+
endpoint_not_documented: 'bg-gray-500 text-white',
|
|
148
|
+
unknown: 'bg-gray-400 text-white',
|
|
149
|
+
};
|
|
150
|
+
return badges[rootCause] || 'bg-gray-400 text-white';
|
|
151
|
+
}
|
|
152
|
+
/** Get method badge class */
|
|
153
|
+
export function getMethodBadgeClass(method) {
|
|
154
|
+
const badges = {
|
|
155
|
+
GET: 'bg-blue-600 text-white',
|
|
156
|
+
POST: 'bg-green-600 text-white',
|
|
157
|
+
PUT: 'bg-yellow-600 text-white',
|
|
158
|
+
PATCH: 'bg-orange-600 text-white',
|
|
159
|
+
DELETE: 'bg-red-600 text-white',
|
|
160
|
+
};
|
|
161
|
+
return badges[method.toUpperCase()] || 'bg-gray-600 text-white';
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=report-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-utils.js","sourceRoot":"","sources":["../../src/reporters/report-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Configuration Types
|
|
3
|
+
*
|
|
4
|
+
* Defines configuration levels and capabilities for AI-powered test generation
|
|
5
|
+
*
|
|
6
|
+
* @module types/ai-config
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* AI capability levels
|
|
10
|
+
* - off: No AI, only heuristics
|
|
11
|
+
* - basic: Contextual data generation only
|
|
12
|
+
* - smart: Auto-dependencies, data flows, smart assertions
|
|
13
|
+
* - advanced: All features including domain edge cases and user story analysis
|
|
14
|
+
*/
|
|
15
|
+
export type AILevel = 'off' | 'basic' | 'smart' | 'advanced';
|
|
16
|
+
/**
|
|
17
|
+
* AI capabilities configuration
|
|
18
|
+
*/
|
|
19
|
+
export interface AICapabilities {
|
|
20
|
+
/** Generate contextual data based on API domain */
|
|
21
|
+
contextualData: boolean;
|
|
22
|
+
/** Automatically detect test dependencies */
|
|
23
|
+
autoDependencies: boolean;
|
|
24
|
+
/** Automatically detect data flows between tests */
|
|
25
|
+
autoDataFlow: boolean;
|
|
26
|
+
/** Generate smart business logic assertions */
|
|
27
|
+
smartAssertions: boolean;
|
|
28
|
+
/** Suggest domain-specific edge cases */
|
|
29
|
+
domainEdgeCases: boolean;
|
|
30
|
+
/** Analyze user stories for test generation */
|
|
31
|
+
userStoryAnalysis: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* LLM configuration
|
|
35
|
+
*/
|
|
36
|
+
export interface LLMConfig {
|
|
37
|
+
/** Maximum tokens for LLM responses */
|
|
38
|
+
maxTokens: number;
|
|
39
|
+
/** Temperature for generation (0-1) */
|
|
40
|
+
temperature: number;
|
|
41
|
+
/** Optional: specific model to use */
|
|
42
|
+
model?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Complete AI configuration
|
|
46
|
+
*/
|
|
47
|
+
export interface AIConfig {
|
|
48
|
+
/** AI capability level */
|
|
49
|
+
level: AILevel;
|
|
50
|
+
/** Enabled capabilities */
|
|
51
|
+
capabilities: AICapabilities;
|
|
52
|
+
/** LLM configuration */
|
|
53
|
+
llm: LLMConfig;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Predefined AI level configurations
|
|
57
|
+
*/
|
|
58
|
+
export declare const AI_LEVELS: Record<AILevel, AIConfig>;
|
|
59
|
+
/**
|
|
60
|
+
* Get AI configuration for a specific level
|
|
61
|
+
*/
|
|
62
|
+
export declare function getAIConfig(level?: AILevel): AIConfig;
|
|
63
|
+
//# sourceMappingURL=ai-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-config.d.ts","sourceRoot":"","sources":["../../src/types/ai-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,cAAc,EAAE,OAAO,CAAC;IAExB,6CAA6C;IAC7C,gBAAgB,EAAE,OAAO,CAAC;IAE1B,oDAAoD;IACpD,YAAY,EAAE,OAAO,CAAC;IAEtB,+CAA+C;IAC/C,eAAe,EAAE,OAAO,CAAC;IAEzB,yCAAyC;IACzC,eAAe,EAAE,OAAO,CAAC;IAEzB,+CAA+C;IAC/C,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAElB,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IAEpB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,0BAA0B;IAC1B,KAAK,EAAE,OAAO,CAAC;IAEf,2BAA2B;IAC3B,YAAY,EAAE,cAAc,CAAC;IAE7B,wBAAwB;IACxB,GAAG,EAAE,SAAS,CAAC;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAgE/C,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,GAAE,OAAe,GAAG,QAAQ,CAE5D"}
|