Skip to content

Commit a961745

Browse files
test(frontend): add tests for BaseWorkflowRelay
1 parent 322513e commit a961745

File tree

2 files changed

+77
-5
lines changed

2 files changed

+77
-5
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import { render, screen } from "@testing-library/react";
2+
import "@testing-library/jest-dom";
3+
import BaseWorkflowRelay from "relay-workflows-lib/lib/components/BaseWorkflowRelay";
4+
import { workflowsListViewQueryResponse } from "dashboard/src/mocks/responses/workflows/WorkflowsListViewQueryResponse";
5+
import { BaseWorkflowRelayFragment$key } from "relay-workflows-lib/lib/components/__generated__/BaseWorkflowRelayFragment.graphql";
6+
import { RelayEnvironmentProvider } from "react-relay";
7+
import { getRelayEnvironment } from "dashboard/src/RelayEnvironment";
8+
import { beforeAll } from "vitest";
9+
import { server } from "relay-workflows-lib/tests/mocks/browser.ts";
10+
import userEvent from "@testing-library/user-event";
11+
12+
vi.mock("react-relay", async () => {
13+
const actual = await import("react-relay");
14+
15+
return {
16+
...actual,
17+
useFragment: vi.fn(() => workflowsListViewQueryResponse.workflows.nodes[0]),
18+
RelayEnvironmentProvider: actual.RelayEnvironmentProvider,
19+
};
20+
});
21+
22+
vi.mock("react-router-dom", () => ({
23+
useNavigate: vi.fn(),
24+
useLocation: vi.fn(),
25+
useParams: vi.fn(() => ({ workflowName: "conditional-steps" })),
26+
useSearchParams: vi.fn(() => [new URLSearchParams(""), vi.fn()]),
27+
NavLink: () => <div></div>,
28+
}));
29+
30+
describe("BaseWorkflowRelay", () => {
31+
const user = userEvent.setup();
32+
33+
beforeAll(() => {
34+
server.listen();
35+
});
36+
beforeEach(async () => {
37+
const mockFragmentRef = {} as BaseWorkflowRelayFragment$key;
38+
const environment = await getRelayEnvironment();
39+
render(
40+
<RelayEnvironmentProvider environment={environment}>
41+
<BaseWorkflowRelay fragmentRef={mockFragmentRef} />
42+
</RelayEnvironmentProvider>,
43+
);
44+
});
45+
afterAll(() => {
46+
server.close();
47+
});
48+
49+
it("renders a workflow card wtih name and creator", async () => {
50+
expect(
51+
await screen.findByText("conditional-steps-first"),
52+
).toBeInTheDocument();
53+
expect(screen.getByText("Creator: abc12345")).toBeInTheDocument();
54+
});
55+
56+
it("should display the flow box when clicked", async () => {
57+
console.log = vi.fn();
58+
const accordionButton = await screen.findByText("conditional-steps-first");
59+
expect(accordionButton).toBeInTheDocument();
60+
expect(screen.queryByText("even")).not.toBeVisible();
61+
// expect(screen.queryByText("even")).not.toBeInTheDocument();
62+
63+
await user.click(accordionButton);
64+
expect(console.log).toHaveBeenCalledWith("Expansion registered");
65+
66+
expect(await screen.findByText("even")).toBeVisible();
67+
// expect(screen.queryByText("even")).toBeInTheDocument();
68+
});
69+
});

frontend/workflows-lib/lib/components/workflow/WorkflowAccordion.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,15 @@ const WorkflowAccordion: React.FC<WorkflowProps> = ({
4040
onChange,
4141
retriggerComponent,
4242
}) => {
43+
const handleExpand = () => {
44+
console.log("Expansion registered");
45+
if (onChange) {
46+
onChange();
47+
}
48+
};
49+
4350
return (
44-
<Accordion
45-
key={workflow.name}
46-
defaultExpanded={expanded}
47-
onChange={onChange}
48-
>
51+
<Accordion key={workflow.name} expanded={expanded} onChange={handleExpand}>
4952
<AccordionSummary expandIcon={<ArrowDropDownIcon />}>
5053
<Box sx={{ display: "flex", flexBasis: 0, flexGrow: 5, gap: 2 }}>
5154
{getWorkflowStatusIcon(workflow.status)}

0 commit comments

Comments
 (0)