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();
});
});