UNPKG

@skyramp/mcp

Version:

Skyramp MCP (Model Context Protocol) Server - AI-powered test generation and execution

174 lines (173 loc) 4.95 kB
import { z } from "zod"; import { TestType } from "./TestTypes.js"; // Re-export TestType for convenience export { TestType }; // Base impact scores for each test type export const BASE_SCORES = { [TestType.E2E]: 100, [TestType.UI]: 95, [TestType.INTEGRATION]: 90, [TestType.LOAD]: 60, [TestType.FUZZ]: 50, [TestType.CONTRACT]: 80, [TestType.SMOKE]: 70, }; export const CONTEXT_RULES = { [TestType.E2E]: [ { condition: "full-stack", multiplier: 1.2, description: "Full-stack apps benefit most from E2E tests", }, { condition: "backend-only", multiplier: 0.7, description: "Limited E2E applicability for backend-only", }, { condition: "frontend-spa", multiplier: 0.9, description: "Slightly reduced without backend", }, { condition: "library", multiplier: 0, description: "Not applicable to libraries", }, ], [TestType.LOAD]: [ { condition: "hasKubernetes", multiplier: 1.2, description: "K8s suggests high-traffic expectations", }, { condition: "hasDockerCompose", multiplier: 1.15, description: "Scaled infrastructure indicates traffic needs", }, { condition: "cli-or-library", multiplier: 0.4, description: "Low traffic expected", }, { condition: "internal-tool", multiplier: 0.4, description: "Minimal load", }, ], [TestType.FUZZ]: [ { condition: "handles-payments", multiplier: 1.2, description: "Security critical for payments", }, { condition: "handles-pii", multiplier: 1.2, description: "Security critical for PII", }, { condition: "oauth2", multiplier: 1.15, description: "Public API security needs", }, { condition: "internal-service", multiplier: 0.9, description: "Lower security priority", }, ], [TestType.CONTRACT]: [ { condition: "microservices", multiplier: 1.2, description: "Critical for service contracts", }, { condition: "multiple-services", multiplier: 1.15, description: "Service interactions important", }, { condition: "monolith", multiplier: 0.9, description: "Less critical", }, ], [TestType.INTEGRATION]: [ { condition: "microservices", multiplier: 1.1, description: "Service communication important", }, { condition: "has-unit-missing-integration", multiplier: 1.2, description: "Fill coverage gap", }, { condition: "has-integration-tests", multiplier: 0.9, description: "Less urgent", }, ], [TestType.UI]: [ { condition: "frontend-spa-or-fullstack", multiplier: 1.2, description: "Full value for UI apps", }, { condition: "backend-only", multiplier: 0, description: "Not applicable", }, ], [TestType.SMOKE]: [ { condition: "no-existing-tests", multiplier: 1.2, description: "Quick wins needed", }, { condition: "has-cicd", multiplier: 1.1, description: "Deployment validation", }, { condition: "comprehensive-tests", multiplier: 0.8, description: "Less valuable", }, ], }; // Zod schemas for validation export const testPriorityScoreSchema = z.object({ testType: z.nativeEnum(TestType), _baseScore: z.number().min(0).max(120), contextMultiplier: z.number().min(0).max(2), _finalScore: z.number().min(0).max(150), feasibility: z.enum(["high", "medium", "low", "not-applicable"]), requiredArtifacts: z.object({ available: z.array(z.string()), missing: z.array(z.string()), }), reasoning: z.string(), }); export const testMappingResultSchema = z.object({ priorityScores: z.array(testPriorityScoreSchema), contextFactors: z.object({ applied: z.array(z.object({ factor: z.string(), impact: z.string(), multiplier: z.number(), })), }), summary: z.object({ highPriority: z.array(z.nativeEnum(TestType)), mediumPriority: z.array(z.nativeEnum(TestType)), lowPriority: z.array(z.nativeEnum(TestType)), }), });