DigitalConsumer.FixMyGlass/src/layouts/schedule/helpers/schedule-helper.available-dates.spec.js
2026-07-29 14:28:16 -04:00

107 lines
3.2 KiB
JavaScript

import {
getAvailableAppointmentDatesToShow,
getAvailableDatesFromProviderDays,
} from "./schedule-helper";
describe("getAvailableDatesFromProviderDays", () => {
test("returns sorted dates that have at least one time slot", () => {
const days = [
{ date: "2026-06-16", timeSlots: [{ id: "a" }] },
{ date: "2026-06-11", timeSlots: [] },
{ date: "2026-06-14", timeSlots: [{ id: "b" }, { id: "c" }] },
];
expect(getAvailableDatesFromProviderDays(days)).toEqual(["2026-06-14", "2026-06-16"]);
});
test("returns an empty array when days is null or undefined", () => {
expect(getAvailableDatesFromProviderDays(null)).toEqual([]);
expect(getAvailableDatesFromProviderDays(undefined)).toEqual([]);
});
});
describe("getAvailableAppointmentDatesToShow", () => {
const selectedDate = "2026-06-15";
test("AC1: happy path", () => {
const available = [
"2026-06-11",
"2026-06-12",
"2026-06-13",
"2026-06-14",
"2026-06-16",
"2026-06-17",
"2026-06-18",
"2026-06-19",
"2026-06-20",
];
expect(getAvailableAppointmentDatesToShow(available, selectedDate)).toEqual([
"2026-06-11",
"2026-06-14",
"2026-06-16",
]);
});
test("AC2: no previous dates available", () => {
const available = ["2026-06-16", "2026-06-17", "2026-06-18", "2026-06-19", "2026-06-20"];
expect(getAvailableAppointmentDatesToShow(available, selectedDate)).toEqual([
"2026-06-16",
"2026-06-17",
"2026-06-18",
]);
});
test("AC3: no next dates available", () => {
const available = [
"2026-06-09",
"2026-06-10",
"2026-06-11",
"2026-06-12",
"2026-06-13",
"2026-06-14",
];
expect(getAvailableAppointmentDatesToShow(available, selectedDate)).toEqual([
"2026-06-09",
"2026-06-10",
"2026-06-14",
]);
});
test("AC4: only one previous date available and it matches earliest", () => {
const available = [
"2026-06-11",
"2026-06-16",
"2026-06-17",
"2026-06-18",
"2026-06-19",
"2026-06-20",
];
expect(getAvailableAppointmentDatesToShow(available, selectedDate)).toEqual([
"2026-06-11",
"2026-06-16",
"2026-06-17",
]);
});
test("AC5: no dates available", () => {
expect(getAvailableAppointmentDatesToShow([], selectedDate)).toEqual([]);
expect(getAvailableAppointmentDatesToShow([""], selectedDate)).toEqual([]);
expect(getAvailableAppointmentDatesToShow([], null)).toEqual([]);
});
test("AC6: only one date available", () => {
expect(getAvailableAppointmentDatesToShow(["2026-06-13"], selectedDate)).toEqual([
"2026-06-13",
]);
});
test("AC7: only two dates available", () => {
expect(
getAvailableAppointmentDatesToShow(["2026-06-11", "2026-06-12"], selectedDate)
).toEqual(["2026-06-11", "2026-06-12"]);
});
});