import { describe, expect, it } from "vitest" import { includeRoomInfo } from "./includeRoomInfo" import type { RoomCategory } from "@scandic-hotels/trpc/types/hotel" import type { RoomConfiguration } from "@scandic-hotels/trpc/types/roomAvailability" type DeepPartial = T extends object ? { [P in keyof T]?: DeepPartial } : T const mockRoomCategories: DeepPartial[] = [ { id: "cat1", name: "Standard", roomTypes: [{ code: "STD" }, { code: "STD2" }], }, { id: "cat2", name: "Deluxe", roomTypes: [{ code: "DLX" }], }, ] describe("includeRoomInfo", () => { it("returns roomConfiguration with roomInfo when roomTypeCode matches", () => { const roomConfigurations: DeepPartial[] = [ { roomTypeCode: "STD" }, { roomTypeCode: "DLX" }, ] const result = includeRoomInfo({ roomConfigurations: roomConfigurations as RoomConfiguration[], roomCategories: mockRoomCategories as RoomCategory[], selectedPackages: [], }) expect(result[0]).toMatchObject({ roomTypeCode: "STD", roomInfo: mockRoomCategories[0], }) expect(result[1]).toMatchObject({ roomTypeCode: "DLX", roomInfo: mockRoomCategories[1], }) }) it("returns null when no matching roomTypeCode is found", () => { const roomConfigurations: DeepPartial[] = [ { roomTypeCode: "NOT_FOUND" }, ] const result = includeRoomInfo({ roomConfigurations: roomConfigurations as RoomConfiguration[], roomCategories: mockRoomCategories as RoomCategory[], selectedPackages: [], }) expect(result).toEqual([null]) }) it("handles empty roomConfigurations", () => { const result = includeRoomInfo({ roomConfigurations: [], roomCategories: mockRoomCategories as RoomCategory[], selectedPackages: [], }) expect(result).toEqual([]) }) it("handles empty roomCategories", () => { const roomConfigurations: DeepPartial[] = [ { roomTypeCode: "STD" }, ] const result = includeRoomInfo({ roomConfigurations: roomConfigurations as RoomConfiguration[], roomCategories: [], selectedPackages: [], }) expect(result).toEqual([null]) }) it("returns correct mapping for multiple configurations with mixed matches", () => { const roomConfigurations: DeepPartial[] = [ { roomTypeCode: "STD" }, { roomTypeCode: "DLX" }, { roomTypeCode: "UNKNOWN" }, ] const result = includeRoomInfo({ roomConfigurations: roomConfigurations as RoomConfiguration[], roomCategories: mockRoomCategories as RoomCategory[], selectedPackages: [], }) expect(result[0]).toMatchObject({ roomTypeCode: "STD", roomInfo: mockRoomCategories[0], }) expect(result[1]).toMatchObject({ roomTypeCode: "DLX", roomInfo: mockRoomCategories[1], }) expect(result[2]).toBeNull() }) })