From 64b4508738e3d626e986109401082329958ba917 Mon Sep 17 00:00:00 2001 From: CasLinden Date: Fri, 8 May 2026 16:15:30 +0900 Subject: [PATCH 1/2] fix(test): dir picker test reconsile dopple fix merge --- .../widget/controls/directory-picker.test.tsx | 33 ++----------------- 1 file changed, 2 insertions(+), 31 deletions(-) diff --git a/apps/native/src/components/widget/controls/directory-picker.test.tsx b/apps/native/src/components/widget/controls/directory-picker.test.tsx index fb429645..22e75810 100644 --- a/apps/native/src/components/widget/controls/directory-picker.test.tsx +++ b/apps/native/src/components/widget/controls/directory-picker.test.tsx @@ -10,33 +10,11 @@ import { DirectoryPicker } from "@/components/widget/controls/directory-picker"; // --------------------------------------------------------------------------- const mockPickDir = vi.fn(); - -vi.mock("@/hooks/use-darwin-config", () => ({ - useDarwinConfig: () => ({ - pickDir: mockPickDir, - setDir: async (p: string) => { - await mockSetDir(p); - useWidgetStore.getState().setConfigDir(p); - useWidgetStore.getState().setHost(""); - try { - await mockSetHostAttr(""); - } catch {} - try { - const hosts = await mockListHosts(); - useWidgetStore.getState().setHosts(hosts); - } catch { - useWidgetStore.getState().setHosts([]); - } - return { dir: p, evolveState: null, hosts: null }; - }, - }), -})); - const mockNormalize = vi.fn<(p: string) => Promise>(); const mockExists = vi.fn<(p: string) => Promise>(); -const mockSetDir = vi.fn<(p: string) => Promise>(); +const mockSetDir = + vi.fn<(p: string) => Promise<{ dir: string; evolveState: never; hosts: string[] | null }>>(); const mockSetHostAttr = vi.fn<(h: string) => Promise>(); -const mockListHosts = vi.fn<() => Promise>(); const mockFlakeExistsAt = vi.fn<(p: string) => Promise>(); const mockFlakeExists = vi.fn<() => Promise>(); @@ -52,10 +30,6 @@ vi.mock("@/tauri-api", () => ({ setHostAttr: (h: string) => mockSetHostAttr(h), }, flake: { - setHostAttr: (h: string) => mockSetHostAttr(h), - }, - flake: { - listHosts: () => mockListHosts(), existsAt: (p: string) => mockFlakeExistsAt(p), exists: () => mockFlakeExists(), }, @@ -95,7 +69,6 @@ function resetMocks() { mockFlakeExistsAt.mockResolvedValue(true); mockFlakeExists.mockResolvedValue(true); mockPickDir.mockResolvedValue(null); - mockListHosts.mockResolvedValue([]); } /** Type into the input then fire a blur event. Mirrors `userEvent.type` + tab-out @@ -161,7 +134,6 @@ describe("", () => { evolveState: {} as never, hosts: ["mbp", "workbook"], }); - mockListHosts.mockResolvedValue(["mbp", "workbook"]); useWidgetStore.getState().setHost("old-host"); render(); @@ -178,7 +150,6 @@ describe("", () => { expect(mockExists).toHaveBeenCalledWith("/Users/me/.darwin"); expect(mockSetDir).toHaveBeenCalledWith("/Users/me/.darwin"); expect(mockSetHostAttr).toHaveBeenCalledWith(""); - expect(mockListHosts).toHaveBeenCalledTimes(1); const s = useWidgetStore.getState(); expect(s.configDir).toBe("/Users/me/.darwin"); From a3b8ca4eaaef5fa9362161b5ed40c0819f150a3b Mon Sep 17 00:00:00 2001 From: CasLinden Date: Tue, 12 May 2026 18:15:10 +0900 Subject: [PATCH 2/2] fix(test): restore directory-picker.test.tsx to pre-merge cleanup --- .../widget/controls/directory-picker.test.tsx | 46 ------------------- 1 file changed, 46 deletions(-) diff --git a/apps/native/src/components/widget/controls/directory-picker.test.tsx b/apps/native/src/components/widget/controls/directory-picker.test.tsx index d975b278..22e75810 100644 --- a/apps/native/src/components/widget/controls/directory-picker.test.tsx +++ b/apps/native/src/components/widget/controls/directory-picker.test.tsx @@ -3,7 +3,6 @@ import "@testing-library/jest-dom"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { useWidgetStore } from "@/stores/widget-store"; -import type { SetDirResult } from "@/types/shared"; import { DirectoryPicker } from "@/components/widget/controls/directory-picker"; // --------------------------------------------------------------------------- @@ -51,7 +50,6 @@ function resetStore() { function resetMocks() { mockPickDir.mockReset(); - mockPrepareNewDir.mockReset(); mockNormalize.mockReset(); mockExists.mockReset(); mockSetDir.mockReset(); @@ -61,7 +59,6 @@ function resetMocks() { // Sensible "happy-path" defaults; individual tests override as needed. mockNormalize.mockImplementation(async (p) => p.trim()); - mockPrepareNewDir.mockResolvedValue(); mockExists.mockResolvedValue(true); mockSetDir.mockImplementation(async (p) => ({ dir: p, @@ -216,49 +213,6 @@ describe("", () => { expect(mockPickDir).toHaveBeenCalledTimes(1); }); - it("in setup flow, starts with New/Existing choices and creates a named directory", async () => { - const onConfigured = vi.fn(); - mockNormalize.mockImplementation(async (p) => p === "~/.nixmac" ? "/Users/me/.nixmac" : p.trim()); - - render(); - - expect(screen.getByRole("tab", { name: "New" })).toBeInTheDocument(); - expect(screen.getByRole("tab", { name: "Existing" })).toBeInTheDocument(); - - const nameInput = screen.getByLabelText("Config directory name"); - fireEvent.change(nameInput, { target: { value: ".nixmac" } }); - fireEvent.click(screen.getByRole("button", { name: /create/i })); - - await waitFor(() => expect(mockPrepareNewDir).toHaveBeenCalledWith("/Users/me/.nixmac")); - expect(useWidgetStore.getState().configDir).toBe("/Users/me/.nixmac"); - expect(onConfigured).toHaveBeenCalledTimes(1); - }); - - it("in setup flow, rejects path-like names for new directories", async () => { - render(); - - fireEvent.change(screen.getByLabelText("Config directory name"), { - target: { value: "configs/darwin" }, - }); - fireEvent.click(screen.getByRole("button", { name: /create/i })); - - expect(await screen.findByText("Use a directory name, not a path")).toBeInTheDocument(); - expect(mockPrepareNewDir).not.toHaveBeenCalled(); - }); - - it("in setup flow, Existing keeps the browse-based selection path", async () => { - const onConfigured = vi.fn(); - mockPickDir.mockResolvedValue({ dir: "/Users/me/config", evolveState: null, hosts: ["mbp"] }); - - render(); - fireEvent.click(screen.getByRole("tab", { name: "Existing" })); - fireEvent.click(await screen.findByRole("button", { name: /browse/i })); - - await waitFor(() => expect(mockPickDir).toHaveBeenCalledTimes(1)); - expect(useWidgetStore.getState().configDir).toBe("/Users/me/config"); - expect(onConfigured).toHaveBeenCalledTimes(1); - }); - it("clears the validation message when configDir changes externally to a valid dir with a flake", async () => { mockFlakeExistsAt.mockResolvedValue(true);