* fix: deep link reschedule audit log to booking drawer history tab Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: make booking drawer tab-agnostic for cross-tab deep links Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: use status-agnostic /bookings URL for audit log deep links - Update audit service URLs from /bookings/upcoming?uid=... to /bookings?uid=... - Add /bookings/page.tsx redirect that routes to /bookings/upcoming preserving query params - Update tests to expect new URL format Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fixes * refactor: use client-side replaceState instead of server redirect for booking deep links Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: use router.replace instead of replaceState to update tab and booking list Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * improvements * refactor: extract deep link logic from BookingListContainer into usePreSelectedBooking hook Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: use proper BookingOutput status type in test helper Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: decouple getTabForBooking from BookingOutput type for simpler testing Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: accept Date | string for endTime in BookingForTabResolution interface Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * refactor: eliminate initialBookingUid prop drilling and revert formatting-only changes Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: use AuditDeepLink wrapper to preserve target=_blank through ServerTrans cloneElement Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * Improve code organization * refactor: rename usePreSelectedBooking to useSwitchToCorrectStatusTab Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: push preSelectedBooking into store so drawer opens on direct navigation Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fixes * fixes * fixes * fix --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
61 lines
2.2 KiB
TypeScript
61 lines
2.2 KiB
TypeScript
import { describe, it, expect } from "vitest";
|
|
|
|
import { getTabForBooking } from "./useSwitchToCorrectStatusTab";
|
|
|
|
function makeBooking(overrides: {
|
|
status: string;
|
|
endTime: Date;
|
|
recurringEventId?: string | null;
|
|
}){
|
|
return {
|
|
status: overrides.status,
|
|
endTime: overrides.endTime,
|
|
recurringEventId: overrides.recurringEventId ?? null,
|
|
};
|
|
}
|
|
|
|
const future = new Date(Date.now() + 24 * 60 * 60 * 1000);
|
|
const past = new Date(Date.now() - 24 * 60 * 60 * 1000);
|
|
|
|
describe("getTabForBooking", () => {
|
|
it("returns 'cancelled' for CANCELLED bookings", () => {
|
|
expect(getTabForBooking(makeBooking({ status: "CANCELLED", endTime: future }))).toBe("cancelled");
|
|
});
|
|
|
|
it("returns 'cancelled' for REJECTED bookings", () => {
|
|
expect(getTabForBooking(makeBooking({ status: "REJECTED", endTime: future }))).toBe("cancelled");
|
|
});
|
|
|
|
it("returns 'cancelled' for CANCELLED bookings even if past", () => {
|
|
expect(getTabForBooking(makeBooking({ status: "CANCELLED", endTime: past }))).toBe("cancelled");
|
|
});
|
|
|
|
it("returns 'unconfirmed' for PENDING bookings in the future", () => {
|
|
expect(getTabForBooking(makeBooking({ status: "PENDING", endTime: future }))).toBe("unconfirmed");
|
|
});
|
|
|
|
it("returns 'past' for PENDING bookings that have ended", () => {
|
|
expect(getTabForBooking(makeBooking({ status: "PENDING", endTime: past }))).toBe("past");
|
|
});
|
|
|
|
it("returns 'past' for ACCEPTED bookings that have ended", () => {
|
|
expect(getTabForBooking(makeBooking({ status: "ACCEPTED", endTime: past }))).toBe("past");
|
|
});
|
|
|
|
it("returns 'recurring' for future ACCEPTED bookings with recurringEventId", () => {
|
|
expect(
|
|
getTabForBooking(makeBooking({ status: "ACCEPTED", endTime: future, recurringEventId: "rec-123" }))
|
|
).toBe("recurring");
|
|
});
|
|
|
|
it("returns 'upcoming' for future ACCEPTED bookings without recurringEventId", () => {
|
|
expect(getTabForBooking(makeBooking({ status: "ACCEPTED", endTime: future }))).toBe("upcoming");
|
|
});
|
|
|
|
it("returns 'past' for recurring bookings that have ended", () => {
|
|
expect(
|
|
getTabForBooking(makeBooking({ status: "ACCEPTED", endTime: past, recurringEventId: "rec-123" }))
|
|
).toBe("past");
|
|
});
|
|
});
|