import { describe, it, expect, vi, beforeEach } from "vitest"; const invoke = vi.fn(); vi.mock("@tauri-apps/api/core", () => ({ invoke: (...args: unknown[]) => invoke(...args), })); import { TauriPluginGateway } from "./plugin"; describe("TauriPluginGateway invoke payloads", () => { beforeEach(() => invoke.mockReset().mockResolvedValue({})); it("reviewPackage sends the package DTO under the Tauri input arg", async () => { await new TauriPluginGateway().reviewPackage({ sourceKind: "archive", path: "/tmp/example.ideaplug", }); expect(invoke).toHaveBeenCalledWith("plugin_review_package", { input: { sourceKind: "archive", path: "/tmp/example.ideaplug", }, }); }); it("normalizes backend review DTOs for the Plugins panel view-model", async () => { invoke.mockResolvedValueOnce({ id: "dev.acme.gitgraph", displayName: "Git Graph", publisher: "Acme", version: "1.2.3", description: "Graph", sourceKind: "archive", sourceLabel: "/tmp/gitgraph.ideaplug", contentHash: "abc", trustLevel: "full", contributionSummary: { topLevelMenus: 1, menuItems: 2, layouts: 3, mcpServers: 4 }, contributes: { menus: [], menuItems: [], layouts: [], mcpServers: [] }, }); const review = await new TauriPluginGateway().reviewPackage({ sourceKind: "archive", path: "/tmp/gitgraph.ideaplug", }); expect(review.issues).toEqual([]); expect(review.installable).toBe(true); }); it("uses the project-plugin command envelopes", async () => { const gateway = new TauriPluginGateway(); await gateway.listProjectSettings("project-1"); expect(invoke).toHaveBeenLastCalledWith("plugin_list_project_settings", { projectId: "project-1", }); const projectInput = { projectId: "project-1", pluginId: "dev.acme.unity", enabled: true }; await gateway.setProjectEnabled(projectInput); expect(invoke).toHaveBeenLastCalledWith("plugin_set_project_enabled", { input: projectInput }); const skillInput = { projectId: "project-1", agentId: "agent-1", pluginId: "dev.acme.unity", skillId: "unity.debug", }; await gateway.assignAgentSkill(skillInput); expect(invoke).toHaveBeenLastCalledWith("plugin_assign_agent_skill", { input: skillInput }); await gateway.unassignAgentSkill(skillInput); expect(invoke).toHaveBeenLastCalledWith("plugin_unassign_agent_skill", { input: skillInput }); const toolInput = { projectId: "project-1", agentId: "agent-1", pluginId: "dev.acme.unity", serverId: "unity-tools", toolName: "unity_build", }; await gateway.assignAgentTool(toolInput); expect(invoke).toHaveBeenLastCalledWith("plugin_assign_agent_tool", { input: toolInput }); await gateway.unassignAgentTool(toolInput); expect(invoke).toHaveBeenLastCalledWith("plugin_unassign_agent_tool", { input: toolInput }); }); it("scopes runtime contributions to the focused project", async () => { const gateway = new TauriPluginGateway(); await gateway.listRuntimeContributions("project-1"); expect(invoke).toHaveBeenCalledWith("plugin_list_runtime_contributions", { projectId: "project-1", }); }); });