UNPKG

qase-mcp-server

Version:

Model Context Protocol server for Qase TMS - Enables AI assistants to manage test cases, runs, and defects in Qase

88 lines (87 loc) 3.3 kB
import { z } from 'zod'; import { client, toResult } from '../utils.js'; import { apply, pipe } from 'ramda'; // Schema for getting all defects export const GetDefectsSchema = z.object({ code: z.string(), status: z.enum(['open', 'resolved', 'in_progress', 'invalid']).optional(), limit: z.number().optional(), offset: z.number().optional(), }); // Schema for getting a specific defect export const GetDefectSchema = z.object({ code: z.string(), id: z.number(), }); // Schema for creating a new defect export const CreateDefectSchema = z.object({ code: z.string(), defect: z .object({ title: z.string(), actual_result: z.string(), severity: z.number(), milestone_id: z.number().nullable().optional(), attachments: z.array(z.string()).optional(), custom_field: z.record(z.string()).optional(), tags: z.array(z.string()).optional(), }) .transform((v) => v), }); // Schema for updating a defect export const UpdateDefectSchema = z.object({ code: z.string(), id: z.number(), title: z.string().optional(), actual_result: z.string().optional(), severity: z.number().optional(), milestone_id: z.number().nullable().optional(), attachments: z.array(z.string()).optional(), custom_field: z.record(z.string()).optional(), tags: z.array(z.string()).optional(), }); // Schema for deleting a defect export const DeleteDefectSchema = z.object({ code: z.string(), id: z.number(), }); // Schema for resolving a defect export const ResolveDefectSchema = z.object({ code: z.string(), id: z.number(), }); // Schema for updating defect status export const UpdateDefectStatusSchema = z.object({ code: z.string(), id: z.number(), status: z.enum(['in_progress', 'resolved', 'invalid']), }); // Get all defects export const getDefects = pipe(apply(client.defects.getDefects.bind(client.defects)), (promise) => toResult(promise)); // Get a specific defect export const getDefect = pipe(client.defects.getDefect.bind(client.defects), (promise) => toResult(promise)); // Create a new defect export const createDefect = pipe(client.defects.createDefect.bind(client.defects), (promise) => toResult(promise)); // Convert update data to match API expectations const convertDefectUpdateData = (data) => ({ title: data.title, actual_result: data.actual_result, severity: data.severity, milestone_id: data.milestone_id, attachments: data.attachments, custom_field: data.custom_field, tags: data.tags, }); // Update a defect export const updateDefect = pipe((code, id, data) => client.defects.updateDefect(code, id, convertDefectUpdateData(data)), (promise) => toResult(promise)); // Delete a defect export const deleteDefect = pipe(client.defects.deleteDefect.bind(client.defects), (promise) => toResult(promise)); // Resolve a defect export const resolveDefect = pipe(client.defects.resolveDefect.bind(client.defects), (promise) => toResult(promise)); // Update defect status export const updateDefectStatus = pipe((code, id, status) => { const defectStatus = { status: status, // TypeScript enum casting }; return client.defects.updateDefectStatus(code, id, defectStatus); }, (promise) => toResult(promise));