feat(FN-4552): complete Step 2 — harden openFiles workspace guards

Fusion-Task-Id: FN-4552
Fusion-Task-Lineage: dad48f2c-25a8-4fca-8f00-16307936621c
This commit is contained in:
Fusion
2026-05-14 20:54:08 -07:00
committed by gsxdsm
parent b6c346bb7b
commit 002d148c78
2 changed files with 27 additions and 3 deletions

View File

@@ -229,6 +229,24 @@ describe("useModalManager", () => {
expect(result.current.fileBrowserInitialFile).toBeNull(); expect(result.current.fileBrowserInitialFile).toBeNull();
}); });
it("ignores non-string workspace values in openFiles and keeps existing workspace", () => {
const { result } = renderHook(() =>
useModalManager({ projectId: "proj_1", planningSessions: [] }),
);
act(() => {
result.current.openFiles("FN-123", "packages/dashboard/app/App.tsx");
});
act(() => {
result.current.openFiles({ type: "click" } as unknown as string, { path: "bad" } as unknown as string);
});
expect(result.current.fileBrowserWorkspace).toBe("FN-123");
expect(result.current.fileBrowserInitialFile).toBeNull();
expect(result.current.filesOpen).toBe(true);
});
it("accepts plain Task object in openDetailWithChangesTab", () => { it("accepts plain Task object in openDetailWithChangesTab", () => {
const task = createTask("FN-789"); const task = createTask("FN-789");
const { result } = renderHook(() => const { result } = renderHook(() =>

View File

@@ -290,10 +290,14 @@ export function useModalManager(options: UseModalManagerOptions): ModalManager {
}, []); }, []);
const openFiles = useCallback((workspace?: string, initialFile?: string | null) => { const openFiles = useCallback((workspace?: string, initialFile?: string | null) => {
if (workspace) { if (typeof workspace === "string" && workspace) {
setFileBrowserWorkspace(workspace); setFileBrowserWorkspace(workspace);
} }
setFileBrowserInitialFile(initialFile ?? null); if (typeof initialFile === "string" || initialFile === null) {
setFileBrowserInitialFile(initialFile);
} else {
setFileBrowserInitialFile(null);
}
setFilesOpen(true); setFilesOpen(true);
}, []); }, []);
const closeFiles = useCallback(() => { const closeFiles = useCallback(() => {
@@ -303,7 +307,9 @@ export function useModalManager(options: UseModalManagerOptions): ModalManager {
const openTodos = useCallback(() => setTodosOpen(true), []); const openTodos = useCallback(() => setTodosOpen(true), []);
const closeTodos = useCallback(() => setTodosOpen(false), []); const closeTodos = useCallback(() => setTodosOpen(false), []);
const setFileWorkspace = useCallback((workspace: string) => { const setFileWorkspace = useCallback((workspace: string) => {
setFileBrowserWorkspace(workspace); if (typeof workspace === "string" && workspace) {
setFileBrowserWorkspace(workspace);
}
}, []); }, []);
const openActivityLog = useCallback(() => setActivityLogOpen(true), []); const openActivityLog = useCallback(() => setActivityLogOpen(true), []);