import { describe, expect, it } from "vitest" import { CurrencyEnum } from "@scandic-hotels/common/constants/currency" import { getSelectedPackages } from "./getSelectedPackages" import type { PackageEnum } from "@scandic-hotels/trpc/types/packages" import type { Package } from "./types" type FirstParameter = Parameters[0] const localPrice = { currency: CurrencyEnum.Unknown, price: 0, totalPrice: 0 } describe("getSelectedPackages", () => { const availablePackages: Partial[] = [ { code: "PKG1" as PackageEnum, localPrice, }, { code: "PKG2" as PackageEnum, localPrice }, { code: "PKG3" as PackageEnum, localPrice }, ] it("returns empty array if availablePackages is undefined", () => { const result = getSelectedPackages(undefined, ["PKG1" as PackageEnum]) expect(result).toMatchObject([]) }) it("returns empty array if selectedPackages is undefined", () => { // @ts-expect-error testing undefined const result = getSelectedPackages(availablePackages, undefined) expect(result).toMatchObject([]) }) it("returns empty array if selectedPackages is empty", () => { const result = getSelectedPackages(availablePackages as FirstParameter, []) expect(result).toMatchObject([]) }) it("returns only the selected packages", () => { const result = getSelectedPackages(availablePackages as FirstParameter, [ "PKG1" as PackageEnum, "PKG3" as PackageEnum, ]) expect(result).toMatchObject([{ code: "PKG1" }, { code: "PKG3" }]) }) it("returns empty array if no selectedPackages match", () => { const result = getSelectedPackages(availablePackages as FirstParameter, [ "PKG4" as PackageEnum, ]) expect(result).toMatchObject([]) }) it("returns all packages if all are selected", () => { const result = getSelectedPackages(availablePackages as FirstParameter, [ "PKG1" as PackageEnum, "PKG2" as PackageEnum, "PKG3" as PackageEnum, ]) expect(result).toMatchObject(availablePackages) }) it("handles duplicate selectedPackages gracefully", () => { const result = getSelectedPackages(availablePackages as FirstParameter, [ "PKG1" as PackageEnum, "PKG1" as PackageEnum, "PKG2" as PackageEnum, ]) expect(result).toMatchObject([{ code: "PKG1" }, { code: "PKG2" }]) }) })