吸收数字员工审批历史联动
This commit is contained in:
@@ -4,6 +4,7 @@ import type { HandlerContext } from "@shared/types/ipc";
|
||||
const mockStateService = vi.hoisted(() => ({
|
||||
recordManagedServiceAction: vi.fn(),
|
||||
recordArtifactLifecycle: vi.fn(),
|
||||
recordApprovalAction: vi.fn(),
|
||||
}));
|
||||
|
||||
const mockArtifactAccess = vi.hoisted(() => ({
|
||||
@@ -68,6 +69,7 @@ vi.mock("../services/digitalEmployee/stateService", () => ({
|
||||
recordDigitalEmployeeGovernanceCommand: vi.fn(),
|
||||
recordDigitalEmployeeDailyReport: vi.fn(),
|
||||
recordDigitalEmployeeArtifactLifecycle: mockStateService.recordArtifactLifecycle,
|
||||
recordDigitalEmployeeApprovalAction: mockStateService.recordApprovalAction,
|
||||
recordDigitalEmployeeManagedServiceAction: mockStateService.recordManagedServiceAction,
|
||||
readDigitalEmployeeRuntimeRecords: vi.fn(),
|
||||
readDigitalEmployeeState: vi.fn(),
|
||||
@@ -136,6 +138,7 @@ describe("digital employee managed service actions", () => {
|
||||
vi.clearAllMocks();
|
||||
mockStateService.recordManagedServiceAction.mockReturnValue({ eventId: "event-1" });
|
||||
mockStateService.recordArtifactLifecycle.mockReturnValue({ eventId: "artifact-event-1", kind: "artifact_retention_marked", payload: {} });
|
||||
mockStateService.recordApprovalAction.mockReturnValue({ eventId: "approval-event-1", kind: "approval_action_recorded", payload: {} });
|
||||
mockArtifactAccess.accessDigitalEmployeeArtifact.mockResolvedValue({ ok: true, artifact_id: "artifact-1", action: "preview" });
|
||||
mockServiceManager.startFileServer.mockResolvedValue({ success: true, message: "started" });
|
||||
mockServiceManager.createServiceManager.mockReturnValue({
|
||||
@@ -228,4 +231,24 @@ describe("digital employee managed service actions", () => {
|
||||
expect(result).toMatchObject({ eventId: "artifact-event-1", kind: "artifact_retention_marked" });
|
||||
expect(mockStateService.recordArtifactLifecycle).toHaveBeenCalledWith({ artifactId: "artifact-1", action: "mark_keep" });
|
||||
});
|
||||
|
||||
it("registers approval action history through the digital employee IPC boundary", async () => {
|
||||
const electron = await import("electron");
|
||||
const { registerDigitalEmployeeHandlers } = await import("./digitalEmployeeHandlers");
|
||||
|
||||
registerDigitalEmployeeHandlers(createCtx());
|
||||
const calls = vi.mocked(electron.ipcMain.handle).mock.calls;
|
||||
const approvalCall = calls.find(([channel]) => channel === "digitalEmployee:recordApprovalAction");
|
||||
expect(approvalCall).toBeTruthy();
|
||||
|
||||
const handler = approvalCall?.[1] as (_event: unknown, input: unknown) => Promise<unknown>;
|
||||
const result = await handler({}, { approvalId: "approval-1", action: "comment", comment: "需要复核" });
|
||||
|
||||
expect(result).toMatchObject({ eventId: "approval-event-1", kind: "approval_action_recorded" });
|
||||
expect(mockStateService.recordApprovalAction).toHaveBeenCalledWith({
|
||||
approvalId: "approval-1",
|
||||
action: "comment",
|
||||
comment: "需要复核",
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -22,6 +22,7 @@ import {
|
||||
recordDigitalEmployeeGovernanceCommand,
|
||||
recordDigitalEmployeeDailyReport,
|
||||
recordDigitalEmployeeArtifactLifecycle,
|
||||
recordDigitalEmployeeApprovalAction,
|
||||
recordDigitalEmployeeManagedServiceAction,
|
||||
readDigitalEmployeeRuntimeRecords,
|
||||
readDigitalEmployeeState,
|
||||
@@ -41,6 +42,7 @@ import {
|
||||
type DigitalEmployeeGovernanceCommandRecord,
|
||||
type DigitalEmployeeDailyReportRecordInput,
|
||||
type DigitalEmployeeArtifactLifecycleInput,
|
||||
type DigitalEmployeeApprovalActionInput,
|
||||
type DigitalEmployeeMemoryUpsertInput,
|
||||
type DigitalEmployeeRouteDecisionInput,
|
||||
type DigitalEmployeeServiceStatus,
|
||||
@@ -241,6 +243,13 @@ export function registerDigitalEmployeeHandlers(ctx: HandlerContext): void {
|
||||
},
|
||||
);
|
||||
|
||||
ipcMain.handle(
|
||||
"digitalEmployee:recordApprovalAction",
|
||||
async (_, input: DigitalEmployeeApprovalActionInput) => {
|
||||
return recordDigitalEmployeeApprovalAction(input ?? { action: "unknown_action" });
|
||||
},
|
||||
);
|
||||
|
||||
ipcMain.handle(
|
||||
"digitalEmployee:restartManagedService",
|
||||
async (_, input: RestartManagedServiceRequest) => {
|
||||
|
||||
Reference in New Issue
Block a user