Files
web/packages/design-system/lib/components/OpeningHours/openingHours.test.ts
Rasmus Langvad d0546926a9 Merged in fix/3697-prettier-configs (pull request #3396)
fix(SW-3691): Setup one prettier config for whole repo

* Setup prettierrc in root and remove other configs


Approved-by: Joakim Jäderberg
Approved-by: Linus Flood
2026-01-07 12:45:50 +00:00

394 lines
9.6 KiB
TypeScript

import { describe, expect, it } from "vitest"
import { getGroupedOpeningHours } from "./utils"
import type { IntlShape } from "react-intl"
import { OpeningHours } from "./openingHoursTypes"
// Mock IntlShape for testing
const mockIntl = {
formatMessage: ({ defaultMessage }: { defaultMessage: string }) => {
const messages: Record<string, string> = {
Monday: "Monday",
Tuesday: "Tuesday",
Wednesday: "Wednesday",
Thursday: "Thursday",
Friday: "Friday",
Saturday: "Saturday",
Sunday: "Sunday",
Closed: "Closed",
"Always open": "Always open",
}
return messages[defaultMessage] || defaultMessage
},
} as IntlShape
describe("getGroupedOpeningHours", () => {
it("should group all days as closed", () => {
const allDaysClosed: OpeningHours = {
isActive: true,
nameEnglish: "Opening hours",
monday: {
isClosed: true,
alwaysOpen: false,
openingTime: "",
closingTime: "",
sortOrder: 1,
},
tuesday: {
isClosed: true,
alwaysOpen: false,
openingTime: "",
closingTime: "",
sortOrder: 2,
},
wednesday: {
isClosed: true,
alwaysOpen: false,
openingTime: "",
closingTime: "",
sortOrder: 3,
},
thursday: {
isClosed: true,
alwaysOpen: false,
openingTime: "",
closingTime: "",
sortOrder: 4,
},
friday: {
isClosed: true,
alwaysOpen: false,
openingTime: "",
closingTime: "",
sortOrder: 5,
},
saturday: {
isClosed: true,
alwaysOpen: false,
openingTime: "",
closingTime: "",
sortOrder: 6,
},
sunday: {
isClosed: true,
alwaysOpen: false,
openingTime: "",
closingTime: "",
sortOrder: 7,
},
}
const result = getGroupedOpeningHours(allDaysClosed, mockIntl)
expect(result).toEqual(["Monday-Sunday: Closed"])
})
it("should group all days with same opening hours", () => {
const allDaysSameHours: OpeningHours = {
isActive: true,
nameEnglish: "Opening hours",
monday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 1,
},
tuesday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 2,
},
wednesday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 3,
},
thursday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 4,
},
friday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 5,
},
saturday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 6,
},
sunday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 7,
},
}
const result = getGroupedOpeningHours(allDaysSameHours, mockIntl)
expect(result).toEqual(["Monday-Sunday: 09:00-17:00"])
})
it("should handle mixed opening hours", () => {
const mixedOpeningHours: OpeningHours = {
isActive: true,
nameEnglish: "Opening hours",
monday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 1,
},
tuesday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 2,
},
wednesday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 3,
},
thursday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 4,
},
friday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 5,
},
saturday: {
openingTime: "10:00",
closingTime: "15:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 6,
},
sunday: {
isClosed: true,
alwaysOpen: false,
openingTime: "",
closingTime: "",
sortOrder: 7,
},
}
const result = getGroupedOpeningHours(mixedOpeningHours, mockIntl)
expect(result).toEqual([
"Monday-Friday: 09:00-17:00",
"Saturday: 10:00-15:00",
"Sunday: Closed",
])
})
it("should handle always open days", () => {
const someAlwaysOpen: OpeningHours = {
isActive: true,
nameEnglish: "Opening hours",
monday: {
alwaysOpen: true,
isClosed: false,
openingTime: "",
closingTime: "",
sortOrder: 1,
},
tuesday: {
alwaysOpen: true,
isClosed: false,
openingTime: "",
closingTime: "",
sortOrder: 2,
},
wednesday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 3,
},
thursday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 4,
},
friday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 5,
},
saturday: {
isClosed: true,
alwaysOpen: false,
openingTime: "",
closingTime: "",
sortOrder: 6,
},
sunday: {
isClosed: true,
alwaysOpen: false,
openingTime: "",
closingTime: "",
sortOrder: 7,
},
}
const result = getGroupedOpeningHours(someAlwaysOpen, mockIntl)
expect(result).toEqual([
"Monday-Tuesday: Always open",
"Wednesday-Friday: 09:00-17:00",
"Saturday-Sunday: Closed",
])
})
it("should handle missing days", () => {
const missingDays: OpeningHours = {
isActive: true,
nameEnglish: "Opening hours",
monday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 1,
},
wednesday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 3,
},
friday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 5,
},
}
const result = getGroupedOpeningHours(missingDays, mockIntl)
expect(result).toEqual([
"Monday: 09:00-17:00",
"Wednesday: 09:00-17:00",
"Friday: 09:00-17:00",
])
})
it("should not group non-consecutive days with same hours", () => {
const nonConsecutiveSameHours: OpeningHours = {
isActive: true,
nameEnglish: "Opening hours",
monday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 1,
},
tuesday: {
openingTime: "10:00",
closingTime: "18:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 2,
},
wednesday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 3,
},
}
const result = getGroupedOpeningHours(nonConsecutiveSameHours, mockIntl)
expect(result).toEqual([
"Monday: 09:00-17:00",
"Tuesday: 10:00-18:00",
"Wednesday: 09:00-17:00",
])
})
it("should handle nullable opening/closing times", () => {
const nullableHours: OpeningHours = {
isActive: true,
nameEnglish: "Opening hours",
monday: {
openingTime: "",
closingTime: "",
isClosed: true,
alwaysOpen: false,
sortOrder: 1,
},
tuesday: {
openingTime: "09:00",
closingTime: "",
isClosed: false,
alwaysOpen: false,
sortOrder: 2,
},
wednesday: {
openingTime: "",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 3,
},
}
const result = getGroupedOpeningHours(nullableHours, mockIntl)
expect(result).toEqual([
"Monday: Closed",
// Tuesday and Wednesday won't appear in the result because they have empty string values
// that don't match any of the conditions in the getGroupedOpeningHours function
])
})
it("should handle inactive restaurant hours", () => {
const inactiveHours: OpeningHours = {
isActive: false,
nameEnglish: "Opening hours",
monday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 1,
},
tuesday: {
openingTime: "09:00",
closingTime: "17:00",
isClosed: false,
alwaysOpen: false,
sortOrder: 2,
},
}
// Even though isActive is false, the function should still process the hours
// as it doesn't check for the isActive flag
const result = getGroupedOpeningHours(inactiveHours, mockIntl)
expect(result).toEqual(["Monday-Tuesday: 09:00-17:00"])
})
})