Test/get availability from schedule unit test (#1951)
* Fix typo in SetTimesModal * Remove db dependency to run unit tests * Add unit test for getAvailabilityFromSchedule
This commit is contained in:
		
							parent
							
								
									3bca9687d0
								
							
						
					
					
						commit
						d9d95ba17c
					
				
					 3 changed files with 77 additions and 4 deletions
				
			
		|  | @ -59,8 +59,8 @@ export default function SetTimesModal(props: SetTimesModalProps) { | |||
|       let endMinute = parseInt(endMinsRef.current.value); | ||||
| 
 | ||||
|       //convert to dayjs object
 | ||||
|       const startTime = dayjs(`${startHour}-${startMinute}`, "hh:mm"); | ||||
|       const endTime = dayjs(`${endHour}-${endMinute}`, "hh:mm"); | ||||
|       const startTime = dayjs(`${startHour}:${startMinute}`, "hh:mm"); | ||||
|       const endTime = dayjs(`${endHour}:${endMinute}`, "hh:mm"); | ||||
| 
 | ||||
|       //compute minimin and maximum allowed
 | ||||
|       const maximumStartTime = endTime.subtract(step, "minute"); | ||||
|  |  | |||
							
								
								
									
										73
									
								
								apps/web/test/lib/getAvailabilityFromSchedule.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								apps/web/test/lib/getAvailabilityFromSchedule.test.ts
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,73 @@ | |||
| import { expect, it } from "@jest/globals"; | ||||
| import dayjs from "dayjs"; | ||||
| import customParseFormat from "dayjs/plugin/customParseFormat"; | ||||
| import MockDate from "mockdate"; | ||||
| 
 | ||||
| import { Availability } from "@calcom/prisma/client"; | ||||
| 
 | ||||
| import { getAvailabilityFromSchedule } from "@lib/availability"; | ||||
| 
 | ||||
| dayjs.extend(customParseFormat); | ||||
| MockDate.set("2021-06-20T11:59:59Z"); | ||||
| 
 | ||||
| //parse "hh:mm-hh:mm" into <Availability> object
 | ||||
| const parseWorkingHours = (workingHours: string) => { | ||||
|   const times = workingHours.split("-").map((time) => dayjs(time, "hh:mm").toDate()); | ||||
|   return { start: times[0], end: times[1] }; | ||||
| }; | ||||
| const p = parseWorkingHours; | ||||
| 
 | ||||
| // mocked working hours
 | ||||
| const fulltimeWH = p("09:00-17:00"); | ||||
| const morningWH = p("09:00-12:00"); | ||||
| const afternoonWH = p("13:00-17:00"); | ||||
| 
 | ||||
| it("should return an empty availability array when received an empty schedule", async () => { | ||||
|   const schedule = [[]]; | ||||
|   expect(getAvailabilityFromSchedule(schedule)).toStrictEqual([]); | ||||
| }); | ||||
| 
 | ||||
| it("should return availability for all workable days from 9:00 to 17:00", async () => { | ||||
|   const schedule = [[], [fulltimeWH], [fulltimeWH], [fulltimeWH], [fulltimeWH], [fulltimeWH], []]; | ||||
|   const expected = [ | ||||
|     { | ||||
|       days: [1, 2, 3, 4, 5], | ||||
|       startTime: fulltimeWH.start, | ||||
|       endTime: fulltimeWH.end, | ||||
|     }, | ||||
|   ] as Availability[]; | ||||
| 
 | ||||
|   expect(getAvailabilityFromSchedule(schedule)).toStrictEqual(expected); | ||||
| }); | ||||
| 
 | ||||
| it("should return the available days grouped by the available time slots", async () => { | ||||
|   const schedule = [ | ||||
|     [], | ||||
|     [afternoonWH], | ||||
|     [afternoonWH], | ||||
|     [morningWH, afternoonWH], | ||||
|     [fulltimeWH], | ||||
|     [morningWH], | ||||
|     [], | ||||
|   ]; | ||||
|   const expected = [ | ||||
|     { | ||||
|       days: [1, 2, 3], | ||||
|       startTime: afternoonWH.start, | ||||
|       endTime: afternoonWH.end, | ||||
|     }, | ||||
|     { | ||||
|       days: [3, 5], | ||||
|       startTime: morningWH.start, | ||||
|       endTime: morningWH.end, | ||||
|     }, | ||||
| 
 | ||||
|     { | ||||
|       days: [4], | ||||
|       startTime: fulltimeWH.start, | ||||
|       endTime: fulltimeWH.end, | ||||
|     }, | ||||
|   ] as Availability[]; | ||||
| 
 | ||||
|   expect(getAvailabilityFromSchedule(schedule)).toStrictEqual(expected); | ||||
| }); | ||||
|  | @ -81,11 +81,11 @@ | |||
|     }, | ||||
|     "start": {}, | ||||
|     "test": { | ||||
|       "dependsOn": ["@calcom/web#build", "@calcom/prisma#db-reset"] | ||||
|       "dependsOn": [] | ||||
|     }, | ||||
|     "test-e2e": { | ||||
|       "cache": false, | ||||
|       "dependsOn": ["^test"], | ||||
|       "dependsOn": ["^test", "@calcom/web#build", "@calcom/prisma#db-reset"], | ||||
|       "outputs": ["playwright", "test-results"] | ||||
|     }, | ||||
|     "type-check": { | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Demian Caldelas
						Demian Caldelas