Skip to content

Commit 27b05dc

Browse files
authored
Ax/scrum 182 Add more frontend integration tests (#154)
Co-authored-by: Austin-X <[email protected]>
1 parent d09af29 commit 27b05dc

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed

course-matrix/frontend/__tests__/integration-tests/integration-tests.test.tsx

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ import LoginPage from "../../src/pages/Login/LoginPage";
1111
import Dashboard from "../../src/pages/Dashboard/Dashboard";
1212
import TimetableBuilder from "../../src/pages/TimetableBuilder/TimetableBuilder";
1313
import Home from "../../src/pages/Home/Home";
14+
import { TimetableCompareButton } from "../../src/pages/Home/TimetableCompareButton";
15+
import { CompareTimetables } from "../../src/pages/Compare/CompareTimetables";
16+
import TimetableCompareItem from "../../src/pages/Home/TimetableCompareItem";
17+
import TimetableCardShareKebabMenu from "../../src/pages/Home/TimetableCardShareKebabMenu";
18+
import ShareDialog from "../../src/pages/TimetableBuilder/ShareDialog";
1419

1520
test("typical flow for creating an account and logging in", () => {
1621
render(<App />, { wrapper: MemoryRouter });
@@ -126,3 +131,119 @@ test("typical flow for creating a new timetable, adding courses, adding restrict
126131
expect(screen.queryByText("ACMD01H3")).toBeNull();
127132
expect(screen.queryByText("Tuesday")).toBeNull();
128133
});
134+
135+
test("typical flow for generating a timetable via the Generate Button and then favoriting it on the Home Page", () => {
136+
render(<App />, { wrapper: MemoryRouter });
137+
render(<LoginPage />, { wrapper: MemoryRouter });
138+
render(<SignupPage />, { wrapper: MemoryRouter });
139+
render(<Dashboard />, { wrapper: MemoryRouter });
140+
render(<Home />, { wrapper: MemoryRouter });
141+
render(<TimetableBuilder />, { wrapper: MemoryRouter });
142+
143+
// Creating a new timetable
144+
fireEvent.click(screen.getByText("Create New"));
145+
fireEvent.click(screen.getByText("Search..."));
146+
fireEvent.click(screen.getByText("ACMB10H3"));
147+
fireEvent.click(screen.getByText("ACMC01H3"));
148+
149+
// Generating a timetable
150+
fireEvent.click(screen.getByText("Generate Timetable"));
151+
expect(screen.getByText("Generated Timetables")).toBeInTheDocument();
152+
fireEvent.click(screen.getByText("Save Timetable"));
153+
fireEvent.change(screen.getByLabelText("Timetable Name"), {
154+
target: { value: "Generated Timetable" },
155+
});
156+
fireEvent.click(screen.getByText("Save"));
157+
158+
// Check if user is redirected to home page and timetable is saved
159+
expect(screen.getByText("My Timetables")).toBeInTheDocument();
160+
expect(screen.getByText("Generated Timetable")).toBeInTheDocument();
161+
162+
// Favoriting the timetable
163+
const favoriteButton = screen.getByText("Generated Timetable")
164+
.childNodes[5][2];
165+
fireEvent.click(favoriteButton);
166+
expect(favoriteButton).toBeChecked();
167+
});
168+
169+
test("typical flow for sharing and comparing timetables", () => {
170+
render(<App />, { wrapper: MemoryRouter });
171+
render(<LoginPage />, { wrapper: MemoryRouter });
172+
render(<SignupPage />, { wrapper: MemoryRouter });
173+
render(<Dashboard />, { wrapper: MemoryRouter });
174+
render(<Home />, { wrapper: MemoryRouter });
175+
render(<TimetableBuilder />, { wrapper: MemoryRouter });
176+
render(<TimetableCompareButton timetables={[]} />, { wrapper: MemoryRouter });
177+
render(<CompareTimetables />, { wrapper: MemoryRouter });
178+
render(<TimetableCompareItem timetable={undefined} timetableNumber={0} />, {
179+
wrapper: MemoryRouter,
180+
});
181+
render(
182+
<TimetableCardShareKebabMenu
183+
refetchMyTimetables={function (): void {
184+
throw new Error("Function not implemented.");
185+
}}
186+
refetchSharedTimetables={function (): void {
187+
throw new Error("Function not implemented.");
188+
}}
189+
owner_id={""}
190+
calendar_id={0}
191+
/>,
192+
{ wrapper: MemoryRouter },
193+
);
194+
render(
195+
<ShareDialog
196+
open={false}
197+
setOpen={function (): void {
198+
throw new Error("Function not implemented.");
199+
}}
200+
calendar_id={0}
201+
/>,
202+
{ wrapper: MemoryRouter },
203+
);
204+
205+
// Creating a new timetable
206+
fireEvent.click(screen.getByText("Create New"));
207+
fireEvent.click(screen.getByText("Choose meeting sections manually"));
208+
fireEvent.click(screen.getByText("Search"));
209+
fireEvent.click(screen.getByText("ACMB10H3"));
210+
fireEvent.click(screen.getByText("ACMC01H3"));
211+
screen.getAllByText("No LEC Selected").forEach((element) => {
212+
fireEvent.click(element);
213+
fireEvent.click(screen.getByText("LEC 01"));
214+
});
215+
fireEvent.click(screen.getByText("Create Timetable"));
216+
fireEvent.change(screen.getByLabelText("Timetable Name"), {
217+
target: { value: "Shared Timetable" },
218+
});
219+
fireEvent.click(screen.getByText("Save"));
220+
221+
// Sharing the timetable
222+
fireEvent.click(screen.getByText("Shared Timetable").childNodes[3]);
223+
expect(screen.getByText("Share Timetable")).toBeInTheDocument();
224+
fireEvent.click(screen.getByText("Share Timetable"));
225+
fireEvent.change(screen.getByLabelText("Email"), {
226+
target: { value: "[email protected]" },
227+
});
228+
fireEvent.click(screen.getByText("Share"));
229+
expect(
230+
screen.getByText("Timetable shared successfully!"),
231+
).toBeInTheDocument();
232+
fireEvent.click(screen.getByText("Close"));
233+
234+
// Comparing the user's timetable with a shared timetable
235+
fireEvent.click(screen.getByText("Compare"));
236+
fireEvent.click(screen.getByText("Timetable 1").childNodes[2]);
237+
fireEvent.click(screen.getByText("Mock"));
238+
fireEvent.click(screen.getByText("Timetable 2").childNodes[2]);
239+
fireEvent.click(screen.getByText("Shared Mock"));
240+
fireEvent.click(screen.getByText("Submit"));
241+
expect(screen.getByText("Comparing Timetables")).toBeInTheDocument();
242+
expect(screen.getByText("Mock")).toBeInTheDocument();
243+
expect(screen.getByText("Shared Mock")).toBeInTheDocument();
244+
245+
// Going back to the home page
246+
expect(screen.getByText("Back to Home")).toBeInTheDocument();
247+
fireEvent.click(screen.getByText("Back to Home"));
248+
expect(screen.getByText("My Timetables")).toBeInTheDocument();
249+
});

0 commit comments

Comments
 (0)