diff --git a/src/components/__tests__/QuickstartInitialView.test.tsx b/src/components/__tests__/QuickstartInitialView.test.tsx index de731ea4..4f421a76 100644 --- a/src/components/__tests__/QuickstartInitialView.test.tsx +++ b/src/components/__tests__/QuickstartInitialView.test.tsx @@ -42,7 +42,7 @@ describe("QuickstartInitialView", () => { ); expect( - screen.getByText(/node based workflow editor for AI image generation/i) + screen.getByText(/node based workflow editor for generative AI pipelines/i) ).toBeInTheDocument(); }); diff --git a/src/components/__tests__/WelcomeModal.test.tsx b/src/components/__tests__/WelcomeModal.test.tsx index 533740ea..5dc4d60a 100644 --- a/src/components/__tests__/WelcomeModal.test.tsx +++ b/src/components/__tests__/WelcomeModal.test.tsx @@ -7,6 +7,29 @@ import { WorkflowFile } from "@/store/workflowStore"; const mockFetch = vi.fn(); global.fetch = mockFetch; +// Mock WorkflowBrowserView (Load workflow now navigates to this view) +vi.mock("@/components/quickstart/WorkflowBrowserView", () => ({ + WorkflowBrowserView: ({ + onBack, + onWorkflowLoaded, + onClose, + }: { + onBack: () => void; + onWorkflowLoaded: (w: WorkflowFile, p: string) => void; + onClose: () => void; + }) => ( +
+ + + +
+ ), +})); + // Mock templates vi.mock("@/lib/quickstart/templates", () => { const template = { @@ -184,8 +207,8 @@ describe("WelcomeModal", () => { }); }); - describe("File Loading via Directory Picker", () => { - it("should call browse-directory API when 'Load workflow' is clicked", () => { + describe("Load Workflow via Browser View", () => { + it("should show WorkflowBrowserView when 'Load workflow' is clicked", () => { render( { fireEvent.click(screen.getByText("Load workflow")); - expect(mockFetch).toHaveBeenCalledWith("/api/browse-directory"); + expect(screen.getByTestId("workflow-browser-view")).toBeInTheDocument(); }); - it("should not call onWorkflowGenerated when directory picker is cancelled", async () => { - mockFetch.mockImplementation((url: string) => { - if (url === "/api/browse-directory") { - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ success: true, cancelled: true }), - }); - } - if (url === "/api/community-workflows") { - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ success: true, workflows: [] }), - }); - } - return Promise.resolve({ ok: true, json: () => Promise.resolve({ success: true }) }); - }); - + it("should navigate back to initial view from browse view", () => { render( { ); fireEvent.click(screen.getByText("Load workflow")); + expect(screen.getByTestId("workflow-browser-view")).toBeInTheDocument(); - await waitFor(() => { - expect(mockFetch).toHaveBeenCalledWith("/api/browse-directory"); - }); - expect(mockOnWorkflowGenerated).not.toHaveBeenCalled(); + fireEvent.click(screen.getByText("Back")); + expect(screen.getByText("Node Banana")).toBeInTheDocument(); }); - it("should call onWorkflowGenerated with workflow and directory path on success", async () => { - const mockWorkflow = { version: 1, nodes: [], edges: [], name: "Test" }; - - mockFetch.mockImplementation((url: string) => { - if (url === "/api/browse-directory") { - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ success: true, path: "/path/to/project" }), - }); - } - if (typeof url === "string" && url.includes("/api/workflow?")) { - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ success: true, workflow: mockWorkflow, filename: "Test" }), - }); - } - if (url === "/api/community-workflows") { - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ success: true, workflows: [] }), - }); - } - return Promise.resolve({ ok: true, json: () => Promise.resolve({ success: true }) }); - }); - + it("should call onWorkflowGenerated when a workflow is loaded from browser", () => { render( { ); fireEvent.click(screen.getByText("Load workflow")); + fireEvent.click(screen.getByTestId("load-workflow-btn")); - await waitFor(() => { - expect(mockOnWorkflowGenerated).toHaveBeenCalledWith(mockWorkflow, "/path/to/project"); - }); - }); - - it("should show alert when no workflow found in directory", async () => { - const alertSpy = vi.spyOn(window, "alert").mockImplementation(() => {}); - - mockFetch.mockImplementation((url: string) => { - if (url === "/api/browse-directory") { - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ success: true, path: "/empty/dir" }), - }); - } - if (typeof url === "string" && url.includes("/api/workflow?")) { - return Promise.resolve({ - ok: false, - json: () => Promise.resolve({ success: false, error: "No workflow file found in directory" }), - }); - } - if (url === "/api/community-workflows") { - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ success: true, workflows: [] }), - }); - } - return Promise.resolve({ ok: true, json: () => Promise.resolve({ success: true }) }); - }); - - render( - + expect(mockOnWorkflowGenerated).toHaveBeenCalledWith( + expect.objectContaining({ version: 1, nodes: [], edges: [] }), + "/test/dir" ); - - fireEvent.click(screen.getByText("Load workflow")); - - await waitFor(() => { - expect(alertSpy).toHaveBeenCalledWith("No workflow file found in directory"); - }); - expect(mockOnWorkflowGenerated).not.toHaveBeenCalled(); }); });