helpers.ts•2.14 kB
import { DefaultFieldMaps } from "./types.js";
import { randomUUID } from "node:crypto";
/**
 * Build mappings for default fields for priority, status, and case type.
 */
export function buildDefaultFieldMaps(defaultFields: any): DefaultFieldMaps {
  const priority = Object.fromEntries(
    defaultFields.priority.values.map((v: any) => [
      v.name.toLowerCase(),
      v.value,
    ]),
  );
  const status = Object.fromEntries(
    defaultFields.status.values.map((v: any) => [v.internal_name, v.value]),
  );
  const caseType = Object.fromEntries(
    defaultFields.case_type.values.map((v: any) => [v.internal_name, v.value]),
  );
  return { priority, status, caseType };
}
/**
 * Find a boolean custom field ID if present.
 */
export function findBooleanFieldId(customFields: any[]): number | undefined {
  const boolField = customFields.find((f) => f.field_type === "field_boolean");
  return boolField?.id;
}
/**
 * Construct payload for creating a single test case in bulk.
 */
export function createTestCasePayload(
  tc: any,
  scenarioId: string,
  folderId: string,
  fieldMaps: DefaultFieldMaps,
  documentId: number,
  booleanFieldId?: number,
  traceId?: string,
): Record<string, any> {
  const pri = tc.priority ?? "Medium";
  const stat = fieldMaps.status["active"];
  const ct = fieldMaps.caseType["functional"];
  return {
    attachments: [documentId],
    name: tc.name,
    description: tc.description,
    test_case_folder_id: folderId,
    priority: pri,
    status: stat,
    case_type: ct,
    automation_status: "not_automated",
    fetch_ai_test_case_details: true,
    template: "test_case_steps",
    metadata: JSON.stringify({
      ai_prompt: {
        attachment_id: documentId,
        rich_text_id: null,
        scenario: scenarioId,
        test_case_count: tc.test_case_count || 1,
        uuid: tc.uuid || randomUUID() || "unknown-uuid",
        "x-bstack-traceRequestId": traceId,
      },
    }),
    tags: ["AI Generated", "MCP Generated"],
    custom_fields: booleanFieldId ? { [booleanFieldId]: false } : undefined,
    test_case_steps: tc.steps,
    preconditions: tc.preconditions,
  };
}