UNPKG

@smartbear/mcp

Version:

MCP server for interacting SmartBear Products

124 lines (123 loc) 4.41 kB
import { QMETRY_PATHS } from "../config/rest-endpoints.js"; import { DEFAULT_CREATE_ISSUE_PAYLOAD, DEFAULT_FETCH_ISSUES_LINKED_TO_TESTCASE_PAYLOAD, DEFAULT_FETCH_ISSUES_PAYLOAD, DEFAULT_LINK_ISSUES_TO_TESTCASE_RUN_PAYLOAD, DEFAULT_UPDATE_ISSUE_PAYLOAD, } from "../types/issues.js"; import { qmetryRequest } from "./api/client-api.js"; import { resolveDefaults } from "./utils.js"; /** * Create Defect/Issue. * @throws If `issueType` or `issuePriority` or `summary` are missing/invalid. */ export async function createIssue(token, baseUrl, project, payload) { const { resolvedBaseUrl, resolvedProject } = resolveDefaults(baseUrl, project); const body = { ...DEFAULT_CREATE_ISSUE_PAYLOAD, ...payload, }; if (typeof body.issueType !== "number") { throw new Error("[createIssue] Missing or invalid required parameter: 'issueType'."); } if (typeof body.issuePriority !== "number") { throw new Error("[createIssue] Missing or invalid required parameter: 'issuePriority'."); } if (typeof body.summary !== "string") { throw new Error("[createIssue] Missing or invalid required parameter: 'summary'."); } return qmetryRequest({ method: "POST", path: QMETRY_PATHS.ISSUES.CREATE_UPDATE_ISSUE, token, project: resolvedProject, baseUrl: resolvedBaseUrl, body, }); } /** * Update Defect/Issue. * @throws If `DefectId` is missing/invalid. */ export async function updateIssue(token, baseUrl, project, payload) { const { resolvedBaseUrl, resolvedProject } = resolveDefaults(baseUrl, project); const body = { ...DEFAULT_UPDATE_ISSUE_PAYLOAD, ...payload, }; if (typeof body.DefectId !== "number") { throw new Error("[updateIssue] Missing or invalid required parameter: 'DefectId'."); } return qmetryRequest({ method: "PUT", path: QMETRY_PATHS.ISSUES.CREATE_UPDATE_ISSUE, token, project: resolvedProject, baseUrl: resolvedBaseUrl, body, }); } /** * Fetches a list of test suites. * @throws If `viewId` or `folderPath` are missing/invalid. */ export async function fetchIssues(token, baseUrl, project, payload) { const { resolvedBaseUrl, resolvedProject } = resolveDefaults(baseUrl, project); const body = { ...DEFAULT_FETCH_ISSUES_PAYLOAD, ...payload, }; if (typeof body.viewId !== "number") { throw new Error("[fetchIssues] Missing or invalid required parameter: 'viewId'."); } return qmetryRequest({ method: "POST", path: QMETRY_PATHS.ISSUES.GET_ISSUES_LIST, token, project: resolvedProject, baseUrl: resolvedBaseUrl, body, }); } /** * Fetches issues linked to a specific test case. * @throws If `tcID` is missing/invalid. */ export async function fetchIssuesLinkedToTestCase(token, baseUrl, project, payload) { const { resolvedBaseUrl, resolvedProject } = resolveDefaults(baseUrl, project); const body = { ...DEFAULT_FETCH_ISSUES_LINKED_TO_TESTCASE_PAYLOAD, ...payload, }; if (typeof body.tcID !== "number") { throw new Error("[fetchIssuesLinkedToTestCase] Missing or invalid required parameter: 'tcID'."); } return qmetryRequest({ method: "POST", path: QMETRY_PATHS.ISSUES.GET_ISSUES_LINKED_TO_TC, token, project: resolvedProject, baseUrl: resolvedBaseUrl, body, }); } /** * Link Issues to Testcase Run. * @throws If issueIds or tcrId are missing/invalid. */ export async function linkIssuesToTestcaseRun(token, baseUrl, project, payload) { const { resolvedBaseUrl, resolvedProject } = resolveDefaults(baseUrl, project); const body = { ...DEFAULT_LINK_ISSUES_TO_TESTCASE_RUN_PAYLOAD, ...payload, }; if (!Array.isArray(body.issueIds) || body.issueIds.length === 0) { throw new Error("[linkIssuesToTestcaseRun] Missing or invalid required parameter: 'issueIds'."); } if (typeof body.tcrId !== "number") { throw new Error("[linkIssuesToTestcaseRun] Missing or invalid required parameter: 'tcrId'."); } return qmetryRequest({ method: "PUT", path: QMETRY_PATHS.ISSUES.LINK_ISSUES_TO_TESTCASE_RUN, token, project: resolvedProject, baseUrl: resolvedBaseUrl, body, }); }