UNPKG

@smartbear/mcp

Version:

MCP server for interacting SmartBear Products

221 lines (220 loc) 7.93 kB
import { QMETRY_PATHS } from "../config/rest-endpoints.js"; import { DEFAULT_CREATE_TESTCASES_PAYLOAD, DEFAULT_FETCH_TESTCASE_DETAILS_PAYLOAD, DEFAULT_FETCH_TESTCASE_EXECUTIONS_PAYLOAD, DEFAULT_FETCH_TESTCASE_STEPS_PAYLOAD, DEFAULT_FETCH_TESTCASE_VERSION_DETAILS_PAYLOAD, DEFAULT_FETCH_TESTCASES_LINKED_TO_REQUIREMENT_PAYLOAD, DEFAULT_FETCH_TESTCASES_PAYLOAD, DEFAULT_LINKED_REQUIREMENT_TO_TESTCASE_PAYLOAD, DEFAULT_UPDATE_TESTCASES_PAYLOAD, } from "../types/testcase.js"; import { qmetryRequest } from "./api/client-api.js"; import { resolveDefaults } from "./utils.js"; /** * Create test cases. * @throws If `tcFolderID` or `name` are missing/invalid. */ export async function createTestCases(token, baseUrl, project, payload) { const { resolvedBaseUrl, resolvedProject } = resolveDefaults(baseUrl, project); const body = { ...DEFAULT_CREATE_TESTCASES_PAYLOAD, ...payload, }; if (typeof body.tcFolderID !== "string") { throw new Error("[createTestCases] Missing or invalid required parameter: 'tcFolderID'."); } if (typeof body.name !== "string") { throw new Error("[createTestCases] Missing or invalid required parameter: 'name'."); } return qmetryRequest({ method: "POST", path: QMETRY_PATHS.TESTCASE.CREATE_UPDATE_TC, token, project: resolvedProject, baseUrl: resolvedBaseUrl, body, }); } /** * Update test cases. * @throws If `tcID` or `tcVersionID` are missing/invalid. */ export async function updateTestCase(token, baseUrl, project, payload) { const { resolvedBaseUrl, resolvedProject } = resolveDefaults(baseUrl, project); const body = { ...DEFAULT_UPDATE_TESTCASES_PAYLOAD, ...payload, }; if (typeof body.tcID !== "number") { throw new Error("[updateTestCase] Missing or invalid required parameter: 'tcID'."); } if (typeof body.tcVersionID !== "number") { throw new Error("[updateTestCase] Missing or invalid required parameter: 'tcVersionID'."); } return qmetryRequest({ method: "PUT", path: QMETRY_PATHS.TESTCASE.CREATE_UPDATE_TC, token, project: resolvedProject, baseUrl: resolvedBaseUrl, body, }); } /** * Fetches a list of test cases. * @throws If `viewId` or `folderPath` are missing/invalid. */ export async function fetchTestCases(token, baseUrl, project, payload) { const { resolvedBaseUrl, resolvedProject } = resolveDefaults(baseUrl, project); const body = { ...DEFAULT_FETCH_TESTCASES_PAYLOAD, ...payload, }; if (typeof body.viewId !== "number") { throw new Error("[fetchTestCases] Missing or invalid required parameter: 'viewId'."); } if (typeof body.folderPath !== "string") { throw new Error("[fetchTestCases] Missing or invalid required parameter: 'folderPath'."); } return qmetryRequest({ method: "POST", path: QMETRY_PATHS.TESTCASE.GET_TC_LIST, token, project: resolvedProject, baseUrl: resolvedBaseUrl, body, }); } /** * Fetches a test case details. * @throws If `tcID` is missing/invalid. */ export async function fetchTestCaseDetails(token, baseUrl, project, payload) { const { resolvedBaseUrl, resolvedProject } = resolveDefaults(baseUrl, project); const body = { ...DEFAULT_FETCH_TESTCASE_DETAILS_PAYLOAD, ...payload, }; if (typeof body.tcID !== "number") { throw new Error("[fetchTestCaseDetails] Missing or invalid required parameter: 'tcID'."); } return qmetryRequest({ method: "POST", path: QMETRY_PATHS.TESTCASE.GET_TC_DETAILS, token, project: resolvedProject, baseUrl: resolvedBaseUrl, body, }); } /** * Fetches a test case details by version. * @throws If `id` is missing/invalid. */ export async function fetchTestCaseVersionDetails(token, baseUrl, project, payload) { const { resolvedBaseUrl, resolvedProject } = resolveDefaults(baseUrl, project); const body = { ...DEFAULT_FETCH_TESTCASE_VERSION_DETAILS_PAYLOAD, ...payload, }; if (!body.id) { throw new Error("[fetchTestCaseVersionDetails] Missing or invalid required parameter: 'id'."); } if (typeof body.version !== "number") { throw new Error("[fetchTestCaseVersionDetails] Missing or invalid required parameter: 'version'."); } return qmetryRequest({ method: "POST", path: QMETRY_PATHS.TESTCASE.GET_TC_DETAILS_BY_VERSION, token, project: resolvedProject, baseUrl: resolvedBaseUrl, body, }); } /** * Fetches a test case steps. * @throws If `id` is missing/invalid. */ export async function fetchTestCaseSteps(token, baseUrl, project, payload) { const { resolvedBaseUrl, resolvedProject } = resolveDefaults(baseUrl, project); const body = { ...DEFAULT_FETCH_TESTCASE_STEPS_PAYLOAD, ...payload, }; if (typeof body.id !== "number") { throw new Error("[fetchTestCaseSteps] Missing or invalid required parameter: 'id'."); } return qmetryRequest({ method: "POST", path: QMETRY_PATHS.TESTCASE.GET_TC_STEPS, token, project: resolvedProject, baseUrl: resolvedBaseUrl, body, }); } /** * Fetches test cases linked to a specific requirement. * @throws If `rqID` is missing/invalid. */ export async function fetchTestCasesLinkedToRequirement(token, baseUrl, project, payload) { const { resolvedBaseUrl, resolvedProject } = resolveDefaults(baseUrl, project); const body = { ...DEFAULT_FETCH_TESTCASES_LINKED_TO_REQUIREMENT_PAYLOAD, ...payload, }; if (typeof body.rqID !== "number") { throw new Error("[fetchTestCasesLinkedToRequirement] Missing or invalid required parameter: 'rqID'."); } return qmetryRequest({ method: "POST", path: QMETRY_PATHS.TESTCASE.GET_TC_LINKED_TO_RQ, token, project: resolvedProject, baseUrl: resolvedBaseUrl, body, }); } /** * Fetches executions for a specific test case. * @throws If `tcid` is missing/invalid. */ export async function fetchTestCaseExecutions(token, baseUrl, project, payload) { const { resolvedBaseUrl, resolvedProject } = resolveDefaults(baseUrl, project); const body = { ...DEFAULT_FETCH_TESTCASE_EXECUTIONS_PAYLOAD, ...payload, }; if (typeof body.tcid !== "number") { throw new Error("[fetchTestCaseExecutions] Missing or invalid required parameter: 'tcid'."); } return qmetryRequest({ method: "POST", path: QMETRY_PATHS.TESTCASE.GET_TC_EXECUTIONS, token, project: resolvedProject, baseUrl: resolvedBaseUrl, body, }); } /** * Links a requirement to a test case. * @throws If `tcID` or `tcVersionID` or `rqVersionIds` are missing/invalid. */ export async function linkRequirementToTestCase(token, baseUrl, project, payload) { const { resolvedBaseUrl, resolvedProject } = resolveDefaults(baseUrl, project); const body = { ...DEFAULT_LINKED_REQUIREMENT_TO_TESTCASE_PAYLOAD, ...payload, }; if (typeof body.tcID !== "string") { throw new Error("[linkRequirementToTestCase] Missing or invalid required parameter: 'tcID'."); } if (typeof body.tcVersionId !== "number") { throw new Error("[linkRequirementToTestCase] Missing or invalid required parameter: 'tcVersionId'."); } if (typeof body.rqVersionIds !== "string") { throw new Error("[linkRequirementToTestCase] Missing or invalid required parameter: 'rqVersionIds'."); } return qmetryRequest({ method: "PUT", path: QMETRY_PATHS.TESTCASE.LINKED_RQ_TO_TC, token, project: resolvedProject, baseUrl: resolvedBaseUrl, body, }); }