Skip to content

Commit 75441c3

Browse files
test(frontend): add tests for RenderSubmittedMessage component
1 parent 39d7349 commit 75441c3

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
import { render, screen } from "@testing-library/react";
2+
import "@testing-library/jest-dom";
3+
import { RenderSubmittedMessage } from "../../lib/components/RenderSubmittedMessage";
4+
import { RelayEnvironmentProvider, useFragment } from "react-relay";
5+
import { getRelayEnvironment } from "dashboard/src/RelayEnvironment";
6+
import { MemoryRouter } from "react-router-dom";
7+
import userEvent from "@testing-library/user-event";
8+
import { PayloadError } from "relay-runtime";
9+
import { RenderSubmittedMessageFragment$data } from "relay-workflows-lib/lib/components/__generated__/RenderSubmittedMessageFragment.graphql";
10+
11+
vi.mock("react-relay", async () => {
12+
const actual = await vi.importActual("react-relay");
13+
return {
14+
...actual,
15+
RelayEnvironmentProvider: actual.RelayEnvironmentProvider,
16+
useFragment: vi.fn(),
17+
};
18+
});
19+
20+
describe("RenderSubmittedMessage", () => {
21+
const environment = async () => {
22+
return await getRelayEnvironment();
23+
};
24+
const user = userEvent.setup();
25+
26+
it("renders a success", async () => {
27+
const mockSuccess: RenderSubmittedMessageFragment$data = {
28+
status: { __typename: "WorkflowSucceededStatus" },
29+
" $fragmentType": "RenderSubmittedMessageFragment",
30+
};
31+
32+
vi.mocked(
33+
useFragment as () => RenderSubmittedMessageFragment$data,
34+
).mockReturnValueOnce(mockSuccess);
35+
36+
render(
37+
<MemoryRouter
38+
initialEntries={["/templates/mock-workflow"]}
39+
initialIndex={0}
40+
>
41+
<RelayEnvironmentProvider environment={await environment()}>
42+
<RenderSubmittedMessage
43+
result={{ type: "success", message: "ba54321-1/mock-workflow" }}
44+
index={0}
45+
/>
46+
</RelayEnvironmentProvider>
47+
</MemoryRouter>,
48+
);
49+
50+
const link = screen.getByText("ba54321-1/mock-workflow");
51+
expect(screen.getByTestId("status-icon-succeeded")).toBeInTheDocument();
52+
expect(link).toBeInTheDocument();
53+
expect(link).toHaveAttribute("href", "/workflows/ba54321-1/mock-workflow");
54+
55+
vi.clearAllMocks();
56+
});
57+
58+
it("renders a network error", async () => {
59+
const mockError: Error = {
60+
name: "Mock Network Error",
61+
message: "This is a mock error message",
62+
};
63+
64+
render(
65+
<MemoryRouter
66+
initialEntries={["/templates/mock-workflow"]}
67+
initialIndex={0}
68+
>
69+
<RelayEnvironmentProvider environment={await environment()}>
70+
<RenderSubmittedMessage
71+
result={{ type: "networkError", error: mockError }}
72+
index={0}
73+
/>
74+
</RelayEnvironmentProvider>
75+
</MemoryRouter>,
76+
);
77+
78+
const accordionInfo = screen.getByText(/Submission error type/);
79+
const accordionDetails = screen.getByText(/Submission error message/);
80+
81+
expect(accordionInfo).toHaveTextContent(mockError.name);
82+
expect(accordionDetails).not.toBeVisible();
83+
84+
await user.click(accordionInfo);
85+
86+
expect(accordionDetails).toBeVisible();
87+
expect(accordionDetails).toHaveTextContent(mockError.message);
88+
});
89+
90+
it("renders a graphql error", async () => {
91+
const mockError: PayloadError = {
92+
message: "This is a graphql error",
93+
};
94+
95+
render(
96+
<MemoryRouter
97+
initialEntries={["/templates/mock-workflow"]}
98+
initialIndex={0}
99+
>
100+
<RelayEnvironmentProvider environment={await environment()}>
101+
<RenderSubmittedMessage
102+
result={{ type: "graphQLError", errors: [mockError] }}
103+
index={0}
104+
/>
105+
</RelayEnvironmentProvider>
106+
</MemoryRouter>,
107+
);
108+
109+
const accordionInfo = screen.getByText("Submission error type GraphQL");
110+
const accordionDetails = screen.getByText(/Error 0/);
111+
112+
expect(accordionInfo).toBeInTheDocument();
113+
expect(accordionDetails).not.toBeVisible();
114+
expect(accordionDetails).toHaveTextContent(mockError.message);
115+
116+
await user.click(accordionInfo);
117+
118+
expect(accordionDetails).toBeVisible();
119+
});
120+
});

0 commit comments

Comments
 (0)