fix(FN-5188): complete Step 5 — restore green verification

Fusion-Task-Id: FN-5188
Fusion-Task-Lineage: 6d238ff1-2d69-44e7-8694-ec19e412f8ef
This commit is contained in:
Fusion (runfusion.ai)
2026-05-19 16:44:17 -07:00
committed by gsxdsm
parent 9c59f1da0d
commit 7fe6cd362a
4 changed files with 21 additions and 5 deletions

View File

@@ -306,8 +306,15 @@ const mockListen = vi.fn((port: number) => {
vi.mock("@fusion/dashboard", () => ({
createServer: vi.fn((_store: unknown, opts: Record<string, any> = {}) => {
if (opts.engine && !opts.onMerge) {
opts.onMerge = (taskId: string) => opts.engine.onMerge(taskId);
if (!opts.onMerge) {
if (opts.engine) {
opts.onMerge = (taskId: string) => opts.engine.onMerge(taskId);
} else if (opts.engineManager?.ensureEngine) {
opts.onMerge = async (taskId: string) => {
const engine = await opts.engineManager.ensureEngine("project-1");
return engine?.onMerge(taskId);
};
}
}
opts.onProjectFirstAccessed?.("project-1");
return { listen: mockListen };
@@ -1249,7 +1256,9 @@ describe("runDashboard — WorktreePool wiring", () => {
await managerInstance.getEngine("project-1").onMerge("FN-TEST");
expect(aiMergeTask).toHaveBeenCalled();
await waitForAsyncExpectation(() => {
expect(aiMergeTask).toHaveBeenCalled();
});
const mergeCallOpts = (aiMergeTask as ReturnType<typeof vi.fn>).mock.calls[0][3];
expect(mergeCallOpts.pool).toBeInstanceOf(WorktreePool);
});
@@ -1267,6 +1276,11 @@ describe("runDashboard — WorktreePool wiring", () => {
await managerInstance.getEngine("project-1").onMerge("FN-TEST");
await waitForAsyncExpectation(() => {
expect(capturedExecutorOpts).toBeDefined();
expect((aiMergeTask as ReturnType<typeof vi.fn>).mock.calls[0]?.[3]?.pool).toBeDefined();
});
const executorPool = capturedExecutorOpts!.pool;
const mergerPool = (aiMergeTask as ReturnType<typeof vi.fn>).mock.calls[0][3].pool;
@@ -2524,7 +2538,7 @@ describe("runDashboard — PR feedback follow-up wiring", () => {
await capturedOnClosedPrFeedback("FN-001", mockPrInfo, mockComments);
// The PrCommentHandler mock should have been called
const handlerInstance = (PrCommentHandler as unknown as ReturnType<typeof vi.fn>).mock.results[0].value;
const handlerInstance = (PrCommentHandler as unknown as ReturnType<typeof vi.fn>).mock.results.at(-1)?.value;
expect(handlerInstance.createFollowUpTask).toHaveBeenCalledWith("FN-001", mockPrInfo, mockComments);
});

View File

@@ -316,7 +316,7 @@ describe("Database", () => {
expect(bootstrappedAt).toBeGreaterThan(0);
expect(bootstrappedAt).toBeLessThanOrEqual(Date.now());
const reopened = new Database(tempDir);
const reopened = new Database(fusionDir);
reopened.init();
try {
expect(reopened.getBootstrappedAt()).toBe(bootstrappedAt);

View File

@@ -14,6 +14,7 @@ function createStore(): TaskStore & EventEmitter {
(emitter as any).moveTask = vi.fn().mockResolvedValue(undefined);
(emitter as any).logEntry = vi.fn().mockResolvedValue(undefined);
(emitter as any).recordRunAuditEvent = vi.fn().mockResolvedValue(undefined);
(emitter as any).getBootstrappedAt = vi.fn(() => null);
(emitter as any).createTask = vi.fn();
(emitter as any).clearStaleExecutionStartBranchReferences = vi.fn().mockReturnValue([]);
return emitter;

View File

@@ -159,6 +159,7 @@ function createMockStore(overrides: Record<string, unknown> = {}): TaskStore & E
listTasks: vi.fn().mockResolvedValue([]),
createTask: vi.fn().mockResolvedValue({ id: "FN-RESCUE", lineageId: "lin-rescue" }),
recordRunAuditEvent: vi.fn().mockResolvedValue(undefined),
getBootstrappedAt: vi.fn().mockReturnValue(null),
getRootDir: vi.fn().mockReturnValue("/tmp/test-project"),
clearStaleExecutionStartBranchReferences: vi.fn().mockReturnValue([]),
...overrides,