@smartbear/mcp
Version:
MCP server for interacting SmartBear Products
221 lines (220 loc) • 7.93 kB
JavaScript
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,
});
}