@duffel/components 3.1.3--prototype.3 → 3.1.3--prototype.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/{react-dist/custom-elements.js → custom-elements.js} +2 -2
  2. package/{react-dist/custom-elements.js.map → custom-elements.js.map} +1 -1
  3. package/{react-dist/index.js → index.js} +2 -2
  4. package/{react-dist/index.js.map → index.js.map} +1 -1
  5. package/package.json +3 -7
  6. package/scripts/generate-fixture.d.ts +3 -0
  7. package/scripts/setup-suggestion-data.d.ts +28 -0
  8. package/tsconfig.tsbuildinfo +1 -0
  9. package/.circleci/config.yml +0 -67
  10. package/.eslintrc.js +0 -47
  11. package/.github/CODEOWNERS +0 -4
  12. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -29
  13. package/.github/renovate.json +0 -12
  14. package/.nvmrc +0 -1
  15. package/.prettierignore +0 -6
  16. package/.storybook/main.ts +0 -33
  17. package/.storybook/preview.tsx +0 -28
  18. package/.tool-versions +0 -1
  19. package/.vscode/extensions.json +0 -7
  20. package/.vscode/settings.json +0 -10
  21. package/.yarn/releases/yarn-4.0.1.cjs +0 -893
  22. package/.yarn/sdks/eslint/bin/eslint.js +0 -20
  23. package/.yarn/sdks/eslint/lib/api.js +0 -20
  24. package/.yarn/sdks/eslint/lib/unsupported-api.js +0 -20
  25. package/.yarn/sdks/eslint/package.json +0 -14
  26. package/.yarn/sdks/integrations.yml +0 -5
  27. package/.yarn/sdks/prettier/bin-prettier.js +0 -20
  28. package/.yarn/sdks/prettier/index.js +0 -20
  29. package/.yarn/sdks/prettier/package.json +0 -7
  30. package/.yarn/sdks/typescript/bin/tsc +0 -20
  31. package/.yarn/sdks/typescript/bin/tsserver +0 -20
  32. package/.yarn/sdks/typescript/lib/tsc.js +0 -20
  33. package/.yarn/sdks/typescript/lib/tsserver.js +0 -225
  34. package/.yarn/sdks/typescript/lib/tsserverlibrary.js +0 -225
  35. package/.yarn/sdks/typescript/lib/typescript.js +0 -20
  36. package/.yarn/sdks/typescript/package.json +0 -10
  37. package/.yarnrc.yml +0 -3
  38. package/CONTRIBUTING.md +0 -83
  39. package/README.md +0 -68
  40. package/__mocks__/styleMock.js +0 -6
  41. package/babel.config.js +0 -20
  42. package/commitlint.config.js +0 -4
  43. package/config/esbuild.base.config.js +0 -18
  44. package/config/esbuild.cdn.config.js +0 -51
  45. package/config/esbuild.dev.config.js +0 -46
  46. package/config/esbuild.react.config.js +0 -42
  47. package/data/airports.csv +0 -9084
  48. package/data/cities.csv +0 -256
  49. package/jest.config.ts +0 -14
  50. package/scripts/build-and-publish.sh +0 -42
  51. package/scripts/generate-fixture.ts +0 -200
  52. package/scripts/setup-suggestion-data.ts +0 -100
  53. package/scripts/upload-to-cdn.sh +0 -34
  54. package/scripts.tsconfig.json +0 -11
  55. package/src/components/DuffelAncillaries/Card.tsx +0 -126
  56. package/src/components/DuffelAncillaries/Counter.tsx +0 -40
  57. package/src/components/DuffelAncillaries/DuffelAncillaries.tsx +0 -350
  58. package/src/components/DuffelAncillaries/DuffelAncillariesCustomElement.tsx +0 -124
  59. package/src/components/DuffelAncillaries/bags/BaggageSelectionCard.tsx +0 -101
  60. package/src/components/DuffelAncillaries/bags/BaggageSelectionController.tsx +0 -88
  61. package/src/components/DuffelAncillaries/bags/BaggageSelectionModal.tsx +0 -81
  62. package/src/components/DuffelAncillaries/bags/BaggageSelectionModalBody.tsx +0 -60
  63. package/src/components/DuffelAncillaries/bags/BaggageSelectionModalBodyPassenger.tsx +0 -122
  64. package/src/components/DuffelAncillaries/bags/BaggageSelectionModalFooter.tsx +0 -88
  65. package/src/components/DuffelAncillaries/bags/BaggageSelectionModalHeader.tsx +0 -82
  66. package/src/components/DuffelAncillaries/bags/IncludedBaggageBanner.tsx +0 -51
  67. package/src/components/DuffelAncillaries/cancel_for_any_reason/CfarSelectionCard.tsx +0 -90
  68. package/src/components/DuffelAncillaries/cancel_for_any_reason/CfarSelectionModal.tsx +0 -63
  69. package/src/components/DuffelAncillaries/cancel_for_any_reason/CfarSelectionModalBody.tsx +0 -56
  70. package/src/components/DuffelAncillaries/cancel_for_any_reason/CfarSelectionModalBodyListItem.tsx +0 -11
  71. package/src/components/DuffelAncillaries/cancel_for_any_reason/CfarSelectionModalFooter.tsx +0 -74
  72. package/src/components/DuffelAncillaries/cancel_for_any_reason/CfarSelectionModalHeader.tsx +0 -9
  73. package/src/components/DuffelAncillaries/seats/Amenity.tsx +0 -21
  74. package/src/components/DuffelAncillaries/seats/DeckSelect.tsx +0 -27
  75. package/src/components/DuffelAncillaries/seats/Element.tsx +0 -52
  76. package/src/components/DuffelAncillaries/seats/EmptyElement.tsx +0 -5
  77. package/src/components/DuffelAncillaries/seats/ExitElement.tsx +0 -17
  78. package/src/components/DuffelAncillaries/seats/Legend.tsx +0 -60
  79. package/src/components/DuffelAncillaries/seats/Row.tsx +0 -47
  80. package/src/components/DuffelAncillaries/seats/RowSection.tsx +0 -78
  81. package/src/components/DuffelAncillaries/seats/SeatElement.tsx +0 -120
  82. package/src/components/DuffelAncillaries/seats/SeatInfo.tsx +0 -32
  83. package/src/components/DuffelAncillaries/seats/SeatMap.tsx +0 -85
  84. package/src/components/DuffelAncillaries/seats/SeatMapUnavailable.tsx +0 -21
  85. package/src/components/DuffelAncillaries/seats/SeatSelectionCard.tsx +0 -103
  86. package/src/components/DuffelAncillaries/seats/SeatSelectionModal.tsx +0 -142
  87. package/src/components/DuffelAncillaries/seats/SeatSelectionModalBody.tsx +0 -13
  88. package/src/components/DuffelAncillaries/seats/SeatSelectionModalFooter.tsx +0 -89
  89. package/src/components/DuffelAncillaries/seats/SeatSelectionModalHeader.tsx +0 -97
  90. package/src/components/DuffelAncillaries/seats/SeatUnavailable.tsx +0 -14
  91. package/src/components/DuffelPayments/DuffelPayments.tsx +0 -224
  92. package/src/components/DuffelPayments/DuffelPaymentsCustomElement.tsx +0 -130
  93. package/src/components/PlacesLookup/PlacesLookup.tsx +0 -122
  94. package/src/components/shared/AnimatedLoaderEllipsis.tsx +0 -5
  95. package/src/components/shared/Button.tsx +0 -63
  96. package/src/components/shared/ErrorBoundary.tsx +0 -54
  97. package/src/components/shared/FetchOfferErrorState.tsx +0 -35
  98. package/src/components/shared/Icon.tsx +0 -151
  99. package/src/components/shared/IconButton.tsx +0 -42
  100. package/src/components/shared/Modal.tsx +0 -40
  101. package/src/components/shared/NonIdealState.tsx +0 -28
  102. package/src/components/shared/Stamp.tsx +0 -29
  103. package/src/components/shared/Tabs.tsx +0 -36
  104. package/src/custom-elements.ts +0 -13
  105. package/src/examples/client-side/README.md +0 -30
  106. package/src/examples/client-side/index.html +0 -57
  107. package/src/examples/full-stack/README.md +0 -34
  108. package/src/examples/full-stack/index.html +0 -48
  109. package/src/examples/full-stack/server.mjs +0 -158
  110. package/src/examples/just-typescript/.yarn/install-state.gz +0 -0
  111. package/src/examples/just-typescript/README.md +0 -37
  112. package/src/examples/just-typescript/package.json +0 -16
  113. package/src/examples/just-typescript/src/index.html +0 -23
  114. package/src/examples/just-typescript/src/index.ts +0 -36
  115. package/src/examples/just-typescript/yarn.lock +0 -467
  116. package/src/examples/next/README.md +0 -28
  117. package/src/examples/next/next-env.d.ts +0 -5
  118. package/src/examples/next/next.config.js +0 -4
  119. package/src/examples/next/package.json +0 -24
  120. package/src/examples/next/src/app/DuffelComponents.tsx +0 -40
  121. package/src/examples/next/src/app/layout.tsx +0 -18
  122. package/src/examples/next/src/app/page.tsx +0 -9
  123. package/src/examples/next/tsconfig.json +0 -27
  124. package/src/examples/next/yarn.lock +0 -257
  125. package/src/examples/payments-custom-element/README.md +0 -17
  126. package/src/examples/payments-custom-element/index.html +0 -43
  127. package/src/examples/payments-just-typescript/README.md +0 -37
  128. package/src/examples/payments-just-typescript/package.json +0 -16
  129. package/src/examples/payments-just-typescript/src/index.html +0 -23
  130. package/src/examples/payments-just-typescript/src/index.ts +0 -18
  131. package/src/examples/payments-just-typescript/yarn.lock +0 -154
  132. package/src/examples/react-app/README.md +0 -37
  133. package/src/examples/react-app/package.json +0 -20
  134. package/src/examples/react-app/src/index.html +0 -19
  135. package/src/examples/react-app/src/index.tsx +0 -48
  136. package/src/examples/react-app/yarn.lock +0 -219
  137. package/src/fixtures/offers/off_0000AUde3KwTztSRK1cznH.json +0 -497
  138. package/src/fixtures/offers/off_0000AVx4lUFFKW8PsPeQeQ.json +0 -307
  139. package/src/fixtures/offers/off_1.json +0 -488
  140. package/src/fixtures/passengers/mock_passengers.ts +0 -26
  141. package/src/fixtures/seat-maps/off_0000AUde3KwTztSRK1cznH.json +0 -6852
  142. package/src/fixtures/seat-maps/off_0000AVx4lUFFKW8PsPeQeQ.json +0 -1
  143. package/src/fixtures/seat-maps/off_1.json +0 -6852
  144. package/src/index.ts +0 -7
  145. package/src/lib/captureErrorInSentry.ts +0 -42
  146. package/src/lib/compileCreateOrderPayload.ts +0 -63
  147. package/src/lib/createPriceFormatters.ts +0 -73
  148. package/src/lib/fetchFromDuffelAPI.ts +0 -54
  149. package/src/lib/fetchFromFixtures.ts +0 -18
  150. package/src/lib/formatAvailableServices.ts +0 -91
  151. package/src/lib/formatDate.ts +0 -20
  152. package/src/lib/formatSeatMaps.ts +0 -81
  153. package/src/lib/getBaggageServiceDescription.ts +0 -39
  154. package/src/lib/getCabinsForSegmentAndDeck.ts +0 -4
  155. package/src/lib/getCurrencyForSeatMaps.ts +0 -22
  156. package/src/lib/getCurrencyForServices.ts +0 -24
  157. package/src/lib/getFirstSeatElementMatchingCriteria.ts +0 -22
  158. package/src/lib/getPassengerBySegmentList.ts +0 -10
  159. package/src/lib/getPassengerInitials.ts +0 -6
  160. package/src/lib/getPassengerMapById.ts +0 -17
  161. package/src/lib/getPassengerName.ts +0 -41
  162. package/src/lib/getRowNumber.ts +0 -16
  163. package/src/lib/getSegmentList.ts +0 -7
  164. package/src/lib/getServicePriceMapById.ts +0 -20
  165. package/src/lib/getSymbols.ts +0 -22
  166. package/src/lib/getTotalAmountForServices.ts +0 -72
  167. package/src/lib/getTotalQuantity.ts +0 -5
  168. package/src/lib/hasHighLuminance.ts +0 -9
  169. package/src/lib/hasService.ts +0 -24
  170. package/src/lib/hasServiceOfSameMetadataTypeAlreadyBeenSelected.ts +0 -35
  171. package/src/lib/hasWings.ts +0 -8
  172. package/src/lib/isBaggageService.ts +0 -8
  173. package/src/lib/isCancelForAnyReasonService.ts +0 -9
  174. package/src/lib/isFixtureOfferId.ts +0 -4
  175. package/src/lib/isPayloadComplete.ts +0 -11
  176. package/src/lib/isSeatElement.ts +0 -10
  177. package/src/lib/logging.ts +0 -120
  178. package/src/lib/moneyStringFormatter.ts +0 -34
  179. package/src/lib/offerIsExpired.ts +0 -5
  180. package/src/lib/retrieveOffer.ts +0 -56
  181. package/src/lib/retrieveOfferFromDuffelAPI.ts +0 -13
  182. package/src/lib/retrieveSeatMaps.ts +0 -55
  183. package/src/lib/retrieveSeatMapsFromDuffelAPI.ts +0 -13
  184. package/src/lib/setBodyScrollability.ts +0 -7
  185. package/src/lib/validateProps.ts +0 -37
  186. package/src/lib/withPlural.ts +0 -8
  187. package/src/stories/BaggageSelectionModalHeader.stories.tsx +0 -21
  188. package/src/stories/Button.stories.tsx +0 -91
  189. package/src/stories/DuffelAncillaries.stories.tsx +0 -166
  190. package/src/stories/DuffelPayments.stories.tsx +0 -34
  191. package/src/stories/Icon.stories.tsx +0 -35
  192. package/src/stories/IconButton.stories.tsx +0 -25
  193. package/src/stories/PlacesLookup.stories.tsx +0 -22
  194. package/src/styles/colors.css +0 -22
  195. package/src/styles/components/Amenity.css +0 -23
  196. package/src/styles/components/BaggageDisplay.css +0 -25
  197. package/src/styles/components/Button.css +0 -169
  198. package/src/styles/components/Card.css +0 -52
  199. package/src/styles/components/CfarSelectionModal.css +0 -34
  200. package/src/styles/components/Counter.css +0 -18
  201. package/src/styles/components/DuffelPayments.css +0 -42
  202. package/src/styles/components/IconButton.css +0 -63
  203. package/src/styles/components/Legend.css +0 -62
  204. package/src/styles/components/Loader.css +0 -37
  205. package/src/styles/components/LoadingState.css +0 -87
  206. package/src/styles/components/Modal.css +0 -84
  207. package/src/styles/components/PassengerSelect.css +0 -99
  208. package/src/styles/components/PassengersLayout.css +0 -90
  209. package/src/styles/components/PlacesLookup.css +0 -36
  210. package/src/styles/components/Row.css +0 -70
  211. package/src/styles/components/Seat.css +0 -59
  212. package/src/styles/components/SeatInfo.css +0 -61
  213. package/src/styles/components/SeatMap.css +0 -24
  214. package/src/styles/components/SeatSelect.css +0 -92
  215. package/src/styles/components/Segment.css +0 -17
  216. package/src/styles/components/SelectionSegment.css +0 -10
  217. package/src/styles/components/Summary.css +0 -70
  218. package/src/styles/components/Tabs.css +0 -52
  219. package/src/styles/flex.css +0 -5
  220. package/src/styles/font-families.css +0 -47
  221. package/src/styles/global.css +0 -52
  222. package/src/styles/margin.css +0 -3
  223. package/src/styles/spacing.css +0 -18
  224. package/src/styles/transitions.css +0 -3
  225. package/src/styles/typography.css +0 -13
  226. package/src/tests/components/DuffelAncillaries.test.tsx +0 -342
  227. package/src/tests/lib/createPriceFormatters.test.tsx +0 -152
  228. package/src/tests/lib/formatAvailableServices.test.tsx +0 -79
  229. package/src/tests/lib/formatSeatMaps.test.tsx +0 -49
  230. package/src/tests/lib/getCurrencyForServices.test.tsx +0 -44
  231. package/src/tests/lib/hasServiceOfSameMetadataTypeAlreadyBeenSelected.test.ts +0 -86
  232. package/src/tests/lib/logging.test.tsx +0 -32
  233. package/src/tests/lib/moneyStringFormatter.test.tsx +0 -12
  234. package/src/tests/lib/validateProps.test.tsx +0 -57
  235. package/src/types/Aircraft.ts +0 -16
  236. package/src/types/Airline.ts +0 -16
  237. package/src/types/Airport.ts +0 -54
  238. package/src/types/City.ts +0 -21
  239. package/src/types/CreateOrderPayload.ts +0 -99
  240. package/src/types/CurrencyConversion.ts +0 -10
  241. package/src/types/DuffelAncillariesProps.ts +0 -108
  242. package/src/types/Offer.ts +0 -851
  243. package/src/types/Order.ts +0 -6
  244. package/src/types/Place.ts +0 -6
  245. package/src/types/SeatMap.ts +0 -231
  246. package/src/types/index.ts +0 -11
  247. package/tsconfig.json +0 -58
  248. /package/{react-dist/components → components}/DuffelAncillaries/Card.d.ts +0 -0
  249. /package/{react-dist/components → components}/DuffelAncillaries/Counter.d.ts +0 -0
  250. /package/{react-dist/components → components}/DuffelAncillaries/DuffelAncillaries.d.ts +0 -0
  251. /package/{react-dist/components → components}/DuffelAncillaries/DuffelAncillariesCustomElement.d.ts +0 -0
  252. /package/{react-dist/components → components}/DuffelAncillaries/bags/BaggageSelectionCard.d.ts +0 -0
  253. /package/{react-dist/components → components}/DuffelAncillaries/bags/BaggageSelectionController.d.ts +0 -0
  254. /package/{react-dist/components → components}/DuffelAncillaries/bags/BaggageSelectionModal.d.ts +0 -0
  255. /package/{react-dist/components → components}/DuffelAncillaries/bags/BaggageSelectionModalBody.d.ts +0 -0
  256. /package/{react-dist/components → components}/DuffelAncillaries/bags/BaggageSelectionModalBodyPassenger.d.ts +0 -0
  257. /package/{react-dist/components → components}/DuffelAncillaries/bags/BaggageSelectionModalFooter.d.ts +0 -0
  258. /package/{react-dist/components → components}/DuffelAncillaries/bags/BaggageSelectionModalHeader.d.ts +0 -0
  259. /package/{react-dist/components → components}/DuffelAncillaries/bags/IncludedBaggageBanner.d.ts +0 -0
  260. /package/{react-dist/components → components}/DuffelAncillaries/cancel_for_any_reason/CfarSelectionCard.d.ts +0 -0
  261. /package/{react-dist/components → components}/DuffelAncillaries/cancel_for_any_reason/CfarSelectionModal.d.ts +0 -0
  262. /package/{react-dist/components → components}/DuffelAncillaries/cancel_for_any_reason/CfarSelectionModalBody.d.ts +0 -0
  263. /package/{react-dist/components → components}/DuffelAncillaries/cancel_for_any_reason/CfarSelectionModalBodyListItem.d.ts +0 -0
  264. /package/{react-dist/components → components}/DuffelAncillaries/cancel_for_any_reason/CfarSelectionModalFooter.d.ts +0 -0
  265. /package/{react-dist/components → components}/DuffelAncillaries/cancel_for_any_reason/CfarSelectionModalHeader.d.ts +0 -0
  266. /package/{react-dist/components → components}/DuffelAncillaries/seats/Amenity.d.ts +0 -0
  267. /package/{react-dist/components → components}/DuffelAncillaries/seats/DeckSelect.d.ts +0 -0
  268. /package/{react-dist/components → components}/DuffelAncillaries/seats/Element.d.ts +0 -0
  269. /package/{react-dist/components → components}/DuffelAncillaries/seats/EmptyElement.d.ts +0 -0
  270. /package/{react-dist/components → components}/DuffelAncillaries/seats/ExitElement.d.ts +0 -0
  271. /package/{react-dist/components → components}/DuffelAncillaries/seats/Legend.d.ts +0 -0
  272. /package/{react-dist/components → components}/DuffelAncillaries/seats/Row.d.ts +0 -0
  273. /package/{react-dist/components → components}/DuffelAncillaries/seats/RowSection.d.ts +0 -0
  274. /package/{react-dist/components → components}/DuffelAncillaries/seats/SeatElement.d.ts +0 -0
  275. /package/{react-dist/components → components}/DuffelAncillaries/seats/SeatInfo.d.ts +0 -0
  276. /package/{react-dist/components → components}/DuffelAncillaries/seats/SeatMap.d.ts +0 -0
  277. /package/{react-dist/components → components}/DuffelAncillaries/seats/SeatMapUnavailable.d.ts +0 -0
  278. /package/{react-dist/components → components}/DuffelAncillaries/seats/SeatSelectionCard.d.ts +0 -0
  279. /package/{react-dist/components → components}/DuffelAncillaries/seats/SeatSelectionModal.d.ts +0 -0
  280. /package/{react-dist/components → components}/DuffelAncillaries/seats/SeatSelectionModalBody.d.ts +0 -0
  281. /package/{react-dist/components → components}/DuffelAncillaries/seats/SeatSelectionModalFooter.d.ts +0 -0
  282. /package/{react-dist/components → components}/DuffelAncillaries/seats/SeatSelectionModalHeader.d.ts +0 -0
  283. /package/{react-dist/components → components}/DuffelAncillaries/seats/SeatUnavailable.d.ts +0 -0
  284. /package/{react-dist/components → components}/DuffelPayments/DuffelPayments.d.ts +0 -0
  285. /package/{react-dist/components → components}/DuffelPayments/DuffelPaymentsCustomElement.d.ts +0 -0
  286. /package/{react-dist/components → components}/PlacesLookup/PlacesLookup.d.ts +0 -0
  287. /package/{react-dist/components → components}/shared/AnimatedLoaderEllipsis.d.ts +0 -0
  288. /package/{react-dist/components → components}/shared/Button.d.ts +0 -0
  289. /package/{react-dist/components → components}/shared/ErrorBoundary.d.ts +0 -0
  290. /package/{react-dist/components → components}/shared/FetchOfferErrorState.d.ts +0 -0
  291. /package/{react-dist/components → components}/shared/Icon.d.ts +0 -0
  292. /package/{react-dist/components → components}/shared/IconButton.d.ts +0 -0
  293. /package/{react-dist/components → components}/shared/Modal.d.ts +0 -0
  294. /package/{react-dist/components → components}/shared/NonIdealState.d.ts +0 -0
  295. /package/{react-dist/components → components}/shared/Stamp.d.ts +0 -0
  296. /package/{react-dist/components → components}/shared/Tabs.d.ts +0 -0
  297. /package/{react-dist/custom-elements.d.ts → custom-elements.d.ts} +0 -0
  298. /package/{react-dist/index.d.ts → index.d.ts} +0 -0
  299. /package/{react-dist/lib → lib}/captureErrorInSentry.d.ts +0 -0
  300. /package/{react-dist/lib → lib}/compileCreateOrderPayload.d.ts +0 -0
  301. /package/{react-dist/lib → lib}/createPriceFormatters.d.ts +0 -0
  302. /package/{react-dist/lib → lib}/fetchFromDuffelAPI.d.ts +0 -0
  303. /package/{react-dist/lib → lib}/fetchFromFixtures.d.ts +0 -0
  304. /package/{react-dist/lib → lib}/formatAvailableServices.d.ts +0 -0
  305. /package/{react-dist/lib → lib}/formatDate.d.ts +0 -0
  306. /package/{react-dist/lib → lib}/formatSeatMaps.d.ts +0 -0
  307. /package/{react-dist/lib → lib}/getBaggageServiceDescription.d.ts +0 -0
  308. /package/{react-dist/lib → lib}/getCabinsForSegmentAndDeck.d.ts +0 -0
  309. /package/{react-dist/lib → lib}/getCurrencyForSeatMaps.d.ts +0 -0
  310. /package/{react-dist/lib → lib}/getCurrencyForServices.d.ts +0 -0
  311. /package/{react-dist/lib → lib}/getFirstSeatElementMatchingCriteria.d.ts +0 -0
  312. /package/{react-dist/lib → lib}/getPassengerBySegmentList.d.ts +0 -0
  313. /package/{react-dist/lib → lib}/getPassengerInitials.d.ts +0 -0
  314. /package/{react-dist/lib → lib}/getPassengerMapById.d.ts +0 -0
  315. /package/{react-dist/lib → lib}/getPassengerName.d.ts +0 -0
  316. /package/{react-dist/lib → lib}/getRowNumber.d.ts +0 -0
  317. /package/{react-dist/lib → lib}/getSegmentList.d.ts +0 -0
  318. /package/{react-dist/lib → lib}/getServicePriceMapById.d.ts +0 -0
  319. /package/{react-dist/lib → lib}/getSymbols.d.ts +0 -0
  320. /package/{react-dist/lib → lib}/getTotalAmountForServices.d.ts +0 -0
  321. /package/{react-dist/lib → lib}/getTotalQuantity.d.ts +0 -0
  322. /package/{react-dist/lib → lib}/hasHighLuminance.d.ts +0 -0
  323. /package/{react-dist/lib → lib}/hasService.d.ts +0 -0
  324. /package/{react-dist/lib → lib}/hasServiceOfSameMetadataTypeAlreadyBeenSelected.d.ts +0 -0
  325. /package/{react-dist/lib → lib}/hasWings.d.ts +0 -0
  326. /package/{react-dist/lib → lib}/isBaggageService.d.ts +0 -0
  327. /package/{react-dist/lib → lib}/isCancelForAnyReasonService.d.ts +0 -0
  328. /package/{react-dist/lib → lib}/isFixtureOfferId.d.ts +0 -0
  329. /package/{react-dist/lib → lib}/isPayloadComplete.d.ts +0 -0
  330. /package/{react-dist/lib → lib}/isSeatElement.d.ts +0 -0
  331. /package/{react-dist/lib → lib}/logging.d.ts +0 -0
  332. /package/{react-dist/lib → lib}/moneyStringFormatter.d.ts +0 -0
  333. /package/{react-dist/lib → lib}/offerIsExpired.d.ts +0 -0
  334. /package/{react-dist/lib → lib}/retrieveOffer.d.ts +0 -0
  335. /package/{react-dist/lib → lib}/retrieveOfferFromDuffelAPI.d.ts +0 -0
  336. /package/{react-dist/lib → lib}/retrieveSeatMaps.d.ts +0 -0
  337. /package/{react-dist/lib → lib}/retrieveSeatMapsFromDuffelAPI.d.ts +0 -0
  338. /package/{react-dist/lib → lib}/setBodyScrollability.d.ts +0 -0
  339. /package/{react-dist/lib → lib}/validateProps.d.ts +0 -0
  340. /package/{react-dist/lib → lib}/withPlural.d.ts +0 -0
  341. /package/{react-dist/types → types}/Aircraft.d.ts +0 -0
  342. /package/{react-dist/types → types}/Airline.d.ts +0 -0
  343. /package/{react-dist/types → types}/Airport.d.ts +0 -0
  344. /package/{react-dist/types → types}/City.d.ts +0 -0
  345. /package/{react-dist/types → types}/CreateOrderPayload.d.ts +0 -0
  346. /package/{react-dist/types → types}/CurrencyConversion.d.ts +0 -0
  347. /package/{react-dist/types → types}/DuffelAncillariesProps.d.ts +0 -0
  348. /package/{react-dist/types → types}/Offer.d.ts +0 -0
  349. /package/{react-dist/types → types}/Order.d.ts +0 -0
  350. /package/{react-dist/types → types}/Place.d.ts +0 -0
  351. /package/{react-dist/types → types}/SeatMap.d.ts +0 -0
  352. /package/{react-dist/types → types}/index.d.ts +0 -0
@@ -1,342 +0,0 @@
1
- import { fireEvent, render } from "@testing-library/react";
2
- import React from "react";
3
- import { DuffelAncillaries } from "../../components/DuffelAncillaries/DuffelAncillaries";
4
- import mockPassengers from "../../fixtures/passengers/mock_passengers";
5
- import {
6
- DuffelAncillariesPropsWithOffersAndSeatMaps,
7
- OnPayloadReady,
8
- } from "../../types/DuffelAncillariesProps";
9
- import { Offer } from "../../types/Offer";
10
- import { SeatMap } from "../../types/SeatMap";
11
-
12
- /* eslint-disable @typescript-eslint/no-var-requires */
13
- const MOCK_OFFER: Offer = require("../../fixtures/offers/off_1.json");
14
- const MOCK_SEAT_MAPS: SeatMap[] = require("../../fixtures/seat-maps/off_1.json");
15
- /* eslint-enable @typescript-eslint/no-var-requires */
16
-
17
- const defaultProps: Omit<
18
- DuffelAncillariesPropsWithOffersAndSeatMaps,
19
- "onPayloadReady"
20
- > = {
21
- offer: MOCK_OFFER,
22
- seat_maps: MOCK_SEAT_MAPS,
23
- passengers: mockPassengers,
24
- services: ["bags", "seats", "cancel_for_any_reason"],
25
- };
26
-
27
- const ExampleWithoutServices: React.FC = () => (
28
- <DuffelAncillaries
29
- onPayloadReady={jest.fn()}
30
- passengers={[]}
31
- services={[]}
32
- offer_id="offer_id"
33
- client_key="client_key"
34
- />
35
- );
36
-
37
- describe("DuffelAncillaries", () => {
38
- test("should throw an error when services is empty", () => {
39
- expect(() => render(<ExampleWithoutServices />)).toThrow(
40
- `You must provide at least one service in the "services" prop. Valid services: ["bags", "seats", "cancel_for_any_reason"]`
41
- );
42
- });
43
-
44
- test("should select baggage services", async () => {
45
- let onPayloadReadyCallCount = 0;
46
- const onPayloadReady: OnPayloadReady = jest.fn((data, metadata) => {
47
- if (++onPayloadReadyCallCount === 2) {
48
- expect(data.selected_offers[0]).toBe(MOCK_OFFER.id);
49
- expect(metadata.baggage_services.length).toBe(2);
50
- }
51
- });
52
- const { getByText, getByTestId, getByTitle } = render(
53
- <DuffelAncillaries {...defaultProps} onPayloadReady={onPayloadReady} />
54
- );
55
-
56
- fireEvent.click(getByTitle("Select extra baggage"));
57
-
58
- // There are no services for the first segment of the offer.
59
- fireEvent.click(getByTestId("confirm-selection-for-baggage"));
60
-
61
- for (const available_service of MOCK_OFFER.available_services) {
62
- if (available_service.type !== "baggage") continue;
63
-
64
- for (const passengerId of available_service.passenger_ids) {
65
- const testId = `counter--${available_service.id}--${passengerId}-plus`;
66
- const addBaggageButton = getByTestId(testId);
67
- fireEvent.click(addBaggageButton);
68
- }
69
- }
70
-
71
- fireEvent.click(getByTestId("confirm-selection-for-baggage"));
72
- expect(getByText(/2 bags added/i));
73
-
74
- // The component is always called at least once
75
- // when the state is set with an offer.
76
- expect(onPayloadReady).toBeCalledTimes(2);
77
- });
78
-
79
- test("should select seat services", () => {
80
- let onPayloadReadyCallCount = 0;
81
- const onPayloadReady: OnPayloadReady = jest.fn((data, metadata) => {
82
- if (++onPayloadReadyCallCount === 2) {
83
- expect(data.selected_offers[0]).toBe(MOCK_OFFER.id);
84
- expect(metadata.seat_services.length).toBe(4);
85
- }
86
- });
87
- const { getByText, getByTestId, getByTitle } = render(
88
- <DuffelAncillaries {...defaultProps} onPayloadReady={onPayloadReady} />
89
- );
90
-
91
- const seatCard = getByTitle("Select seats");
92
- fireEvent.click(seatCard);
93
-
94
- fireEvent.click(getByTestId("seat-28E"));
95
- fireEvent.click(getByTestId("confirm-selection-for-seats"));
96
-
97
- fireEvent.click(getByTestId("seat-28F"));
98
- fireEvent.click(getByTestId("confirm-selection-for-seats"));
99
-
100
- fireEvent.click(getByTestId("seat-28E"));
101
- fireEvent.click(getByTestId("confirm-selection-for-seats"));
102
-
103
- fireEvent.click(getByTestId("seat-28F"));
104
- fireEvent.click(getByTestId("confirm-selection-for-seats"));
105
-
106
- expect(getByText(/4 seats selected/i));
107
-
108
- // The component is always called at least once
109
- // when the state is set with an offer.
110
- expect(onPayloadReady).toBeCalledTimes(2);
111
- });
112
-
113
- test("should select CFAR service", () => {
114
- let onPayloadReadyCallCount = 0;
115
- const onPayloadReady: OnPayloadReady = jest.fn((data, metadata) => {
116
- if (++onPayloadReadyCallCount === 2) {
117
- expect(data.selected_offers[0]).toBe(MOCK_OFFER.id);
118
- expect(metadata.cancel_for_any_reason_services.length).toBe(1);
119
- expect(data.services.length).toBe(1);
120
- }
121
- });
122
- const { getByText, getByTestId, getByTitle } = render(
123
- <DuffelAncillaries {...defaultProps} onPayloadReady={onPayloadReady} />
124
- );
125
-
126
- fireEvent.click(getByTitle("Add cancel for any reason"));
127
-
128
- fireEvent.click(getByTestId("confirm-selection-for-cfar"));
129
- expect(getByText(/Your trip is protected for £97.45/i));
130
-
131
- // The component is always called at least once
132
- // when the state is set with an offer.
133
- expect(onPayloadReady).toBeCalledTimes(2);
134
- });
135
-
136
- test("should work with markup", () => {
137
- let onPayloadReadyCallCount = 0;
138
- const onPayloadReady: OnPayloadReady = jest.fn((data, metadata) => {
139
- if (++onPayloadReadyCallCount === 2) {
140
- expect(data.selected_offers[0]).toBe(MOCK_OFFER.id);
141
- expect(metadata.baggage_services.length).toBe(2);
142
-
143
- // Confirm that the markup is applied.
144
- expect(
145
- metadata.baggage_services[0].serviceInformation?.total_amount
146
- ).toBe("23");
147
- }
148
- });
149
- const { getByText, getByTestId, getByTitle } = render(
150
- <DuffelAncillaries
151
- {...defaultProps}
152
- onPayloadReady={onPayloadReady}
153
- markup={{
154
- bags: { amount: 1, rate: 0.1 },
155
- seats: { amount: 2, rate: 0.2 },
156
- cancel_for_any_reason: { amount: 3, rate: 0.3 },
157
- }}
158
- />
159
- );
160
-
161
- /**
162
- * First, select bags.
163
- */
164
-
165
- fireEvent.click(getByTitle("Select extra baggage"));
166
-
167
- // There are no services for the first segment of the offer.
168
- fireEvent.click(getByTestId("confirm-selection-for-baggage"));
169
-
170
- const totalPriceLabel = getByTestId("baggage-total-amount-label");
171
- expect(totalPriceLabel.textContent).toBe("+ £0.00");
172
-
173
- for (const available_service of MOCK_OFFER.available_services) {
174
- if (available_service.type !== "baggage") continue;
175
-
176
- for (const passengerId of available_service.passenger_ids) {
177
- const priceLabelTestId = `price-label--${available_service.id}--${passengerId}`;
178
- const priceLabel = getByTestId(priceLabelTestId);
179
- expect(priceLabel.textContent).toBe("£23.00");
180
-
181
- const addButtonTestId = `counter--${available_service.id}--${passengerId}-plus`;
182
- const addBaggageButton = getByTestId(addButtonTestId);
183
- fireEvent.click(addBaggageButton);
184
- }
185
- }
186
-
187
- // Price should now have been updated.
188
- expect(totalPriceLabel.textContent).toBe("+ £46.00");
189
-
190
- fireEvent.click(getByTestId("confirm-selection-for-baggage"));
191
- expect(getByText(/2 bags added for £46.00/i));
192
-
193
- /**
194
- * Now, select seats.
195
- */
196
-
197
- const seatCard = getByTitle("Select seats");
198
- fireEvent.click(seatCard);
199
-
200
- fireEvent.click(getByTestId("seat-28E"));
201
- fireEvent.click(getByTestId("confirm-selection-for-seats"));
202
-
203
- fireEvent.click(getByTestId("seat-28F"));
204
- fireEvent.click(getByTestId("confirm-selection-for-seats"));
205
-
206
- fireEvent.click(getByTestId("seat-28E"));
207
- fireEvent.click(getByTestId("confirm-selection-for-seats"));
208
-
209
- fireEvent.click(getByTestId("seat-28F"));
210
- fireEvent.click(getByTestId("confirm-selection-for-seats"));
211
-
212
- expect(getByText(/4 seats selected for £104.00/i));
213
-
214
- /**
215
- * Now, select CFAR.
216
- */
217
-
218
- const cfarCard = getByTitle("Add cancel for any reason");
219
- fireEvent.click(cfarCard);
220
-
221
- fireEvent.click(getByTestId("confirm-selection-for-cfar"));
222
-
223
- expect(getByText(/Your trip is protected for £129.69/i));
224
-
225
- // The component is always called at least once
226
- // when the state is set with an offer.
227
- expect(onPayloadReady).toBeCalledTimes(4);
228
- });
229
-
230
- test("should work with priceFormatters", () => {
231
- let onPayloadReadyCallCount = 0;
232
- const onPayloadReady: OnPayloadReady = jest.fn((data, metadata) => {
233
- if (++onPayloadReadyCallCount === 2) {
234
- expect(data.selected_offers[0]).toBe(MOCK_OFFER.id);
235
- expect(metadata.baggage_services.length).toBe(2);
236
-
237
- // Confirm that the markup is applied.
238
- expect(
239
- metadata.baggage_services[0].serviceInformation?.total_amount
240
- ).toBe("40");
241
- expect(
242
- metadata.baggage_services[0].serviceInformation?.total_currency
243
- ).toBe("Duffel house points");
244
- }
245
- });
246
- const currency = "Duffel house points";
247
- const { getByText, getByTestId, getByTitle } = render(
248
- <DuffelAncillaries
249
- {...defaultProps}
250
- onPayloadReady={onPayloadReady}
251
- priceFormatters={{
252
- bags: (amount) => {
253
- return {
254
- amount: amount * 2,
255
- currency,
256
- };
257
- },
258
- seats: (amount) => {
259
- return {
260
- amount: amount / 2,
261
- currency,
262
- };
263
- },
264
- cancel_for_any_reason: () => {
265
- return {
266
- amount: 100,
267
- currency,
268
- };
269
- },
270
- }}
271
- />
272
- );
273
-
274
- /**
275
- * First, select bags.
276
- */
277
-
278
- fireEvent.click(getByTitle("Select extra baggage"));
279
-
280
- // There are no services for the first segment of the offer.
281
- fireEvent.click(getByTestId("confirm-selection-for-baggage"));
282
-
283
- const totalPriceLabel = getByTestId("baggage-total-amount-label");
284
- expect(totalPriceLabel.textContent).toBe("+ 0 Duffel house points");
285
-
286
- for (const available_service of MOCK_OFFER.available_services) {
287
- if (available_service.type !== "baggage") continue;
288
-
289
- for (const passengerId of available_service.passenger_ids) {
290
- const priceLabelTestId = `price-label--${available_service.id}--${passengerId}`;
291
- const priceLabel = getByTestId(priceLabelTestId);
292
- expect(priceLabel.textContent).toBe("40 Duffel house points");
293
-
294
- const addButtonTestId = `counter--${available_service.id}--${passengerId}-plus`;
295
- const addBaggageButton = getByTestId(addButtonTestId);
296
- fireEvent.click(addBaggageButton);
297
- }
298
- }
299
-
300
- // Price should now have been updated.
301
- expect(totalPriceLabel.textContent).toBe("+ 80 Duffel house points");
302
-
303
- fireEvent.click(getByTestId("confirm-selection-for-baggage"));
304
- expect(getByText(/2 bags added for 80 Duffel house points/i));
305
-
306
- /**
307
- * Now, select seats.
308
- */
309
-
310
- const seatCard = getByTitle("Select seats");
311
- fireEvent.click(seatCard);
312
-
313
- fireEvent.click(getByTestId("seat-28E"));
314
- fireEvent.click(getByTestId("confirm-selection-for-seats"));
315
-
316
- fireEvent.click(getByTestId("seat-28F"));
317
- fireEvent.click(getByTestId("confirm-selection-for-seats"));
318
-
319
- fireEvent.click(getByTestId("seat-28E"));
320
- fireEvent.click(getByTestId("confirm-selection-for-seats"));
321
-
322
- fireEvent.click(getByTestId("seat-28F"));
323
- fireEvent.click(getByTestId("confirm-selection-for-seats"));
324
-
325
- expect(getByText(/4 seats selected for 40 Duffel house points/i));
326
-
327
- /**
328
- * Now, select CFAR.
329
- */
330
-
331
- const cfarCard = getByTitle("Add cancel for any reason");
332
- fireEvent.click(cfarCard);
333
-
334
- fireEvent.click(getByTestId("confirm-selection-for-cfar"));
335
-
336
- expect(getByText(/Your trip is protected for 100 Duffel house points/i));
337
-
338
- // The component is always called at least once
339
- // when the state is set with an offer.
340
- expect(onPayloadReady).toBeCalledTimes(4);
341
- });
342
- });
@@ -1,152 +0,0 @@
1
- import { createPriceFormatters } from "../../lib/createPriceFormatters";
2
-
3
- describe("createPriceFormatters", () => {
4
- it("should return an empty object if neither markup nor priceFormatters are supplied", () => {
5
- const formatters = createPriceFormatters(undefined, undefined);
6
- expect(formatters).toEqual({});
7
- });
8
-
9
- it("should return an empty object if both markup and priceFormatters are empty", () => {
10
- const formatters = createPriceFormatters({}, {});
11
- expect(formatters).toEqual({});
12
- });
13
-
14
- it("should convert the markup into a price formatter for bags", () => {
15
- const markup = {
16
- rate: 0.1,
17
- amount: 100,
18
- };
19
-
20
- const formatters = createPriceFormatters({ bags: markup }, {});
21
-
22
- // Force unwrap the price formatter and use 'any' to avoid type errors.
23
- // We know this is safe because we created the function right above this.
24
- const formattedPrice = formatters.bags!(100, "GBP", {} as any);
25
-
26
- /**
27
- * Note: This test is also confirming that we apply the rate, followed by
28
- * the amount, rather than the other way around.
29
- * For example, if we applied the amount first, the result would be 220.
30
- */
31
-
32
- const originalPrice = 100;
33
- const expectedFormattedPrice =
34
- originalPrice * (1 + markup.rate) + markup.amount;
35
-
36
- expect(formattedPrice).toEqual({
37
- amount: expectedFormattedPrice,
38
- currency: "GBP",
39
- });
40
-
41
- expect(formatters.seats).toBeUndefined();
42
- });
43
-
44
- it("should convert the markup into a price formatter for seats", () => {
45
- const markup = {
46
- rate: 0.1,
47
- amount: 100,
48
- };
49
-
50
- const formatters = createPriceFormatters({ seats: markup }, {});
51
-
52
- // Force unwrap the price formatter and use 'any' to avoid type errors.
53
- // We know this is safe because we created the function right above this.
54
- const formattedPrice = formatters.seats!(100, "GBP", {} as any);
55
-
56
- const originalPrice = 100;
57
- const expectedFormattedPrice =
58
- originalPrice * (1 + markup.rate) + markup.amount;
59
-
60
- expect(formattedPrice).toEqual({
61
- amount: expectedFormattedPrice,
62
- currency: "GBP",
63
- });
64
- expect(formatters.bags).toBeUndefined();
65
- });
66
-
67
- it("should convert the markup into a price formatter for both bags and seats", () => {
68
- const formatters = createPriceFormatters(
69
- {
70
- bags: {
71
- rate: 0.5,
72
- amount: 1,
73
- },
74
- seats: {
75
- rate: 0.1,
76
- amount: 100,
77
- },
78
- },
79
- undefined
80
- );
81
-
82
- // Force unwrap the price formatter and use 'any' to avoid type errors.
83
- // We know this is safe because we created the function right above this.
84
- const formattedPriceForBags = formatters.bags!(100, "GBP", {} as any);
85
- expect(formattedPriceForBags).toEqual({ amount: 151, currency: "GBP" });
86
-
87
- const formattedPriceForSeats = formatters.seats!(100, "GBP", {} as any);
88
- expect(formattedPriceForSeats).toEqual({ amount: 210, currency: "GBP" });
89
- });
90
-
91
- it("should pass through pre-defined priceFormatters unchanged", () => {
92
- const priceFormatters = {
93
- bags: (amount: number) => ({ amount: amount + 100 }),
94
- seats: (amount: number) => ({ amount: amount + 200 }),
95
- };
96
-
97
- const formatters = createPriceFormatters(undefined, priceFormatters);
98
-
99
- // Pass the same arguments to both the priceFormatters and the formatters
100
- // to ensure they're the same functions.
101
- expect(formatters.bags!(100, "GBP", {} as any)).toEqual(
102
- priceFormatters.bags(100)
103
- );
104
- expect(formatters.seats!(100, "GBP", {} as any)).toEqual(
105
- priceFormatters.seats(100)
106
- );
107
- });
108
-
109
- it("should allow markup and priceFormatters to be mixed if they're for different services", () => {
110
- const markup = {
111
- bags: {
112
- rate: 0.1,
113
- amount: 100,
114
- },
115
- };
116
-
117
- const priceFormatters = {
118
- seats: (amount: number) => ({ amount: amount + 100 }),
119
- };
120
-
121
- const formatters = createPriceFormatters(markup, priceFormatters);
122
-
123
- expect(formatters.bags!(100, "GBP", {} as any)).toEqual({
124
- amount: 210,
125
- currency: "GBP",
126
- });
127
- expect(formatters.seats!(100, "GBP", {} as any)).toEqual(
128
- priceFormatters.seats(100)
129
- );
130
- });
131
-
132
- it("should throw when both markup and priceFormatters are supplied", () => {
133
- expect(() => {
134
- createPriceFormatters(
135
- {
136
- bags: {
137
- rate: 0.1,
138
- amount: 100,
139
- },
140
- seats: {
141
- rate: 0.2,
142
- amount: 100,
143
- },
144
- },
145
- {
146
- bags: () => ({ amount: 100 }),
147
- seats: () => ({ amount: 100 }),
148
- }
149
- );
150
- }).toThrowError();
151
- });
152
- });
@@ -1,79 +0,0 @@
1
- import { formatAvailableServices } from "../../lib/formatAvailableServices";
2
- import { OfferAvailableServiceBaggage } from "../../types/Offer";
3
-
4
- /* eslint-disable @typescript-eslint/no-var-requires */
5
- const offer = require("../../fixtures/offers/off_1.json");
6
- /* eslint-enable @typescript-eslint/no-var-requires */
7
-
8
- describe("formatAvailableServices", () => {
9
- it("should return the offer unchanged if no formatters are passed in", () => {
10
- const result = formatAvailableServices(offer);
11
- expect(result).toBe(offer);
12
- });
13
-
14
- it("should return the offer unchanged if the formatters are empty", () => {
15
- const result = formatAvailableServices(offer, {});
16
- expect(result).toEqual(offer);
17
- });
18
-
19
- it("should transform the price and currency of available services correctly", () => {
20
- const result = formatAvailableServices(offer, {
21
- bags: () => ({ amount: 100, currency: "Duffel points" }),
22
- cancel_for_any_reason: () => ({ amount: 200, currency: "Duffel points" }),
23
- });
24
- expect(result.available_services[0].total_amount).toBe("100");
25
- expect(result.available_services[0].total_currency).toBe("Duffel points");
26
-
27
- expect(result.available_services[2].total_amount).toBe("200");
28
- expect(result.available_services[2].total_currency).toBe("Duffel points");
29
- });
30
-
31
- it("should throw if more than one currency is used", () => {
32
- const mockAvailableService = {
33
- type: "baggage",
34
- total_amount: "100",
35
- total_currency: "GBP",
36
- maximum_quantity: 1,
37
- passenger_ids: [],
38
- segment_ids: [],
39
- metadata: {
40
- type: "checked",
41
- maximum_depth_cm: 25,
42
- maximum_height_cm: 55,
43
- maximum_length_cm: 35,
44
- maximum_weight_kg: 23,
45
- },
46
- };
47
-
48
- const availableServicesWithDifferentCurrencies: OfferAvailableServiceBaggage[] =
49
- [
50
- {
51
- ...mockAvailableService,
52
- id: "1",
53
- } as OfferAvailableServiceBaggage,
54
- {
55
- ...mockAvailableService,
56
- id: "2",
57
- } as OfferAvailableServiceBaggage,
58
- ];
59
-
60
- expect(() => {
61
- formatAvailableServices(
62
- {
63
- ...offer,
64
- available_services: availableServicesWithDifferentCurrencies,
65
- },
66
- {
67
- bags: (amount, _currency, service) => {
68
- return {
69
- amount,
70
- // Change the currency for each service,
71
- // so that the function throws.
72
- currency: service.id === "1" ? "GBP" : "USD",
73
- };
74
- },
75
- }
76
- );
77
- }).toThrow();
78
- });
79
- });
@@ -1,49 +0,0 @@
1
- import { formatSeatMaps } from "../../lib/formatSeatMaps";
2
- import { getFirstSeatElementMatchingCriteria } from "../../lib/getFirstSeatElementMatchingCriteria";
3
- import { SeatMapCabinRowSectionElementSeat } from "../../types/SeatMap";
4
-
5
- /* eslint-disable @typescript-eslint/no-var-requires */
6
- const seatMaps = require("../../fixtures/seat-maps/off_1.json");
7
- /* eslint-enable @typescript-eslint/no-var-requires */
8
-
9
- describe("formatSeatMaps", () => {
10
- it("should return the seat maps unchanged if no formatter is passed in", () => {
11
- const result = formatSeatMaps(seatMaps);
12
- expect(result).toBe(seatMaps);
13
- });
14
-
15
- it("should format seat maps price and currency correctly", () => {
16
- const result = formatSeatMaps(seatMaps, () => ({
17
- amount: 100,
18
- currency: "Duffel points",
19
- }));
20
- const firstElementWithServices = getFirstSeatElementMatchingCriteria(
21
- result,
22
- (element) =>
23
- element.type === "seat" && element.available_services.length > 0
24
- ) as SeatMapCabinRowSectionElementSeat;
25
-
26
- expect(firstElementWithServices?.available_services[0].total_amount).toBe(
27
- "100"
28
- );
29
- expect(firstElementWithServices?.available_services[0].total_currency).toBe(
30
- "Duffel points"
31
- );
32
- });
33
-
34
- it("should throw if more than one currency is used", () => {
35
- expect(() => {
36
- // Keep track of how many times the function has been called.
37
- // It's a basic hack to simulate different currencies being used,
38
- // causing the error to be thrown.
39
- let numberOfCalls = 0;
40
- formatSeatMaps(seatMaps, () => {
41
- numberOfCalls++;
42
- return {
43
- amount: 100,
44
- currency: numberOfCalls % 2 === 0 ? "GBP" : "USD",
45
- };
46
- });
47
- }).toThrow();
48
- });
49
- });
@@ -1,44 +0,0 @@
1
- import { getCurrencyForServices } from "../../lib/getCurrencyForServices";
2
- import { Offer } from "../../types/Offer";
3
-
4
- describe("getCurrencyForServices", () => {
5
- it("should return GBP when the first service has that currency", () => {
6
- const offer = {
7
- available_services: [
8
- {
9
- type: "baggage",
10
- total_currency: "GBP",
11
- },
12
- {
13
- type: "baggage",
14
- total_currency: "USD",
15
- },
16
- ],
17
- };
18
- expect(getCurrencyForServices(offer as Offer, "baggage")).toEqual("GBP");
19
- });
20
-
21
- it("should throw when there are no available services", () => {
22
- const offer = {
23
- available_services: [],
24
- };
25
- // Using 'any' here because we want to test the error message, not the type.
26
- expect(() => getCurrencyForServices(offer as any, "baggage")).toThrow();
27
- });
28
-
29
- it("should throw when there are no available services matching the type requested", () => {
30
- const offer = {
31
- available_services: [
32
- {
33
- type: "seat",
34
- total_currency: "GBP",
35
- },
36
- {
37
- type: "seat",
38
- total_currency: "GBP",
39
- },
40
- ],
41
- };
42
- expect(() => getCurrencyForServices(offer as Offer, "baggage")).toThrow();
43
- });
44
- });