import { readFile } from "node:fs/promises"; import { describe, expect, it } from "vitest"; import type { Catalog } from "../../shared/types"; import { hasCapability } from "../engine/registry"; import "./index"; const planned = [ "logic_control_if_else", "logic_control_count_for", "logic_control_array_for_v3", "logic_control_while", "logic_control_try_catch", "logic_control_var", "logic_control_break_for", "logic_control_next_for", "logic_control_stop", "Trigger.Manual", "Trigger.FileArrival", "WebBrowser_CreateV3", "WebBrowser_GoUrl", "WebBrowser_Switch", "Element_Click_V6", "Element_SetValue_V6", "Element_GetText_V5", "Element_Exists", "Element_SelectOperation_v1", "WebBrowser_RunJsInIeByTitle", "WebBrowser_SaveAs", "File_Read", "File_Write", "File_Copy", "File_File_Move", "File_DeleteFile", "File_Rename", "File_FileExists", "File_GetFileList", "File_MakeDir", "File_CompressFile", "File_DecompressFile", "File_GetFileInfo", "Excel_Cs_NewV5", "Excel_Cs_OpenV4", "Excel_Cs_ReadContentV2", "Excel_Cs_WriteCell", "Excel_Cs_WriteRange", "Excel_Cs_ReadRangeV2", "Excel_Save", "Excel_Cs_SaveAs", "Excel_GetSheetsName", "Excel_Cs_Insert", "Excel_Cs_Rename", "CSV_Read", "CSV_Write", "Keyboard_Send_V1", "Keyboard_PressNew", "Mouse_Click", "Mouse_MoveTo", "Mouse_DragTo", "Mouse_RollTo", "Window_SetActive", "Window_GetActive", "Window_WindowExists", "Window_CloseWindow", "App_Run", "Clipboard_GetText", "Clipboard_SetText", "Dialog_Notice", "Dialog_MsgBox", "System_ExecuteCommand", "Http_Get", "Http_Post", "Mail_Send", "Mail_UnionSend", "PDF_GetPdfPageNum", "PDF_GetPdfText", "PDF_ConcatPdf", "Word_New", "Word_Write", "Image_Screenshot", "Image_Find", "Image_Click" ]; const runtimeContainers = new Set([ "logic_control_if_else", "logic_control_count_for", "logic_control_array_for_v3", "logic_control_dictionary_for_v1", "logic_control_while", "infinite_loop", "logic_control_try_catch" ]); describe("planned capability audit", () => { it("keeps every planned representative capability executable", async () => { const catalog = JSON.parse(await readFile("resources/catalog.json", "utf8")) as Catalog; const missing = planned.filter((id) => { const component = catalog.components.find((item) => item.id === id); return !component || (!hasCapability(component.id) && !hasCapability(component.functionName) && !runtimeContainers.has(component.id)); }); expect(missing).toEqual([]); }); });