Skip to content

Commit 412094d

Browse files
committed
Add some more frontend integration tests
1 parent ec0fcf8 commit 412094d

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed

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

Lines changed: 101 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,99 @@ 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").childNodes[5][2];
164+
fireEvent.click(favoriteButton);
165+
expect(favoriteButton).toBeChecked();
166+
});
167+
168+
test("typical flow for sharing and comparing timetables", () => {
169+
render(<App />, { wrapper: MemoryRouter });
170+
render(<LoginPage />, { wrapper: MemoryRouter });
171+
render(<SignupPage />, { wrapper: MemoryRouter });
172+
render(<Dashboard />, { wrapper: MemoryRouter });
173+
render(<Home />, { wrapper: MemoryRouter });
174+
render(<TimetableBuilder />, { wrapper: MemoryRouter });
175+
render(<TimetableCompareButton timetables={[]} />, { wrapper: MemoryRouter });
176+
render(<CompareTimetables />, { wrapper: MemoryRouter });
177+
render(<TimetableCompareItem timetable={undefined} timetableNumber={0} />, { wrapper: MemoryRouter });
178+
render(<TimetableCardShareKebabMenu refetchMyTimetables={function (): void {
179+
throw new Error("Function not implemented.");
180+
} } refetchSharedTimetables={function (): void {
181+
throw new Error("Function not implemented.");
182+
} } owner_id={""} calendar_id={0} />, { wrapper: MemoryRouter });
183+
render(<ShareDialog open={false} setOpen={function (): void {
184+
throw new Error("Function not implemented.");
185+
} } calendar_id={0} />, { wrapper: MemoryRouter });
186+
187+
// Creating a new timetable
188+
fireEvent.click(screen.getByText("Create New"));
189+
fireEvent.click(screen.getByText("Choose meeting sections manually"));
190+
fireEvent.click(screen.getByText("Search"));
191+
fireEvent.click(screen.getByText("ACMB10H3"));
192+
fireEvent.click(screen.getByText("ACMC01H3"));
193+
screen.getAllByText("No LEC Selected").forEach((element) => {
194+
fireEvent.click(element);
195+
fireEvent.click(screen.getByText("LEC 01"));
196+
});
197+
fireEvent.click(screen.getByText("Create Timetable"));
198+
fireEvent.change(screen.getByLabelText("Timetable Name"), {
199+
target: { value: "Shared Timetable" },
200+
});
201+
fireEvent.click(screen.getByText("Save"));
202+
203+
// Sharing the timetable
204+
fireEvent.click(screen.getByText("Shared Timetable").childNodes[3]);
205+
expect(screen.getByText("Share Timetable")).toBeInTheDocument();
206+
fireEvent.click(screen.getByText("Share Timetable"));
207+
fireEvent.change(screen.getByLabelText("Email"), {
208+
target: { value: "[email protected]"}
209+
});
210+
fireEvent.click(screen.getByText("Share"));
211+
expect(screen.getByText("Timetable shared successfully!")).toBeInTheDocument();
212+
fireEvent.click(screen.getByText("Close"));
213+
214+
// Comparing the user's timetable with a shared timetable
215+
fireEvent.click(screen.getByText("Compare"));
216+
fireEvent.click(screen.getByText("Timetable 1").childNodes[2]);
217+
fireEvent.click(screen.getByText("Mock"));
218+
fireEvent.click(screen.getByText("Timetable 2").childNodes[2]);
219+
fireEvent.click(screen.getByText("Shared Mock"));
220+
fireEvent.click(screen.getByText("Submit"));
221+
expect(screen.getByText("Comparing Timetables")).toBeInTheDocument();
222+
expect(screen.getByText("Mock")).toBeInTheDocument();
223+
expect(screen.getByText("Shared Mock")).toBeInTheDocument();
224+
225+
// Going back to the home page
226+
expect(screen.getByText("Back to Home")).toBeInTheDocument();
227+
fireEvent.click(screen.getByText("Back to Home"));
228+
expect(screen.getByText("My Timetables")).toBeInTheDocument();
229+
});

0 commit comments

Comments
 (0)