@@ -11,6 +11,11 @@ import LoginPage from "../../src/pages/Login/LoginPage";
1111import Dashboard from "../../src/pages/Dashboard/Dashboard" ;
1212import TimetableBuilder from "../../src/pages/TimetableBuilder/TimetableBuilder" ;
1313import 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
1520test ( "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