test(FN-4809): complete Step 3 — cover merge attempt audit emission
Fusion-Task-Id: FN-4809 Fusion-Task-Lineage: bd632e33-b376-47de-ad99-da4610ae4690
This commit is contained in:
committed by
gsxdsm
parent
42b8eebc8e
commit
ba8e912aa8
@@ -1,63 +1,48 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { createRunAuditor } from "../run-audit.js";
|
||||
import { emitMergeAttemptAuditEvent } from "../merger.js";
|
||||
import type { RunAuditEventInput, TaskStore } from "@fusion/core";
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import type { RunAuditEventInput } from "@fusion/core";
|
||||
import {
|
||||
createMockStore,
|
||||
mockedCreateFnAgent,
|
||||
mockedExistsSync,
|
||||
setupHappyPathExecSync,
|
||||
} from "./merger-test-helpers.js";
|
||||
import * as mergerModule from "../merger.js";
|
||||
|
||||
describe("merge attempt run_audit emission (FN-4809)", () => {
|
||||
it("emits git merge:start with merge-attempt phase consumed by reliability metric", async () => {
|
||||
const recordRunAuditEvent = vi.fn(async (_input: RunAuditEventInput) => {});
|
||||
const store = {
|
||||
recordRunAuditEvent,
|
||||
} as unknown as TaskStore;
|
||||
|
||||
const audit = createRunAuditor(store, {
|
||||
runId: "run-4809",
|
||||
agentId: "agent-4809",
|
||||
taskId: "FN-4809",
|
||||
phase: "merge",
|
||||
});
|
||||
|
||||
await emitMergeAttemptAuditEvent({
|
||||
audit,
|
||||
branch: "fusion/FN-4809",
|
||||
attemptNum: 1,
|
||||
mergeConflictStrategy: "smart-prefer-main",
|
||||
attemptLabel: "Attempt 1: AI merge",
|
||||
taskId: "FN-4809",
|
||||
});
|
||||
|
||||
expect(recordRunAuditEvent).toHaveBeenCalledTimes(1);
|
||||
const event = recordRunAuditEvent.mock.calls[0][0];
|
||||
expect(event.domain).toBe("git");
|
||||
expect(event.mutationType).toBe("merge:start");
|
||||
expect(event.taskId).toBe("FN-4809");
|
||||
expect(event.metadata?.phase).toBe("merge-attempt-1");
|
||||
expect(event.metadata?.phase).toMatch(/^merge-attempt-/);
|
||||
describe("FN-4809 merge-attempt run_audit emission", () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
mockedExistsSync.mockReturnValue(true);
|
||||
setupHappyPathExecSync();
|
||||
mockedCreateFnAgent.mockResolvedValue({
|
||||
session: {
|
||||
prompt: vi.fn().mockResolvedValue(undefined),
|
||||
dispose: vi.fn(),
|
||||
subscribe: vi.fn(),
|
||||
on: vi.fn(),
|
||||
state: {},
|
||||
sessionManager: { getLeafId: vi.fn().mockReturnValue("leaf-1") },
|
||||
},
|
||||
} as any);
|
||||
});
|
||||
|
||||
it("swallows audit-store failures so merge attempts are not blocked", async () => {
|
||||
const store = {
|
||||
recordRunAuditEvent: vi.fn(async () => {
|
||||
throw new Error("db unavailable");
|
||||
}),
|
||||
} as unknown as TaskStore;
|
||||
it("emits git merge:start with merge-attempt-1 phase (FN-4809)", async () => {
|
||||
const store = createMockStore({ branch: "fusion/FN-050" }) as any;
|
||||
const recordRunAuditEvent = vi.fn(async (_input: RunAuditEventInput) => {});
|
||||
store.recordRunAuditEvent = recordRunAuditEvent;
|
||||
|
||||
const audit = createRunAuditor(store, {
|
||||
runId: "run-4809-err",
|
||||
agentId: "agent-4809",
|
||||
taskId: "FN-4809",
|
||||
phase: "merge",
|
||||
});
|
||||
await mergerModule.aiMergeTask(store, "/tmp/root", "FN-050");
|
||||
|
||||
await expect(
|
||||
emitMergeAttemptAuditEvent({
|
||||
audit,
|
||||
branch: "fusion/FN-4809",
|
||||
attemptNum: 2,
|
||||
mergeConflictStrategy: "smart-prefer-main",
|
||||
attemptLabel: "Attempt 2",
|
||||
taskId: "FN-4809",
|
||||
}),
|
||||
).resolves.toBeUndefined();
|
||||
const mergeStartEvent = recordRunAuditEvent.mock.calls
|
||||
.map((call) => call[0] as RunAuditEventInput)
|
||||
.find((event) =>
|
||||
event.domain === "git"
|
||||
&& event.mutationType === "merge:start"
|
||||
&& event.taskId === "FN-050"
|
||||
&& typeof event.metadata?.phase === "string"
|
||||
&& /^merge-attempt-/.test(event.metadata.phase),
|
||||
);
|
||||
|
||||
expect(mergeStartEvent).toBeDefined();
|
||||
expect(mergeStartEvent?.metadata).toMatchObject({ phase: "merge-attempt-1" });
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user