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"]); }); });