@skyramp/mcp
Version:
Skyramp MCP (Model Context Protocol) Server - AI-powered test generation and execution
174 lines (173 loc) • 4.95 kB
JavaScript
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 = {
[]: 100,
[]: 95,
[]: 90,
[]: 60,
[]: 50,
[]: 80,
[]: 70,
};
export const CONTEXT_RULES = {
[]: [
{
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",
},
],
[]: [
{
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",
},
],
[]: [
{
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",
},
],
[]: [
{
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",
},
],
[]: [
{
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",
},
],
[]: [
{
condition: "frontend-spa-or-fullstack",
multiplier: 1.2,
description: "Full value for UI apps",
},
{
condition: "backend-only",
multiplier: 0,
description: "Not applicable",
},
],
[]: [
{
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)),
}),
});