Merged in chore/add-tests-to-getTotalPrice (pull request #3178)

chore: Add tests to getTotalPrice

* Add tests to getTotalPrice


Approved-by: Joakim Jäderberg
This commit is contained in:
Anton Gunnarsson
2025-11-19 14:30:51 +00:00
parent 0e66f1b6de
commit fc02c957d2
2 changed files with 320 additions and 37 deletions

View File

@@ -9,6 +9,7 @@ import {
getRedemptionPrice,
getRegularPrice,
getRequestedAdditionalPrice,
getTotalPrice,
getVoucherPrice,
} from "./helpers"
@@ -1208,43 +1209,43 @@ describe("getRedemptionPrice", () => {
requested: undefined,
})
})
})
it("returns price and additionalPrice for single room with room features", () => {
const nights = 2
const result = getRedemptionPrice(
[
{
adults: 1,
breakfast: false,
roomFeatures: [
{
localPrice: { totalPrice: 33 },
requestedPrice: { totalPrice: 33 },
},
],
roomRate: {
redemption: {
localPrice: {
pointsPerStay: 100,
currency: CurrencyEnum.POINTS,
additionalPricePerStay: 0,
it("returns price and additionalPrice for single room with room features", () => {
const nights = 2
const result = getRedemptionPrice(
[
{
adults: 1,
breakfast: false,
roomFeatures: [
{
localPrice: { totalPrice: 33 },
requestedPrice: { totalPrice: 33 },
},
],
roomRate: {
redemption: {
localPrice: {
pointsPerStay: 100,
currency: CurrencyEnum.POINTS,
additionalPricePerStay: 0,
},
},
},
},
},
],
nights
)
],
nights
)
expect(result).toEqual({
local: {
price: 100,
currency: CurrencyEnum.POINTS,
additionalPrice: 33,
additionalPriceCurrency: CurrencyEnum.POINTS,
},
requested: undefined,
expect(result).toEqual({
local: {
price: 100,
currency: CurrencyEnum.POINTS,
additionalPrice: 33,
additionalPriceCurrency: CurrencyEnum.POINTS,
},
requested: undefined,
})
})
})
@@ -1849,3 +1850,285 @@ describe("getRegularPrice", () => {
})
})
})
type TotalPriceRooms = Parameters<typeof getTotalPrice>[0]
describe("getTotalPrice", () => {
it("returns corporate cheque price if any room have corporate cheque", () => {
const nights = 1
const isMember = false
const rooms: TotalPriceRooms = [
{
adults: 1,
breakfast: false,
roomFeatures: [],
roomRate: {
corporateCheque: {
localPrice: {
currency: CurrencyEnum.SEK,
numberOfCheques: 3,
additionalPricePerStay: 0,
},
rateCode: {} as never,
rateType: {} as never,
},
bookingCode: {} as never,
rateDefinition: {} as never,
rate: {} as never,
rateDefinitionMember: {} as never,
},
guest: {} as never,
},
{
adults: 1,
breakfast: false,
roomFeatures: [],
roomRate: {
public: {
localPrice: {
pricePerStay: 500,
currency: CurrencyEnum.SEK,
omnibusPricePerNight: {} as never,
pricePerNight: {} as never,
regularPricePerNight: {} as never,
regularPricePerStay: {} as never,
},
rateCode: {} as never,
rateType: {} as never,
},
member: {
localPrice: {
pricePerNight: 30,
regularPricePerStay: 30,
currency: CurrencyEnum.SEK,
omnibusPricePerNight: {} as never,
pricePerStay: {} as never,
regularPricePerNight: {} as never,
},
rateCode: {} as never,
rateType: {} as never,
},
bookingCode: {} as never,
rateDefinition: {} as never,
rate: {} as never,
rateDefinitionMember: {} as never,
},
guest: {} as never,
},
]
const totalPrice = getTotalPrice(rooms, isMember, nights)
expect(totalPrice).toEqual({
local: {
price: 3,
currency: CurrencyEnum.CC,
additionalPrice: 0,
additionalPriceCurrency: CurrencyEnum.SEK,
},
requested: undefined,
})
})
it("returns redemption price if any room have redemption price", () => {
const nights = 1
const isMember = false
const rooms: TotalPriceRooms = [
{
adults: 1,
breakfast: false,
roomFeatures: [],
roomRate: {
redemption: {
localPrice: {
pointsPerStay: 100,
pointsPerNight: 100,
currency: CurrencyEnum.POINTS,
additionalPricePerStay: 0,
},
hasEnoughPoints: {} as never,
rateCode: {} as never,
rateType: {} as never,
},
bookingCode: {} as never,
rateDefinition: {} as never,
rate: {} as never,
rateDefinitionMember: {} as never,
},
guest: {} as never,
},
{
adults: 1,
breakfast: false,
roomFeatures: [],
roomRate: {
public: {
localPrice: {
pricePerStay: 500,
currency: CurrencyEnum.SEK,
omnibusPricePerNight: {} as never,
pricePerNight: {} as never,
regularPricePerNight: {} as never,
regularPricePerStay: {} as never,
},
rateCode: {} as never,
rateType: {} as never,
},
member: {
localPrice: {
pricePerNight: 30,
regularPricePerStay: 30,
currency: CurrencyEnum.SEK,
omnibusPricePerNight: {} as never,
pricePerStay: {} as never,
regularPricePerNight: {} as never,
},
rateCode: {} as never,
rateType: {} as never,
},
bookingCode: {} as never,
rateDefinition: {} as never,
rate: {} as never,
rateDefinitionMember: {} as never,
},
guest: {} as never,
},
]
const totalPrice = getTotalPrice(rooms, isMember, nights)
expect(totalPrice).toEqual({
local: {
price: 100,
currency: CurrencyEnum.POINTS,
additionalPrice: 0,
additionalPriceCurrency: CurrencyEnum.POINTS,
},
requested: undefined,
})
})
it("returns voucher price if any room have voucher price", () => {
const nights = 1
const isMember = false
const rooms: TotalPriceRooms = [
{
adults: 1,
breakfast: false,
roomFeatures: [],
roomRate: {
voucher: {
numberOfVouchers: 1,
rateCode: {} as never,
rateType: {} as never,
},
bookingCode: {} as never,
rateDefinition: {} as never,
rate: {} as never,
rateDefinitionMember: {} as never,
},
guest: {} as never,
},
{
adults: 1,
breakfast: false,
roomFeatures: [],
roomRate: {
public: {
localPrice: {
pricePerStay: 500,
currency: CurrencyEnum.SEK,
omnibusPricePerNight: {} as never,
pricePerNight: {} as never,
regularPricePerNight: {} as never,
regularPricePerStay: {} as never,
},
rateCode: {} as never,
rateType: {} as never,
},
member: {
localPrice: {
pricePerNight: 30,
regularPricePerStay: 30,
currency: CurrencyEnum.SEK,
omnibusPricePerNight: {} as never,
pricePerStay: {} as never,
regularPricePerNight: {} as never,
},
rateCode: {} as never,
rateType: {} as never,
},
bookingCode: {} as never,
rateDefinition: {} as never,
rate: {} as never,
rateDefinitionMember: {} as never,
},
guest: {} as never,
},
]
const totalPrice = getTotalPrice(rooms, isMember, nights)
expect(totalPrice).toEqual({
local: {
price: 1,
currency: CurrencyEnum.Voucher,
additionalPrice: 0,
},
requested: undefined,
})
})
it("returns regular price if no special rates are present", () => {
const nights = 1
const isMember = false
const rooms: TotalPriceRooms = [
{
adults: 1,
breakfast: false,
roomFeatures: [],
roomRate: {
public: {
localPrice: {
pricePerStay: 500,
currency: CurrencyEnum.SEK,
regularPricePerStay: 500,
omnibusPricePerNight: {} as never,
pricePerNight: {} as never,
regularPricePerNight: {} as never,
},
rateCode: {} as never,
rateType: {} as never,
},
member: {
localPrice: {
pricePerStay: 30,
currency: CurrencyEnum.SEK,
regularPricePerStay: 30,
omnibusPricePerNight: {} as never,
pricePerNight: {} as never,
regularPricePerNight: {} as never,
},
rateCode: {} as never,
rateType: {} as never,
},
bookingCode: {} as never,
rateDefinition: {} as never,
rate: {} as never,
rateDefinitionMember: {} as never,
},
guest: { join: false } as never,
},
]
const totalPrice = getTotalPrice(rooms, isMember, nights)
expect(totalPrice).toEqual({
local: {
price: 500,
regularPrice: 0,
currency: CurrencyEnum.SEK,
},
requested: undefined,
})
})
})

View File

@@ -360,11 +360,6 @@ export function getRequestedAdditionalPrice(
}
}
type TRoom = Pick<
RoomState["room"],
"adults" | "breakfast" | "guest" | "roomFeatures" | "roomRate"
>
type CorporateCheckRoom = PriceCalculationRoom & {
roomRate: {
corporateCheque: {
@@ -669,6 +664,11 @@ export function getRegularPrice(
return totalPrice
}
type TRoom = Pick<
RoomState["room"],
"adults" | "breakfast" | "guest" | "roomFeatures" | "roomRate"
>
export function getTotalPrice(
rooms: TRoom[],
isMember: boolean,