吸收数字员工PlanStep远端策略拉取

This commit is contained in:
baiyanyun
2026-06-10 23:15:51 +08:00
parent 6f2ccdf783
commit c400367d22
17 changed files with 776 additions and 205 deletions

View File

@@ -9,6 +9,7 @@ const mockState = vi.hoisted(() => ({
governanceCommands: [] as Array<Record<string, unknown>>,
acquiredLeases: [] as Array<Record<string, unknown>>,
releasedLeases: [] as Array<Record<string, unknown>>,
policyPulls: [] as Array<Record<string, unknown>>,
settings: {
enabled: true,
catch_up_on_startup: true,
@@ -85,6 +86,13 @@ vi.mock("./stateService", () => ({
},
}));
vi.mock("./syncService", () => ({
pullDigitalEmployeePlanStepDispatchPolicy: (input: Record<string, unknown> = {}) => {
mockState.policyPulls.push(input);
return Promise.resolve({ ok: true, endpoint: "https://manage.example.com/api/digital-employee/policies/plan-step-dispatch" });
},
}));
describe("digital employee scheduler service", () => {
beforeEach(() => {
vi.resetModules();
@@ -95,6 +103,7 @@ describe("digital employee scheduler service", () => {
mockState.governanceCommands = [];
mockState.acquiredLeases = [];
mockState.releasedLeases = [];
mockState.policyPulls = [];
mockState.dispatchPolicy = {
enabled: true,
max_per_sweep: 3,
@@ -179,6 +188,7 @@ describe("digital employee scheduler service", () => {
expect.objectContaining({ method: "POST" }),
);
expect(mockState.dispatchEvents.map((event) => event.status)).toEqual(["started", "completed"]);
expect(mockState.policyPulls).toEqual([{}]);
expect(mockState.acquiredLeases).toEqual([expect.objectContaining({ stepId: "step-ready", triggerSource: "auto" })]);
expect(mockState.releasedLeases).toEqual([expect.objectContaining({ stepId: "step-ready", leaseId: "lease-step-ready", reason: "completed" })]);
expect(mockState.governanceCommands[0]).toMatchObject({
@@ -260,6 +270,7 @@ describe("digital employee scheduler service", () => {
expect(result).toMatchObject({ plan_id: "plan-1", trigger_source: "manual", candidates: 1, dispatched: 1, skipped: 0, failed: 0 });
expect(mockState.dispatchEvents[0]).toMatchObject({ status: "started", payload: expect.objectContaining({ trigger_source: "manual" }) });
expect(mockState.policyPulls).toHaveLength(0);
});
it("keeps the enabled switch as a manual plan dispatch kill switch", async () => {