import PartnerActivityMapper from "../resources/partnerActivity/mapper"; import { IPoi } from "../resources/poi"; describe("PartnerActivityMapper", () => { it("should map a partner activity entry to a partner activity model", () => { const mapper = new PartnerActivityMapper(); const now = new Date().getTime(); const model = mapper.toModel({ type: "partner_activity", id: "1234", attributes: { accommodation: "foo", canonical_category: "awesome", categories: ["adventure"], departure_info: "nashville", descriptions: { long_description: "amazing adventure", short_description: "", }, difficulty: { description: "4 - Demanding", grade: 4, scale: 5 }, group_size: { average_size: "16", description: "Small Group", maximum_size: "22", minimum_size: "2", }, duration_info: "7 days", prices: { discounted_prices: [{ amount: 200.20, currency: "USD", formatted_amount: "$200.2", }, { amount: 150.10, currency: "EUR", formatted_amount: "€150.1", }], regular_prices: [{ amount: 400, currency: "USD", formatted_amount: "$400.0", }, { amount: 300, currency: "EUR", formatted_amount: "€300.0", }], }, pricing: { discounted_price: { amount: 200.20, currency: "USD", formatted_amount: "$200.2", }, regular_price: { amount: 400, currency: "USD", formatted_amount: "$400.0", }, }, provider: "viator", media: { images: [ "http://cache-graphicslib.viator.com/image.jpg", "http://cache-graphicslib.viator.com/image-2.jpg", ], videos: [], } }, relationships: { places: { data: [{ type: "place", id: "362228" }] } }, links: { booking: "http://ga.com/bookme.html", image: "http://cache-graphicslib.viator.com/image.jpg", map: "http://ga.com/map.jpg", self: "/partner-activities/1234", } }); expect(model.accommodation).toEqual("foo"); expect(model.canonicalCategory).toEqual("awesome"); expect(model.categories.length).toEqual(1); expect(model.departureInfo).toEqual("nashville"); expect(model.descriptions.longDescription).toEqual("amazing adventure"); expect(model.difficulty).toBeDefined(); expect(model.difficulty.description).toEqual("4 - Demanding"); expect(model.difficulty.grade).toEqual(4); expect(model.difficulty.scale).toEqual(5); expect(model.durationInfo).toEqual("7 days"); expect(model.prices.discountedPrices).toHaveLength(2); expect(model.prices.discountedPrices[0].currency).toEqual("USD"); expect(model.prices.discountedPrices[0].amount).toEqual(200.2); expect(model.prices.discountedPrices[0].formattedAmount).toEqual("$200.20"); expect(model.prices.discountedPrices[1].currency).toEqual("EUR"); expect(model.prices.discountedPrices[1].amount).toEqual(150.1); expect(model.prices.discountedPrices[1].formattedAmount).toEqual("€150.10"); expect(model.prices.regularPrices).toHaveLength(2); expect(model.prices.regularPrices[0].currency).toEqual("USD"); expect(model.prices.regularPrices[0].amount).toEqual(400); expect(model.prices.regularPrices[0].formattedAmount).toEqual("$400"); expect(model.prices.regularPrices[1].currency).toEqual("EUR"); expect(model.prices.regularPrices[1].amount).toEqual(300); expect(model.prices.regularPrices[1].formattedAmount).toEqual("€300"); expect(model.pricing.discountedPrice.formattedAmount).toEqual("$200.20"); expect(model.pricing.regularPrice.formattedAmount).toEqual("$400"); expect(model.groupSize.maximumSize).toEqual("22"); expect(model.containingPlaceId).toEqual("362228"); expect(model.images[0].url).toBe("https://lpviator.imgix.net/image.jpg"); expect(model.booking).toBe("http://ga.com/bookme.html"); expect(model.map).toBe("http://ga.com/map.jpg"); expect(model.media.images[0]).toBe("https://lpviator.imgix.net/image.jpg"); expect(model.media.images[1]).toBe("https://lpviator.imgix.net/image-2.jpg"); }); });