Merged in feat/SW-1379-multiroom-summary (pull request #1198)
Feat/SW-1379 multiroom summary * fix: added early return in hotel query and added missing type annotations * feat(SW-1379): update summary to support multiple rooms and add tests * fix: added check for room number when using isMember for member prices * fix: remove mocked array * fix: minor bug fixes in rate details popup * fix: translation key Approved-by: Pontus Dreij Approved-by: Arvid Norlin
This commit is contained in:
@@ -2,15 +2,19 @@ import { describe, expect, test } from "@jest/globals"
|
||||
import { act, renderHook } from "@testing-library/react"
|
||||
import { type PropsWithChildren } from "react"
|
||||
|
||||
import { BedTypeEnum } from "@/constants/booking"
|
||||
import { Lang } from "@/constants/languages"
|
||||
|
||||
import {
|
||||
bedType,
|
||||
booking,
|
||||
breakfastPackage,
|
||||
guestDetailsNonMember,
|
||||
roomRate,
|
||||
} from "@/__mocks__/hotelReservation"
|
||||
import EnterDetailsProvider from "@/providers/EnterDetailsProvider"
|
||||
|
||||
import { detailsStorageName, useEnterDetailsStore } from "."
|
||||
|
||||
import { BreakfastPackageEnum } from "@/types/enums/breakfast"
|
||||
import { PackageTypeEnum } from "@/types/enums/packages"
|
||||
import { StepEnum } from "@/types/enums/step"
|
||||
import type { PersistedState } from "@/types/stores/enter-details"
|
||||
|
||||
@@ -27,100 +31,14 @@ jest.mock("@/lib/api", () => ({
|
||||
fetchRetry: jest.fn((fn) => fn),
|
||||
}))
|
||||
|
||||
const booking = {
|
||||
hotelId: "123",
|
||||
fromDate: "2100-01-01",
|
||||
toDate: "2100-01-02",
|
||||
rooms: [
|
||||
{
|
||||
adults: 1,
|
||||
roomTypeCode: "SKS",
|
||||
rateCode: "SAVEEU",
|
||||
counterRateCode: "PLSA2BEU",
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
const bedTypes = [
|
||||
{
|
||||
type: BedTypeEnum.King,
|
||||
description: "King-size bed",
|
||||
value: "SKS",
|
||||
size: {
|
||||
min: 180,
|
||||
max: 200,
|
||||
},
|
||||
roomTypeCode: "SKS",
|
||||
extraBed: undefined,
|
||||
},
|
||||
{
|
||||
type: BedTypeEnum.Queen,
|
||||
description: "Queen-size bed",
|
||||
value: "QZ",
|
||||
size: {
|
||||
min: 160,
|
||||
max: 200,
|
||||
},
|
||||
roomTypeCode: "QZ",
|
||||
extraBed: undefined,
|
||||
},
|
||||
]
|
||||
|
||||
const guest = {
|
||||
countryCode: "SE",
|
||||
dateOfBirth: "",
|
||||
email: "test@test.com",
|
||||
firstName: "Tester",
|
||||
lastName: "Testersson",
|
||||
join: false,
|
||||
membershipNo: "12345678901234",
|
||||
phoneNumber: "+46700000000",
|
||||
zipCode: "",
|
||||
}
|
||||
|
||||
const breakfastPackages = [
|
||||
{
|
||||
code: BreakfastPackageEnum.REGULAR_BREAKFAST,
|
||||
description: "Breakfast with reservation",
|
||||
localPrice: {
|
||||
currency: "SEK",
|
||||
price: "99",
|
||||
totalPrice: "99",
|
||||
},
|
||||
requestedPrice: {
|
||||
currency: "EUR",
|
||||
price: "9",
|
||||
totalPrice: "9",
|
||||
},
|
||||
packageType: PackageTypeEnum.BreakfastAdult as const,
|
||||
},
|
||||
]
|
||||
|
||||
function Wrapper({ children }: PropsWithChildren) {
|
||||
return (
|
||||
<EnterDetailsProvider
|
||||
bedTypes={bedTypes}
|
||||
bedTypes={[bedType.king, bedType.queen]}
|
||||
booking={booking}
|
||||
showBreakfastStep={true}
|
||||
packages={null}
|
||||
roomRate={{
|
||||
memberRate: {
|
||||
rateCode: "PLSA2BEU",
|
||||
localPrice: {
|
||||
currency: "EUR",
|
||||
pricePerNight: 100,
|
||||
pricePerStay: 200,
|
||||
},
|
||||
},
|
||||
publicRate: {
|
||||
rateCode: "SAVEEU",
|
||||
localPrice: {
|
||||
currency: "EUR",
|
||||
pricePerNight: 100,
|
||||
pricePerStay: 200,
|
||||
},
|
||||
},
|
||||
}}
|
||||
roomRate={roomRate}
|
||||
searchParamsStr=""
|
||||
step={StepEnum.selectBed}
|
||||
user={null}
|
||||
@@ -154,10 +72,13 @@ describe("Enter Details Store", () => {
|
||||
|
||||
test("initialize with correct values from sessionStorage", async () => {
|
||||
const storage: PersistedState = {
|
||||
bedType: bedTypes[1],
|
||||
breakfast: breakfastPackages[0],
|
||||
bedType: {
|
||||
roomTypeCode: bedType.queen.value,
|
||||
description: bedType.queen.description,
|
||||
},
|
||||
breakfast: breakfastPackage,
|
||||
booking,
|
||||
guest,
|
||||
guest: guestDetailsNonMember,
|
||||
}
|
||||
|
||||
window.sessionStorage.setItem(detailsStorageName, JSON.stringify(storage))
|
||||
@@ -187,7 +108,10 @@ describe("Enter Details Store", () => {
|
||||
expect(result.current.currentStep).toEqual(StepEnum.selectBed)
|
||||
|
||||
await act(async () => {
|
||||
result.current.actions.updateBedType(bedTypes[0])
|
||||
result.current.actions.updateBedType({
|
||||
roomTypeCode: bedType.king.value,
|
||||
description: bedType.king.description,
|
||||
})
|
||||
})
|
||||
|
||||
expect(result.current.isValid[StepEnum.selectBed]).toEqual(true)
|
||||
@@ -195,7 +119,7 @@ describe("Enter Details Store", () => {
|
||||
expect(window.location.pathname.slice(1)).toBe(StepEnum.breakfast)
|
||||
|
||||
await act(async () => {
|
||||
result.current.actions.updateBreakfast(breakfastPackages[0])
|
||||
result.current.actions.updateBreakfast(breakfastPackage)
|
||||
})
|
||||
|
||||
expect(result.current.isValid[StepEnum.breakfast]).toEqual(true)
|
||||
@@ -203,7 +127,7 @@ describe("Enter Details Store", () => {
|
||||
expect(window.location.pathname.slice(1)).toBe(StepEnum.details)
|
||||
|
||||
await act(async () => {
|
||||
result.current.actions.updateDetails(guest)
|
||||
result.current.actions.updateDetails(guestDetailsNonMember)
|
||||
})
|
||||
|
||||
expect(result.current.isValid[StepEnum.details]).toEqual(true)
|
||||
|
||||
Reference in New Issue
Block a user