PRA-only-demo/src/main/capabilities/capability-audit.test.ts

40 lines
2.4 KiB
TypeScript

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([]);
});
});