import { beforeAll, describe, expect, mock, test } from "bun:test" let shouldListRoot: typeof import("./file-tree").shouldListRoot let shouldListExpanded: typeof import("./file-tree").shouldListExpanded let dirsToExpand: typeof import("./file-tree").dirsToExpand beforeAll(async () => { mock.module("@solidjs/router", () => ({ useNavigate: () => () => undefined, useParams: () => ({}), })) mock.module("@/context/file", () => ({ useFile: () => ({ tree: { state: () => undefined, list: () => Promise.resolve(), children: () => [], expand: () => {}, collapse: () => {}, }, }), })) mock.module("@opencode-ai/ui/collapsible", () => ({ Collapsible: { Trigger: (props: { children?: unknown }) => props.children, Content: (props: { children?: unknown }) => props.children, }, })) mock.module("@opencode-ai/ui/file-icon", () => ({ FileIcon: () => null })) mock.module("@opencode-ai/ui/icon", () => ({ Icon: () => null })) mock.module("@opencode-ai/ui/tooltip", () => ({ Tooltip: (props: { children?: unknown }) => props.children })) const mod = await import("./file-tree") shouldListRoot = mod.shouldListRoot shouldListExpanded = mod.shouldListExpanded dirsToExpand = mod.dirsToExpand }) describe("file tree fetch discipline", () => { test("root lists on mount unless already loaded or loading", () => { expect(shouldListRoot({ level: 0 })).toBe(true) expect(shouldListRoot({ level: 0, dir: { loaded: true } })).toBe(false) expect(shouldListRoot({ level: 0, dir: { loading: true } })).toBe(false) expect(shouldListRoot({ level: 1 })).toBe(false) }) test("nested dirs list only when expanded and stale", () => { expect(shouldListExpanded({ level: 1 })).toBe(false) expect(shouldListExpanded({ level: 1, dir: { expanded: false } })).toBe(false) expect(shouldListExpanded({ level: 1, dir: { expanded: true } })).toBe(true) expect(shouldListExpanded({ level: 1, dir: { expanded: true, loaded: true } })).toBe(false) expect(shouldListExpanded({ level: 1, dir: { expanded: true, loading: true } })).toBe(false) expect(shouldListExpanded({ level: 0, dir: { expanded: true } })).toBe(false) }) test("allowed auto-expand picks only collapsed dirs", () => { const expanded = new Set() const filter = { dirs: new Set(["src", "src/components"]) } const first = dirsToExpand({ level: 0, filter, expanded: (dir) => expanded.has(dir), }) expect(first).toEqual(["src", "src/components"]) for (const dir of first) expanded.add(dir) const second = dirsToExpand({ level: 0, filter, expanded: (dir) => expanded.has(dir), }) expect(second).toEqual([]) expect(dirsToExpand({ level: 1, filter, expanded: () => false })).toEqual([]) }) })