// @vitest-environment jsdom
import { cleanup, fireEvent, render, screen } from "@testing-library/preact"
import { afterEach, describe, expect, it, vi } from "vitest"
import { file } from "../../test/fixtures"
import { FileList } from "./FileList"
afterEach(cleanup)
describe.each(["list", "grid"] as const)("%s file view", (view) => {
it("selects the clicked record and opens the same folder in either presentation", () => {
const folder = file({ id: "folder", name: "Documents", kind: "directory" })
const onSelect = vi.fn()
const onOpen = vi.fn()
render(
,
)
fireEvent.click(screen.getByText("Documents"))
expect(onSelect).toHaveBeenCalledWith("folder", true, false)
fireEvent.dblClick(screen.getByText("Documents"))
expect(onOpen).toHaveBeenCalledWith(folder)
})
it("preserves the original filename presentation and selection styling", () => {
const entry = file({ name: "report.final.pdf" })
const props = { files: [entry], view, pending: false, onSelect: vi.fn(), onOpen: vi.fn() }
const { rerender } = render()
expect(screen.getByText(view === "grid" ? "report" : "report.final.pdf")).toBeTruthy()
rerender()
expect(
screen
.getByText(view === "grid" ? "report" : "report.final.pdf")
.closest(view === "grid" ? "span" : "tr")?.className,
).toContain("bg-orange-500")
})
it("opens the record on double-click without changing the selected record", () => {
const entry = file()
const onSelect = vi.fn()
const onOpen = vi.fn()
render(
,
)
fireEvent.dblClick(screen.getByText(view === "grid" ? entry.name.split(".")[0] : entry.name))
expect(onOpen).toHaveBeenCalledWith(entry)
expect(onSelect).not.toHaveBeenCalled()
})
})