| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 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<string>()
- 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([])
- })
- })
|