@@ -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,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