@jetshop/core 5.13.12-0 → 5.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (559) hide show
  1. package/ChannelHandler/CategoryPathnameRedirectQuery.gql +9 -9
  2. package/ChannelHandler/ChannelHandler.d.ts +52 -50
  3. package/ChannelHandler/ChannelHandler.js +114 -108
  4. package/ChannelHandler/ChannelHandler.js.map +1 -1
  5. package/ChannelHandler/PagePathnameRedirectQuery.gql +9 -9
  6. package/ChannelHandler/PreserveRedirectRouteQuery.gql +19 -19
  7. package/ChannelHandler/ProductPathnameRedirectQuery.gql +9 -9
  8. package/ChannelHandler/StartPagePathnameRedirectQuery.gql +9 -9
  9. package/ChannelHandler/channelUtils.d.ts +72 -68
  10. package/ChannelHandler/channelUtils.js +311 -266
  11. package/ChannelHandler/channelUtils.js.map +1 -1
  12. package/ChannelHandler/redirectUtils.d.ts +4 -4
  13. package/ChannelHandler/redirectUtils.js +49 -49
  14. package/ChannelHandler/redirectUtils.test.js +524 -538
  15. package/ChannelHandler/redirectUtilsGroupedChannels.test.js +784 -0
  16. package/analytics/Analytics.d.ts +18 -18
  17. package/analytics/Analytics.js +56 -56
  18. package/analytics/AnalyticsProvider.d.ts +42 -42
  19. package/analytics/AnalyticsProvider.js +177 -177
  20. package/analytics/AnalyticsProvider.js.map +1 -1
  21. package/analytics/deprecatedTracking.d.ts +17 -17
  22. package/analytics/deprecatedTracking.js +32 -32
  23. package/analytics/integrations/ga4.d.ts +23 -23
  24. package/analytics/integrations/ga4.js +144 -145
  25. package/analytics/integrations/ga4.js.map +1 -1
  26. package/analytics/integrations/gtag/gtag.d.ts +8 -8
  27. package/analytics/integrations/gtag/gtag.js +180 -180
  28. package/analytics/integrations/gtag/index.d.ts +1 -1
  29. package/analytics/integrations/gtag/index.js +1 -1
  30. package/analytics/integrations/gtm/index.d.ts +12 -12
  31. package/analytics/integrations/gtm/index.js +200 -200
  32. package/analytics/integrations/gtm/referrerModifier.d.ts +1 -1
  33. package/analytics/integrations/gtm/referrerModifier.js +61 -61
  34. package/analytics/integrations/releware/index.d.ts +3 -3
  35. package/analytics/integrations/releware/index.js +38 -38
  36. package/analytics/integrations/unslugify.d.ts +1 -1
  37. package/analytics/integrations/unslugify.js +15 -17
  38. package/analytics/integrations/unslugify.js.map +1 -1
  39. package/analytics/trackerRegistry.d.ts +101 -101
  40. package/analytics/trackerRegistry.js +219 -219
  41. package/analytics/trackerRegistry.test.js +160 -160
  42. package/analytics/tracking.d.ts +14 -14
  43. package/analytics/tracking.js +71 -71
  44. package/analytics/utils/breadcrumbsWithoutProduct.d.ts +1 -1
  45. package/analytics/utils/breadcrumbsWithoutProduct.js +8 -8
  46. package/analytics/utils/script.d.ts +8 -8
  47. package/analytics/utils/script.js +39 -39
  48. package/analytics/webVitals.d.ts +5 -5
  49. package/analytics/webVitals.js +38 -38
  50. package/boot/AuthHandler.d.ts +14 -14
  51. package/boot/AuthHandler.js +38 -38
  52. package/boot/ChannelsQuery.gql +7 -7
  53. package/boot/PreviewHandler.d.ts +7 -7
  54. package/boot/PreviewHandler.js +13 -13
  55. package/boot/SharedTree.d.ts +25 -25
  56. package/boot/SharedTree.js +28 -28
  57. package/boot/addMissingConfig.d.ts +5 -5
  58. package/boot/addMissingConfig.js +33 -33
  59. package/boot/apollo.d.ts +21 -21
  60. package/boot/apollo.js +197 -197
  61. package/boot/client/entrypoint.d.ts +1 -1
  62. package/boot/client/entrypoint.js +4 -4
  63. package/boot/client/index.d.ts +1 -1
  64. package/boot/client/index.js +1 -1
  65. package/boot/client/startClient.d.ts +4 -4
  66. package/boot/client/startClient.js +142 -142
  67. package/boot/client-schema.gql +59 -59
  68. package/boot/server/IntervalQuery.d.ts +32 -32
  69. package/boot/server/IntervalQuery.js +94 -94
  70. package/boot/server/IntervalQuery.test.js +280 -280
  71. package/boot/server/PersistedApolloClient.d.ts +20 -20
  72. package/boot/server/PersistedApolloClient.js +39 -39
  73. package/boot/server/PersistedApolloClient.test.js +233 -233
  74. package/boot/server/asyncErrorHandler.d.ts +3 -3
  75. package/boot/server/asyncErrorHandler.js +4 -4
  76. package/boot/server/breakpointMiddleware.d.ts +3 -3
  77. package/boot/server/breakpointMiddleware.js +9 -9
  78. package/boot/server/createApolloServer.d.ts +28 -28
  79. package/boot/server/createApolloServer.js +143 -143
  80. package/boot/server/createApolloServer.test.js +114 -114
  81. package/boot/server/createDevServer.d.ts +14 -14
  82. package/boot/server/createDevServer.js +29 -29
  83. package/boot/server/createRenderer.d.ts +28 -28
  84. package/boot/server/createRenderer.js +235 -235
  85. package/boot/server/createServer.d.ts +14 -14
  86. package/boot/server/createServer.js +41 -41
  87. package/boot/server/entrypoint.d.ts +1 -1
  88. package/boot/server/entrypoint.js +35 -35
  89. package/boot/server/getPrefetchFiles.d.ts +10 -10
  90. package/boot/server/getPrefetchFiles.js +19 -19
  91. package/boot/server/getPreloadAssets.d.ts +10 -10
  92. package/boot/server/getPreloadAssets.js +17 -17
  93. package/boot/server/getPreloadAssets.test.js +133 -133
  94. package/boot/server/index.d.ts +9 -9
  95. package/boot/server/index.js +122 -122
  96. package/boot/server/listen.d.ts +13 -13
  97. package/boot/server/listen.js +16 -16
  98. package/boot/server/overwriteServerIntl.js +1 -1
  99. package/boot/server/persistedQueries/PersistedClient.d.ts +22 -22
  100. package/boot/server/persistedQueries/PersistedClient.js +57 -57
  101. package/boot/server/persistedQueries/__tests__/getPersistedQueriesForRequest.test.js +201 -201
  102. package/boot/server/persistedQueries/__tests__/mockQuery.gql +6 -6
  103. package/boot/server/persistedQueries/getPersistedQueriesForRequest.d.ts +3 -3
  104. package/boot/server/persistedQueries/getPersistedQueriesForRequest.js +26 -26
  105. package/boot/server/saleSource.test.js +39 -39
  106. package/boot/server/salesSource.d.ts +8 -8
  107. package/boot/server/salesSource.js +15 -15
  108. package/boot/utils/__tests__/uid.js +47 -47
  109. package/boot/utils/createIntOptions.d.ts +6 -6
  110. package/boot/utils/createIntOptions.js +18 -18
  111. package/boot/utils/queryLoggingMiddleware.d.ts +2 -2
  112. package/boot/utils/queryLoggingMiddleware.js +14 -14
  113. package/boot/utils/uid.d.ts +3 -3
  114. package/boot/utils/uid.js +19 -19
  115. package/cart/AddToCartFormik.d.ts +42 -42
  116. package/cart/AddToCartFormik.js +76 -76
  117. package/cart/useAddToCart.d.ts +88 -88
  118. package/cart/useAddToCart.js +117 -117
  119. package/ci/.gitlab-ci.yml +3 -3
  120. package/components/Auth/CustomerUpdateForm.d.ts +32 -32
  121. package/components/Auth/CustomerUpdateForm.js +121 -121
  122. package/components/Auth/ForgotPasswordProvider.d.ts +71 -71
  123. package/components/Auth/ForgotPasswordProvider.js +56 -56
  124. package/components/Auth/ResetPasswordProvider.d.ts +88 -88
  125. package/components/Auth/ResetPasswordProvider.js +77 -77
  126. package/components/Auth/SSN.d.ts +12 -12
  127. package/components/Auth/SSN.js +34 -34
  128. package/components/Auth/SSNLookupContainer.d.ts +15 -15
  129. package/components/Auth/SSNLookupContainer.js +19 -19
  130. package/components/Auth/SignupFormContainer.d.ts +19 -19
  131. package/components/Auth/SignupFormContainer.js +81 -81
  132. package/components/Auth/UpdatePasswordForm.d.ts +44 -44
  133. package/components/Auth/UpdatePasswordForm.js +97 -97
  134. package/components/Auth/formFieldsFromSettings.d.ts +65 -65
  135. package/components/Auth/formFieldsFromSettings.js +76 -76
  136. package/components/Auth/formFieldsFromSettings.js.map +1 -1
  137. package/components/Auth/formatSignupInput.d.ts +8 -8
  138. package/components/Auth/formatSignupInput.js +42 -42
  139. package/components/Auth/signup-context.d.ts +36 -36
  140. package/components/Auth/signup-context.js +71 -71
  141. package/components/Auth/signup-field-translations.d.ts +3 -3
  142. package/components/Auth/signup-field-translations.js +43 -43
  143. package/components/Auth/signupSubmit.d.ts +6 -6
  144. package/components/Auth/signupSubmit.js +56 -56
  145. package/components/Auth/useAddressFields.d.ts +22 -22
  146. package/components/Auth/useAddressFields.js +32 -32
  147. package/components/Auth/useAddressFields.test.js +294 -294
  148. package/components/Auth/useCustomer.d.ts +116 -70
  149. package/components/Auth/useCustomer.js +188 -167
  150. package/components/Auth/useCustomer.js.map +1 -1
  151. package/components/Auth/useLoginFields.d.ts +20 -20
  152. package/components/Auth/useLoginFields.js +20 -20
  153. package/components/Auth/useSignupForm.d.ts +7 -7
  154. package/components/Auth/useSignupForm.js +14 -14
  155. package/components/AuthContext/AuthContext.d.ts +8 -8
  156. package/components/AuthContext/AuthContext.js +8 -8
  157. package/components/AuthContext/AuthProvider.d.ts +6 -6
  158. package/components/AuthContext/AuthProvider.js +84 -84
  159. package/components/AuthContext/AuthProvider.js.map +1 -1
  160. package/components/AuthContext/AuthProvider.test.js +66 -66
  161. package/components/AuthContext/LogOut.d.ts +5 -5
  162. package/components/AuthContext/LogOut.js +14 -14
  163. package/components/AuthContext/googleUserIdQuery.gql +6 -6
  164. package/components/AuthContext/useAuth.d.ts +6 -6
  165. package/components/AuthContext/useAuth.js +20 -20
  166. package/components/BreakpointProvider.d.ts +21 -21
  167. package/components/BreakpointProvider.js +23 -23
  168. package/components/Cart/CartIdContext.d.ts +11 -11
  169. package/components/Cart/CartIdContext.js +60 -60
  170. package/components/Cart/CartIdContext.test.js +87 -87
  171. package/components/ChannelContext/ChannelContext.d.ts +21 -20
  172. package/components/ChannelContext/ChannelContext.js +3 -3
  173. package/components/ChannelContext/ChannelContext.js.map +1 -1
  174. package/components/ChannelContext/ChannelProvider.d.ts +10 -10
  175. package/components/ChannelContext/ChannelProvider.js +44 -42
  176. package/components/ChannelContext/ChannelProvider.js.map +1 -1
  177. package/components/ChannelContext/ChannelProvider.test.js +112 -112
  178. package/components/ChannelContext/CountrySettingsQuery.gql +34 -34
  179. package/components/ChannelContext/index.d.ts +2 -2
  180. package/components/ChannelContext/index.js +2 -2
  181. package/components/ChannelContext/useCountrySettings.d.ts +8 -8
  182. package/components/ChannelContext/useCountrySettings.js +23 -23
  183. package/components/ChannelContext/useCountrySettings.js.map +1 -1
  184. package/components/ConfigProvider.d.ts +107 -108
  185. package/components/ConfigProvider.js +19 -19
  186. package/components/ConfigProvider.js.map +1 -1
  187. package/components/DynamicRoute/ActiveFiltersQuery.gql +21 -21
  188. package/components/DynamicRoute/CategoryRoute.d.ts +13 -13
  189. package/components/DynamicRoute/CategoryRoute.js +55 -55
  190. package/components/DynamicRoute/ContentRoute.d.ts +14 -14
  191. package/components/DynamicRoute/ContentRoute.js +27 -27
  192. package/components/DynamicRoute/PreviewRoute.d.ts +17 -17
  193. package/components/DynamicRoute/PreviewRoute.js +57 -57
  194. package/components/DynamicRoute/ProductByArticlenumber.d.ts +5 -5
  195. package/components/DynamicRoute/ProductByArticlenumber.gql +16 -16
  196. package/components/DynamicRoute/ProductByArticlenumber.js +21 -21
  197. package/components/DynamicRoute/ProductRoute.d.ts +15 -15
  198. package/components/DynamicRoute/ProductRoute.js +57 -57
  199. package/components/DynamicRoute/RouteResolver.d.ts +22 -22
  200. package/components/DynamicRoute/RouteResolver.js +64 -64
  201. package/components/DynamicRoute/Status.d.ts +14 -14
  202. package/components/DynamicRoute/Status.js +19 -19
  203. package/components/DynamicRoute/index.d.ts +17 -17
  204. package/components/DynamicRoute/index.js +95 -95
  205. package/components/Filters/index.d.ts +1 -1
  206. package/components/Filters/index.js +1 -1
  207. package/components/Filters/toggleActiveListItem.gql +15 -15
  208. package/components/Filters/utils/replaceInSearch.d.ts +14 -14
  209. package/components/Filters/utils/replaceInSearch.js +22 -22
  210. package/components/Filters/utils/replaceInSearch.test.js +184 -184
  211. package/components/Filters/utils/updateHistory.d.ts +25 -25
  212. package/components/Filters/utils/updateHistory.js +29 -29
  213. package/components/Filters/utils/updateHistory.test.js +102 -102
  214. package/components/Fonts/CustomFont.d.ts +14 -14
  215. package/components/Fonts/CustomFont.js +16 -16
  216. package/components/Fonts/GoogleFont.d.ts +10 -10
  217. package/components/Fonts/GoogleFont.js +34 -34
  218. package/components/Fonts/TypekitFont.d.ts +16 -16
  219. package/components/Fonts/TypekitFont.js +24 -24
  220. package/components/Fonts/injectFont.d.ts +11 -11
  221. package/components/Fonts/injectFont.js +29 -29
  222. package/components/Head.d.ts +11 -11
  223. package/components/Head.js +79 -74
  224. package/components/Head.js.map +1 -1
  225. package/components/Mutation/AddToCart/addToCartUtils.d.ts +18 -18
  226. package/components/Mutation/AddToCart/addToCartUtils.js +51 -51
  227. package/components/Mutation/AddToCartFormik.d.ts +53 -53
  228. package/components/Mutation/AddToCartFormik.js +171 -171
  229. package/components/Mutation/DecrementQuantity.d.ts +4 -4
  230. package/components/Mutation/DecrementQuantity.js +34 -34
  231. package/components/Mutation/IncrementQuantity.d.ts +4 -4
  232. package/components/Mutation/IncrementQuantity.js +34 -34
  233. package/components/Mutation/RemoveFromCart.d.ts +5 -5
  234. package/components/Mutation/RemoveFromCart.js +51 -51
  235. package/components/Mutation/SetQuantity.d.ts +4 -4
  236. package/components/Mutation/SetQuantity.js +36 -36
  237. package/components/Mutation/SubscribeToNewsletter.d.ts +4 -4
  238. package/components/Mutation/SubscribeToNewsletter.js +29 -29
  239. package/components/Mutation/SubscribeToStockNotifications.d.ts +4 -4
  240. package/components/Mutation/SubscribeToStockNotifications.js +30 -30
  241. package/components/Mutation/cartMutationUtils.d.ts +28 -28
  242. package/components/Mutation/cartMutationUtils.js +108 -108
  243. package/components/Mutation/cartMutationUtils.spec.js +142 -142
  244. package/components/Mutation/useDecrementQuantity.d.ts +11 -11
  245. package/components/Mutation/useDecrementQuantity.js +53 -53
  246. package/components/Mutation/useIncrementQuantity.d.ts +11 -11
  247. package/components/Mutation/useIncrementQuantity.js +53 -53
  248. package/components/Mutation/useRemoveFromCart.d.ts +13 -13
  249. package/components/Mutation/useRemoveFromCart.js +49 -49
  250. package/components/Mutation/useSetQuantity.d.ts +12 -12
  251. package/components/Mutation/useSetQuantity.js +37 -37
  252. package/components/Notifications/Notifications.d.ts +15 -15
  253. package/components/Notifications/Notifications.js +26 -26
  254. package/components/Notifications/index.d.ts +2 -2
  255. package/components/Notifications/index.js +2 -2
  256. package/components/Notifications/notificationMachine.d.ts +30 -30
  257. package/components/Notifications/notificationMachine.js +73 -73
  258. package/components/Notifications/notificationsMachine.d.ts +37 -37
  259. package/components/Notifications/notificationsMachine.js +65 -65
  260. package/components/Notifications/useNotification.d.ts +9 -9
  261. package/components/Notifications/useNotification.js +26 -26
  262. package/components/OpenGraph/OpenGraph.test.js +180 -180
  263. package/components/OpenGraph/OpenGraphGeneralPageData.d.ts +25 -25
  264. package/components/OpenGraph/OpenGraphGeneralPageData.js +36 -36
  265. package/components/OpenGraph/OpenGraphGeneralPageData.js.map +1 -1
  266. package/components/OpenGraph/OpenGraphProductData.d.ts +25 -25
  267. package/components/OpenGraph/OpenGraphProductData.js +48 -48
  268. package/components/OpenGraph/OpenGraphProductData.js.map +1 -1
  269. package/components/OpenGraph/index.d.ts +2 -2
  270. package/components/OpenGraph/index.js +2 -2
  271. package/components/Pagination/PaginationContainer.d.ts +2 -2
  272. package/components/Pagination/PaginationContainer.js +4 -4
  273. package/components/Pagination/PaginationContext.d.ts +14 -14
  274. package/components/Pagination/PaginationContext.js +3 -3
  275. package/components/Pagination/PaginationProvider.d.ts +19 -19
  276. package/components/Pagination/PaginationProvider.js +94 -94
  277. package/components/Pagination/PaginationProvider.test.js +282 -282
  278. package/components/PreviewContext.d.ts +10 -10
  279. package/components/PreviewContext.js +26 -26
  280. package/components/ProductConfigurationProvider/ConfigPrice.gql +22 -22
  281. package/components/ProductConfigurationProvider/ProductConfigurationContext.d.ts +13 -13
  282. package/components/ProductConfigurationProvider/ProductConfigurationContext.js +4 -4
  283. package/components/ProductConfigurationProvider/ProductConfigurationProvider.d.ts +6 -6
  284. package/components/ProductConfigurationProvider/ProductConfigurationProvider.js +49 -49
  285. package/components/Query/CartProvider.d.ts +22 -22
  286. package/components/Query/CartProvider.js +67 -67
  287. package/components/SortOrder/SortOrderContainer.d.ts +40 -40
  288. package/components/SortOrder/SortOrderContainer.js +101 -101
  289. package/components/SortOrder/SortOrderContext.d.ts +9 -9
  290. package/components/SortOrder/SortOrderContext.js +8 -8
  291. package/components/StructuredData/SiteLinksSearchStructuredData.d.ts +3 -3
  292. package/components/StructuredData/SiteLinksSearchStructuredData.js +24 -24
  293. package/components/StructuredData/StructuredBreadcrumbData.d.ts +12 -12
  294. package/components/StructuredData/StructuredBreadcrumbData.js +54 -54
  295. package/components/StructuredData/StructuredCategoryData.d.ts +16 -16
  296. package/components/StructuredData/StructuredCategoryData.js +17 -17
  297. package/components/StructuredData/StructuredData.d.ts +9 -9
  298. package/components/StructuredData/StructuredData.js +6 -6
  299. package/components/StructuredData/StructuredPageData.d.ts +16 -16
  300. package/components/StructuredData/StructuredPageData.js +16 -16
  301. package/components/StructuredData/StructuredProductData.d.ts +18 -18
  302. package/components/StructuredData/StructuredProductData.js +42 -42
  303. package/components/StructuredData/StructuredProductData.test.js +130 -130
  304. package/components/StructuredData/index.d.ts +5 -5
  305. package/components/StructuredData/index.js +5 -5
  306. package/data/cache.d.ts +3 -3
  307. package/data/cache.js +20 -20
  308. package/data/fragmentTypes.d.ts +8 -8
  309. package/data/fragmentTypes.js +83 -83
  310. package/data/fragments/BadgeFragment.gql +7 -7
  311. package/data/fragments/CartCoreFragment.gql +89 -89
  312. package/data/fragments/ChannelsFragment.gql +59 -58
  313. package/data/fragments/CommentsFragment.gql +6 -6
  314. package/data/fragments/HeadFragment.gql +9 -9
  315. package/data/fragments/PriceFragment.gql +5 -5
  316. package/data/fragments/ProductCampaignFragment.gql +10 -10
  317. package/data/fragments/ProductConfigurationsFragment.gql +24 -24
  318. package/data/fragments/ProductListsFragments.gql +94 -94
  319. package/data/fragments/ProductMetadataFragment.gql +20 -20
  320. package/data/fragments/ProductPriceFragment.gql +10 -10
  321. package/data/fragments/ProductVariantPriceFragment.gql +10 -10
  322. package/data/fragments/RouteCrumbFragment.gql +20 -20
  323. package/data/fragments/RouteMetaFragment.gql +18 -18
  324. package/data/fragments/StockStatusFragment.gql +7 -7
  325. package/data/fragments/index.d.ts +1 -1
  326. package/data/fragments/index.js +1 -1
  327. package/data/mutations/accountMutations.gql +28 -28
  328. package/data/mutations/cartMutations.gql +41 -41
  329. package/data/mutations/productListMutations.gql +18 -18
  330. package/data/mutations/signup.gql +7 -7
  331. package/data/mutations/subscribeToNewsletter.gql +3 -3
  332. package/data/mutations/subscribeToStockNotifications.gql +6 -6
  333. package/data/mutations/updateCustomer.gql +5 -5
  334. package/data/mutations/updatePassword.gql +5 -5
  335. package/data/queries/CartMutationQuery.gql +36 -36
  336. package/data/queries/CartQuery.gql +7 -7
  337. package/data/queries/GetCustomerCountryCode.gql +9 -9
  338. package/data/queries/PersonLookupQuery.gql +28 -28
  339. package/data/queries/ProductLists.gql +8 -8
  340. package/dependencies.d.ts +104 -104
  341. package/errorReporting.browser.d.ts +3 -3
  342. package/errorReporting.browser.js +11 -11
  343. package/errorReporting.d.ts +3 -3
  344. package/errorReporting.js +19 -19
  345. package/errorReporting.server.d.ts +3 -3
  346. package/errorReporting.server.js +11 -11
  347. package/errorReporting.shared.d.ts +5 -5
  348. package/errorReporting.shared.js +16 -16
  349. package/experiments/ExperimentsProvider.d.ts +4 -4
  350. package/experiments/ExperimentsProvider.js +28 -28
  351. package/experiments/ExperimentsProvider.test.js +105 -105
  352. package/experiments/integration.test.js +76 -76
  353. package/experiments/selectExperimentVariant.d.ts +3 -3
  354. package/experiments/selectExperimentVariant.js +34 -34
  355. package/experiments/selectExperimentVariant.test.js +64 -64
  356. package/experiments/useExperiment.d.ts +2 -2
  357. package/experiments/useExperiment.js +10 -10
  358. package/experiments/useExperiment.test.js +100 -100
  359. package/global.d.ts +2 -1
  360. package/helpers/decodeUrlQuery.d.ts +9 -9
  361. package/helpers/decodeUrlQuery.js +26 -26
  362. package/helpers/decodeUrlQuery.test.js +54 -54
  363. package/helpers/distance.d.ts +7 -7
  364. package/helpers/distance.js +12 -12
  365. package/helpers/encodeVariant.d.ts +3 -3
  366. package/helpers/encodeVariant.js +24 -24
  367. package/helpers/getBreakpointsFromValues.d.ts +6 -6
  368. package/helpers/getBreakpointsFromValues.js +14 -14
  369. package/helpers/getBreakpointsFromValues.test.js +47 -47
  370. package/helpers/getCartItemVariant.d.ts +7 -7
  371. package/helpers/getCartItemVariant.js +8 -8
  372. package/helpers/getErrorDetail.d.ts +7 -7
  373. package/helpers/getErrorDetail.js +11 -11
  374. package/helpers/getErrorDetail.test.js +44 -44
  375. package/helpers/getHeaders.d.ts +6 -6
  376. package/helpers/getHeaders.js +3 -3
  377. package/helpers/isRelativeUrl.d.ts +1 -1
  378. package/helpers/isRelativeUrl.js +3 -3
  379. package/helpers/logError.d.ts +1 -1
  380. package/helpers/logError.js +16 -16
  381. package/helpers/logWarningInDev.d.ts +1 -1
  382. package/helpers/logWarningInDev.js +6 -6
  383. package/helpers/throwErrorInDev.d.ts +6 -6
  384. package/helpers/throwErrorInDev.js +14 -14
  385. package/helpers/uniqueId.d.ts +5 -5
  386. package/helpers/uniqueId.js +9 -9
  387. package/hooks/CartCheckoutQuery.gql +5 -5
  388. package/hooks/Channels/useChannelSettings.d.ts +7 -7
  389. package/hooks/Channels/useChannelSettings.js +11 -11
  390. package/hooks/Channels/useChannelSettings.js.map +1 -1
  391. package/hooks/Channels/useChannelSettings.test.js +51 -51
  392. package/hooks/Filters/useBooleanFilter.d.ts +8 -8
  393. package/hooks/Filters/useBooleanFilter.js +20 -20
  394. package/hooks/Filters/useFilters.d.ts +3 -3
  395. package/hooks/Filters/useFilters.js +15 -15
  396. package/hooks/Filters/useListFilter.d.ts +10 -10
  397. package/hooks/Filters/useListFilter.js +37 -37
  398. package/hooks/Filters/useMultiFilter.d.ts +13 -13
  399. package/hooks/Filters/useMultiFilter.js +49 -49
  400. package/hooks/Filters/useRangeFilter.d.ts +10 -10
  401. package/hooks/Filters/useRangeFilter.js +35 -35
  402. package/hooks/Filters/useSortOrder.d.ts +11 -11
  403. package/hooks/Filters/useSortOrder.js +21 -21
  404. package/hooks/FreeShippingQuery.gql +16 -16
  405. package/hooks/PackageProducts/index.d.ts +2 -2
  406. package/hooks/PackageProducts/index.js +2 -2
  407. package/hooks/PackageProducts/packagePriceQuery.gql +29 -29
  408. package/hooks/PackageProducts/usePackageProductItem.d.ts +17 -17
  409. package/hooks/PackageProducts/usePackageProductItem.js +26 -26
  410. package/hooks/PackageProducts/usePackageProducts.d.ts +19 -19
  411. package/hooks/PackageProducts/usePackageProducts.js +345 -345
  412. package/hooks/PackageProducts/usePackageProducts.test.js +383 -383
  413. package/hooks/Product/index.d.ts +1 -1
  414. package/hooks/Product/index.js +1 -1
  415. package/hooks/Product/useStockStatus.d.ts +9 -9
  416. package/hooks/Product/useStockStatus.js +25 -25
  417. package/hooks/Product/useSwitchToVariantImage.d.ts +9 -9
  418. package/hooks/Product/useSwitchToVariantImage.js +20 -20
  419. package/hooks/ProductList/ProductListContext.d.ts +7 -7
  420. package/hooks/ProductList/ProductListContext.js +110 -110
  421. package/hooks/ProductList/action-creators.d.ts +46 -46
  422. package/hooks/ProductList/action-creators.js +296 -296
  423. package/hooks/ProductList/index.d.ts +118 -118
  424. package/hooks/ProductList/index.js +21 -21
  425. package/hooks/ProductList/list-transforms.d.ts +73 -73
  426. package/hooks/ProductList/list-transforms.js +106 -106
  427. package/hooks/ProductList/list-transforms.test.js +489 -489
  428. package/hooks/ProductList/product-list-reducer.d.ts +76 -76
  429. package/hooks/ProductList/product-list-reducer.js +197 -197
  430. package/hooks/ProductList/product-list-reducer.test.js +464 -464
  431. package/hooks/ProductList/useProductList.d.ts +13 -13
  432. package/hooks/ProductList/useProductList.js +93 -93
  433. package/hooks/ProductList/useProductListItems.d.ts +10 -10
  434. package/hooks/ProductList/useProductListItems.js +48 -48
  435. package/hooks/ProductList/validate-product.d.ts +6 -6
  436. package/hooks/ProductList/validate-product.js +40 -40
  437. package/hooks/Subscriptions/useNewsletterSubscription.d.ts +38 -38
  438. package/hooks/Subscriptions/useNewsletterSubscription.js +41 -41
  439. package/hooks/Subscriptions/useStockNotifications.d.ts +36 -36
  440. package/hooks/Subscriptions/useStockNotifications.js +37 -37
  441. package/hooks/Subscriptions/useStoreSubscriptions.d.ts +48 -48
  442. package/hooks/Subscriptions/useStoreSubscriptions.js +150 -150
  443. package/hooks/Subscriptions/useStoresubscriptions.test.js +179 -179
  444. package/hooks/useAddMultipleToCart.d.ts +27 -27
  445. package/hooks/useAddMultipleToCart.js +113 -113
  446. package/hooks/useAddMultipleToCart.test.js +181 -181
  447. package/hooks/useChannelBanner.js +22 -22
  448. package/hooks/useChannelBanner.test.js +77 -77
  449. package/hooks/useCustomerOrders.test.js +176 -176
  450. package/hooks/useCustomerOrdersQuery.d.ts +21 -21
  451. package/hooks/useCustomerOrdersQuery.js +20 -20
  452. package/hooks/useDeleteAccountMutation.d.ts +15 -15
  453. package/hooks/useDeleteAccountMutation.js +38 -38
  454. package/hooks/useDynamicPrice.d.ts +3 -3
  455. package/hooks/useDynamicPrice.js +24 -24
  456. package/hooks/useFreeShippingCheck.d.ts +15 -15
  457. package/hooks/useFreeShippingCheck.js +30 -30
  458. package/hooks/useGeolocation.d.ts +11 -11
  459. package/hooks/useGeolocation.js +33 -33
  460. package/hooks/useInfinitePagination.d.ts +37 -37
  461. package/hooks/useInfinitePagination.js +138 -138
  462. package/hooks/useLogError.d.ts +1 -1
  463. package/hooks/useLogError.js +7 -7
  464. package/hooks/useLoginMutation.d.ts +12 -12
  465. package/hooks/useLoginMutation.js +14 -14
  466. package/hooks/useLoginRedirect.d.ts +4 -4
  467. package/hooks/useLoginRedirect.js +36 -36
  468. package/hooks/useOrderDetailQuery.d.ts +20 -20
  469. package/hooks/useOrderDetailQuery.js +28 -28
  470. package/hooks/usePreconnectLinks.d.ts +10 -10
  471. package/hooks/usePreconnectLinks.js +29 -29
  472. package/hooks/usePreconnectLinks.test.js +95 -95
  473. package/hooks/usePrice.d.ts +39 -39
  474. package/hooks/usePrice.js +71 -71
  475. package/hooks/usePrice.test.js +171 -171
  476. package/hooks/useProductVariants/index.d.ts +1 -1
  477. package/hooks/useProductVariants/index.js +1 -1
  478. package/hooks/useProductVariants/useProductVariants.d.ts +19 -19
  479. package/hooks/useProductVariants/useProductVariants.js +202 -202
  480. package/hooks/useProductVariants/useProductVariants.test.js +415 -415
  481. package/hooks/useProductVariants/useVariantFromUrl.d.ts +5 -5
  482. package/hooks/useProductVariants/useVariantFromUrl.js +15 -15
  483. package/hooks/useProductVariants/useVariantFromUrl.test.js +79 -79
  484. package/hooks/useRoutePreload.d.ts +24 -24
  485. package/hooks/useRoutePreload.js +39 -39
  486. package/hooks/useShopConfig.d.ts +1 -1
  487. package/hooks/useShopConfig.js +10 -10
  488. package/hooks/useShopConfig.js.map +1 -1
  489. package/hooks/useThrowErrorInDev.d.ts +1 -1
  490. package/hooks/useThrowErrorInDev.js +7 -7
  491. package/hooks/useThunkReducer.d.ts +7 -7
  492. package/hooks/useThunkReducer.js +23 -23
  493. package/hooks/useWarningInDev.d.ts +1 -1
  494. package/hooks/useWarningInDev.js +9 -9
  495. package/inServer.d.ts +1 -1
  496. package/inServer.js +2 -2
  497. package/index.d.ts +1 -1
  498. package/index.js +1 -1
  499. package/integrations/addwishSchemaExtension.d.ts +35 -35
  500. package/integrations/addwishSchemaExtension.js +140 -140
  501. package/integrations/nostoSchemaExtension.d.ts +5 -5
  502. package/integrations/nostoSchemaExtension.js +76 -76
  503. package/integrations/sluggishSchemaExtension.d.ts +2 -2
  504. package/integrations/sluggishSchemaExtension.js +26 -26
  505. package/package.json +2 -2
  506. package/polyfills.d.ts +1 -1
  507. package/polyfills.js +37 -37
  508. package/registerServiceWorker.js +110 -110
  509. package/resolvers/filters/boolFilter.d.ts +3 -3
  510. package/resolvers/filters/boolFilter.js +84 -84
  511. package/resolvers/filters/defaultActiveFilters.d.ts +3 -3
  512. package/resolvers/filters/defaultActiveFilters.js +8 -8
  513. package/resolvers/filters/filterParams.d.ts +3 -3
  514. package/resolvers/filters/filterParams.js +84 -84
  515. package/resolvers/filters/filters.d.ts +5 -5
  516. package/resolvers/filters/filters.js +78 -78
  517. package/resolvers/filters/index.d.ts +27 -27
  518. package/resolvers/filters/index.js +7 -7
  519. package/resolvers/filters/listFilter.d.ts +7 -7
  520. package/resolvers/filters/listFilter.js +73 -73
  521. package/resolvers/filters/listFilterItem.d.ts +3 -3
  522. package/resolvers/filters/listFilterItem.js +122 -122
  523. package/resolvers/filters/multiListFilter.d.ts +5 -5
  524. package/resolvers/filters/multiListFilter.js +195 -195
  525. package/resolvers/filters/multiListFilterList.d.ts +3 -3
  526. package/resolvers/filters/multiListFilterList.js +55 -55
  527. package/resolvers/filters/rangeFilter.d.ts +5 -5
  528. package/resolvers/filters/rangeFilter.js +137 -137
  529. package/resolvers/filters/updateQueryString.d.ts +12 -12
  530. package/resolvers/filters/updateQueryString.js +116 -116
  531. package/resolvers/index.d.ts +37 -37
  532. package/resolvers/index.js +37 -37
  533. package/scripts/dev-apolloServer.js +31 -31
  534. package/sentry/client.d.ts +1 -1
  535. package/sentry/client.js +29 -29
  536. package/sentry/common.d.ts +1 -1
  537. package/sentry/common.js +4 -4
  538. package/sentry/server.d.ts +1 -1
  539. package/sentry/server.js +19 -19
  540. package/sentry/utils.d.ts +1 -1
  541. package/sentry/utils.js +1 -1
  542. package/server/graphql.d.ts +20 -20
  543. package/server/graphql.js +118 -118
  544. package/server/graphql.test.js +123 -123
  545. package/server/index.d.ts +2 -2
  546. package/server/index.js +2 -2
  547. package/server/tracking/facebook.d.ts +5 -5
  548. package/server/tracking/facebook.js +132 -132
  549. package/server/tracking/middleware.d.ts +8 -8
  550. package/server/tracking/middleware.js +14 -14
  551. package/server/tracking/types.d.ts +33 -33
  552. package/setupTests.js +2 -2
  553. package/test-utils/ProviderPyramid.js +45 -45
  554. package/test-utils/mockShopConfig.js +26 -26
  555. package/test-utils/mockedProduct.js +253 -253
  556. package/test-utils/renderWithRouter.js +20 -20
  557. package/test-utils/variables.js +2476 -1231
  558. package/time.d.ts +1 -1
  559. package/time.js +5 -5
@@ -1,538 +1,524 @@
1
- import {
2
- createSelectedChannel,
3
- getSelectedAndRecommendedChannel
4
- } from './channelUtils';
5
- import { MockLink } from 'apollo-link-mock';
6
- import { InMemoryCache } from 'apollo-cache-inmemory';
7
- import ApolloClient from 'apollo-client';
8
- import gql from 'graphql-tag';
9
- import { ChannelHandler } from './ChannelHandler';
10
- import { channels, singleDomainChannels } from '../test-utils/variables';
11
- import { Cookies } from 'react-cookie';
12
- import { primaryRouteForPathFetcher } from './redirectUtils';
13
-
14
- const preserveRedirectRouteQuery = gql`
15
- query preserveRedirectRouteQuery($path: String!) {
16
- route(path: $path) {
17
- id
18
- object {
19
- ... on Category {
20
- id
21
- __typename
22
- }
23
- ... on Product {
24
- id
25
- __typename
26
- }
27
- ... on Page {
28
- id
29
- __typename
30
- }
31
- ... on StartPage {
32
- id
33
- __typename
34
- }
35
- __typename
36
- }
37
- __typename
38
- }
39
- }
40
- `;
41
-
42
- const startPagePathnameRedirectQuery = gql`
43
- query StartPagePathnameRedirectQuery($id: Int!) {
44
- StartPage: startPage(id: $id) {
45
- id
46
- primaryRoute {
47
- id
48
- path
49
- __typename
50
- }
51
- __typename
52
- }
53
- }
54
- `;
55
-
56
- const startPagePathnameRedirectRequest = {
57
- request: {
58
- query: startPagePathnameRedirectQuery,
59
- variables: { id: 44 }
60
- },
61
- result: {
62
- data: {
63
- StartPage: {
64
- id: 44,
65
- primaryRoute: {
66
- id: '/',
67
- path: '/',
68
- __typename: 'Route'
69
- },
70
- __typename: 'StartPage'
71
- }
72
- }
73
- }
74
- };
75
-
76
- const productPathnameRedirectQuery = gql`
77
- query ProductPathnameRedirectQuery($id: Int!) {
78
- Product: product(id: $id) {
79
- id
80
- primaryRoute {
81
- id
82
- path
83
- __typename
84
- }
85
- __typename
86
- }
87
- }
88
- `;
89
-
90
- const redirectQueryMocks = [
91
- {
92
- request: {
93
- query: preserveRedirectRouteQuery,
94
- variables: {
95
- path: '/'
96
- }
97
- },
98
- result: {
99
- data: {
100
- route: {
101
- id: '/',
102
- object: {
103
- id: 44,
104
- __typename: 'StartPage'
105
- },
106
- __typename: 'Route'
107
- },
108
- __typename: 'Query'
109
- }
110
- }
111
- },
112
- startPagePathnameRedirectRequest,
113
- startPagePathnameRedirectRequest,
114
- startPagePathnameRedirectRequest,
115
- startPagePathnameRedirectRequest,
116
- {
117
- request: {
118
- query: preserveRedirectRouteQuery,
119
- variables: {
120
- path: '/accessories/orchid-peach-bag'
121
- }
122
- },
123
- result: {
124
- data: {
125
- route: {
126
- id: '/accessories/orchid-peach-bag',
127
- object: {
128
- id: 522,
129
- __typename: 'Product'
130
- },
131
- __typename: 'Route'
132
- }
133
- }
134
- }
135
- },
136
- {
137
- request: {
138
- query: productPathnameRedirectQuery,
139
- variables: { id: 522 }
140
- },
141
- result: {
142
- data: {
143
- Product: {
144
- id: 522,
145
- primaryRoute: {
146
- id: '/accessories/bags/orchid-peach-bag-uk',
147
- path: '/accessories/bags/orchid-peach-bag-uk',
148
- __typename: 'Route'
149
- },
150
- __typename: 'Product'
151
- }
152
- }
153
- }
154
- },
155
- {
156
- request: {
157
- query: productPathnameRedirectQuery,
158
- variables: { id: 522 }
159
- },
160
- result: {
161
- data: {
162
- Product: {
163
- id: 522,
164
- primaryRoute: {
165
- id: '/accessories/orchid-peach-bag',
166
- path: '/accessories/orchid-peach-bag',
167
- __typename: 'Route'
168
- },
169
- __typename: 'Product'
170
- }
171
- }
172
- }
173
- }
174
- ];
175
-
176
- function createClient(mocks) {
177
- return new ApolloClient({
178
- cache: new InMemoryCache({ addTypename: true }),
179
- link: new MockLink(mocks)
180
- });
181
- }
182
-
183
- const client = createClient(redirectQueryMocks);
184
- const getPrimaryRoutePath = primaryRouteForPathFetcher(client);
185
-
186
- const selectedChannelSingleDomain = createSelectedChannel(
187
- singleDomainChannels[0]
188
- );
189
-
190
- describe('Channel utils', () => {
191
- beforeEach(() => {
192
- // Workaround changes in universal-cookie
193
- Object.defineProperty(document, 'cookie', {
194
- value: null
195
- });
196
- });
197
-
198
- it('successfully redirect to the appropriate channel', () => {
199
- const recommendedChannel = createSelectedChannel(channels[1]);
200
- const selectedChannel = createSelectedChannel(channels[0]);
201
- const channelHandler = new ChannelHandler({
202
- selectedChannel,
203
- recommendedChannel,
204
- getPrimaryRoutePath,
205
- channels
206
- });
207
- const redirectUrl = channelHandler.getRedirectUrl({
208
- client,
209
- url: selectedChannel.url,
210
- newChannel: recommendedChannel
211
- });
212
- expect(redirectUrl).resolves.toBe(
213
- 'https://flight-m2.jetshop.se/?culture=sv-SE&channelCountry=SE&channel=SE'
214
- );
215
- });
216
-
217
- it('Will not redirect when there is a channel in the cookie', () => {
218
- const cookies = new Cookies();
219
- cookies.set('channel', channels[0].name);
220
- const { redirect } = getSelectedAndRecommendedChannel({
221
- url: channels[0].url,
222
- singleDomainMode: false,
223
- channels,
224
- cookies
225
- });
226
- expect(redirect).toBeFalsy();
227
- });
228
-
229
- it('Will not redirect when there is a channel in the query string', () => {
230
- const cookies = new Cookies();
231
- cookies.set('channel', channels[0].name);
232
- const { redirect } = getSelectedAndRecommendedChannel({
233
- url: channels[0].url + '?channelCountry="US"',
234
- singleDomainMode: false,
235
- channels,
236
- cookies
237
- });
238
- expect(redirect).toBeFalsy();
239
- });
240
-
241
- it('Will not geo redirect when there is a channel in the query string', () => {
242
- const cookies = new Cookies();
243
- cookies.set('channel', channels[0].name);
244
- const { redirect } = getSelectedAndRecommendedChannel({
245
- url: channels[0].url + '?channelCountry="US"',
246
- geoipCountry: 'SE',
247
- singleDomainMode: false,
248
- channels,
249
- cookies
250
- });
251
- expect(redirect).toBeFalsy();
252
- });
253
-
254
- it('Will not redirect when the url is already correct', () => {
255
- const cookies = new Cookies();
256
- const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
257
- url: channels[0].url,
258
- geoipCountry: 'US',
259
- singleDomainMode: false,
260
- channels,
261
- cookies
262
- });
263
- expect(redirect).toBeFalsy();
264
- expect(recommendedChannel).toBeFalsy();
265
- });
266
-
267
- it('Will redirect to the channel that has the country set as the default country', () => {
268
- const cookies = new Cookies();
269
- channels[0].countries.push({
270
- name: 'Sweden',
271
- code: 'SE',
272
- isDefault: false
273
- });
274
- const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
275
- url: channels[0].url,
276
- geoipCountry: 'SE',
277
- singleDomainMode: false,
278
- channels,
279
- cookies
280
- });
281
- expect(redirect).toBeTruthy();
282
- expect(recommendedChannel.name).toBe('SE');
283
- });
284
-
285
- it('Will not redirect when the channel is from an unkown country', () => {
286
- const cookies = new Cookies();
287
- const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
288
- url: channels[0].url,
289
- geoipCountry: 'CO',
290
- singleDomainMode: false,
291
- channels,
292
- cookies
293
- });
294
- expect(redirect).toBeFalsy();
295
- expect(recommendedChannel).toBeFalsy();
296
- });
297
- });
298
-
299
- describe('Single domain mode', () => {
300
- it('Will not redirect when the channel is default, and the selected channel is also default', () => {
301
- const cookies = new Cookies();
302
- const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
303
- url: selectedChannelSingleDomain.url,
304
- singleDomainMode: true,
305
- channels: singleDomainChannels,
306
- cookies
307
- });
308
- expect(redirect).toBeFalsy();
309
- expect(recommendedChannel).toBeFalsy();
310
- });
311
-
312
- it('Will redirect when the url is at the wrong channel and the channel is default', () => {
313
- const cookies = new Cookies();
314
- const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
315
- url: channels[0].url,
316
- singleDomainMode: true,
317
- channels: singleDomainChannels,
318
- cookies
319
- });
320
- expect(redirect).toBe(true);
321
- expect(recommendedChannel.url).toBe(selectedChannelSingleDomain.url);
322
- });
323
-
324
- it('Will not redirect when the redirect is disabled', () => {
325
- const cookies = new Cookies();
326
- const { redirect } = getSelectedAndRecommendedChannel({
327
- url: channels[0].url + '?redirectDisabled=true',
328
- singleDomainMode: true,
329
- channels: singleDomainChannels,
330
- cookies
331
- });
332
- expect(redirect).toBe(false);
333
- });
334
-
335
- it('Will not when the url is at the right channel', () => {
336
- const cookies = new Cookies();
337
- const { redirect } = getSelectedAndRecommendedChannel({
338
- url: selectedChannelSingleDomain.url,
339
- singleDomainMode: true,
340
- channels: singleDomainChannels,
341
- cookies
342
- });
343
- expect(redirect).toBe(false);
344
- });
345
-
346
- it('Will redirect when the url is at the wrong channel', () => {
347
- const cookies = new Cookies();
348
- cookies.set('channel', singleDomainChannels[2].name);
349
- const { redirect, recommendedChannel } = getSelectedAndRecommendedChannel({
350
- url: selectedChannelSingleDomain.url,
351
- singleDomainMode: true,
352
- channels: singleDomainChannels,
353
- cookies
354
- });
355
- expect(redirect).toBe(true);
356
- expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
357
- });
358
-
359
- it('Georedirect will respect single domain mode', () => {
360
- const cookies = new Cookies();
361
- const { redirect, recommendedChannel } = getSelectedAndRecommendedChannel({
362
- url: selectedChannelSingleDomain.url,
363
- singleDomainMode: true,
364
- channels: singleDomainChannels,
365
- cookies,
366
- geoipCountry: 'UK'
367
- });
368
- expect(redirect).toBe(true);
369
- expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
370
- });
371
-
372
- it('Georedirect will respect single domain mode when there is a domain path', async () => {
373
- const urlToPreserve = '/accessories/orchid-peach-bag';
374
- const cookies = new Cookies();
375
- const { redirect, recommendedChannel, selectedChannel } =
376
- getSelectedAndRecommendedChannel({
377
- url: selectedChannelSingleDomain.url + urlToPreserve,
378
- singleDomainMode: true,
379
- channels: singleDomainChannels,
380
- cookies,
381
- geoipCountry: 'UK'
382
- });
383
- expect(redirect).toBe(true);
384
- expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
385
- const channelHandler = new ChannelHandler({
386
- selectedChannel,
387
- recommendedChannel,
388
- getPrimaryRoutePath,
389
- channels
390
- });
391
-
392
- const redirectUrl = channelHandler.getRedirectUrl({
393
- client,
394
- url: selectedChannelSingleDomain.url + urlToPreserve,
395
- newChannel: channelHandler.recommendedChannel,
396
- preserveRedirect: true
397
- });
398
- await expect(redirectUrl).resolves.toBe(
399
- 'https://flight-m2.jetshop.se/uk/accessories/bags/orchid-peach-bag-uk?culture=sv-SE&channelCountry=UK&channel=UK'
400
- );
401
- });
402
-
403
- it('Redirect on single domain mode when the basename shows up in the url', async () => {
404
- const urlToPreserve = '/accessories/int/orchid-peach-bag';
405
- const cookies = new Cookies();
406
- const { redirect, recommendedChannel, selectedChannel } =
407
- getSelectedAndRecommendedChannel({
408
- url: channels[0].url + urlToPreserve,
409
- singleDomainMode: true,
410
- channels: singleDomainChannels,
411
- cookies,
412
- geoipCountry: 'UK'
413
- });
414
- expect(redirect).toBe(true);
415
- const channelHandler = new ChannelHandler({
416
- selectedChannel,
417
- recommendedChannel,
418
- getPrimaryRoutePath,
419
- channels
420
- });
421
-
422
- const redirectUrl = channelHandler.getRedirectUrl({
423
- client,
424
- url: channels[0].url + urlToPreserve,
425
- newChannel: channelHandler.recommendedChannel,
426
- preserveRedirect: false
427
- });
428
- await expect(redirectUrl).resolves.toBe(
429
- `https://flight-m2.jetshop.se/uk${urlToPreserve}?culture=sv-SE&channelCountry=UK&channel=UK`
430
- );
431
- });
432
-
433
- it('Redirect on single domain mode when there is a domain path but no basename', async () => {
434
- const urlToPreserve = '/accessories/orchid-peach-bag';
435
- const cookies = new Cookies();
436
- const { redirect, recommendedChannel, selectedChannel } =
437
- getSelectedAndRecommendedChannel({
438
- url: channels[0].url + urlToPreserve,
439
- singleDomainMode: true,
440
- channels: singleDomainChannels,
441
- cookies
442
- });
443
- expect(redirect).toBe(true);
444
- expect(recommendedChannel.url).toBe('https://flight.jetshop.se/int');
445
- const channelHandler = new ChannelHandler({
446
- selectedChannel,
447
- recommendedChannel,
448
- getPrimaryRoutePath,
449
- channels
450
- });
451
-
452
- const redirectUrl = channelHandler.getRedirectUrl({
453
- client,
454
- url: channels[0].url + urlToPreserve,
455
- newChannel: channelHandler.recommendedChannel,
456
- preserveRedirect: true
457
- });
458
- await expect(redirectUrl).resolves.toBe(
459
- `https://flight.jetshop.se/int${urlToPreserve}?culture=en-GB&channelCountry=US&channel=INT`
460
- );
461
- });
462
-
463
- it('Will set the appropriate language based on basename', async () => {
464
- const cookies = new Cookies();
465
- const { selectedChannel } = getSelectedAndRecommendedChannel({
466
- url: channels[1].url + '/en',
467
- channels,
468
- cookies
469
- });
470
- expect(selectedChannel.language.culture).toBe('en-GB');
471
- });
472
-
473
- it('Will set the appropriate language based on basename in singledomain mode', async () => {
474
- const cookies = new Cookies();
475
- const { selectedChannel } = getSelectedAndRecommendedChannel({
476
- url: singleDomainChannels[1].url + '/en',
477
- channels: singleDomainChannels,
478
- cookies,
479
- singleDomainMode: true
480
- });
481
- expect(selectedChannel.language.culture).toBe('en-GB');
482
- });
483
-
484
- it('Will redirect to a new language basename based on cookies', async () => {
485
- const cookies = new Cookies();
486
- cookies.set('culture', 'en-GB');
487
- const { selectedChannel, recommendedChannel, redirect } =
488
- getSelectedAndRecommendedChannel({
489
- url: channels[1].url,
490
- channels,
491
- cookies
492
- });
493
- expect(redirect).toBe(true);
494
- expect(recommendedChannel.language.culture).toBe('en-GB');
495
- const channelHandler = new ChannelHandler({
496
- selectedChannel,
497
- recommendedChannel,
498
- getPrimaryRoutePath,
499
- channels
500
- });
501
- const redirectUrl = channelHandler.getRedirectUrl({
502
- client,
503
- url: selectedChannel.url,
504
- newChannel: recommendedChannel
505
- });
506
- expect(redirectUrl).resolves.toBe(
507
- 'https://flight-m2.jetshop.se/en/?culture=en-GB&channelCountry=SE&channel=SE'
508
- );
509
- });
510
-
511
- it('Will redirect to a new language basename based on cookies in single domain mode', async () => {
512
- const cookies = new Cookies();
513
- cookies.set('culture', 'en-GB');
514
- const { selectedChannel, recommendedChannel, redirect } =
515
- getSelectedAndRecommendedChannel({
516
- url: singleDomainChannels[1].url,
517
- channels: singleDomainChannels,
518
- cookies,
519
- singleDomainMode: true
520
- });
521
- expect(redirect).toBe(true);
522
- expect(recommendedChannel.language.culture).toBe('en-GB');
523
- const channelHandler = new ChannelHandler({
524
- selectedChannel,
525
- recommendedChannel,
526
- getPrimaryRoutePath,
527
- channels
528
- });
529
- const redirectUrl = channelHandler.getRedirectUrl({
530
- client,
531
- url: selectedChannel.url,
532
- newChannel: recommendedChannel
533
- });
534
- expect(redirectUrl).resolves.toBe(
535
- 'https://flight-m2.jetshop.se/se/en/?culture=en-GB&channelCountry=SE&channel=SE'
536
- );
537
- });
538
- });
1
+ import {
2
+ createSelectedChannel,
3
+ getSelectedAndRecommendedChannel
4
+ } from './channelUtils';
5
+ import { MockLink } from 'apollo-link-mock';
6
+ import {
7
+ InMemoryCache,
8
+ IntrospectionFragmentMatcher
9
+ } from 'apollo-cache-inmemory';
10
+ import ApolloClient from 'apollo-client';
11
+ import gql from 'graphql-tag';
12
+ import { ChannelHandler } from './ChannelHandler';
13
+ import { channels, singleDomainChannels } from '../test-utils/variables';
14
+ import { Cookies } from 'react-cookie';
15
+ import { primaryRouteForPathFetcher } from './redirectUtils';
16
+ import PreserveRedirectRouteQuery from './PreserveRedirectRouteQuery.gql';
17
+ import fragmentTypes from '@jetshop/core/data/fragmentTypes';
18
+
19
+ const startPagePathnameRedirectQuery = gql`
20
+ query StartPagePathnameRedirectQuery($id: Int!) {
21
+ StartPage: startPage(id: $id) {
22
+ id
23
+ primaryRoute {
24
+ id
25
+ path
26
+ __typename
27
+ }
28
+ __typename
29
+ }
30
+ }
31
+ `;
32
+
33
+ const startPagePathnameRedirectRequest = {
34
+ request: {
35
+ query: startPagePathnameRedirectQuery,
36
+ variables: { id: 44 }
37
+ },
38
+ result: {
39
+ data: {
40
+ StartPage: {
41
+ id: 44,
42
+ primaryRoute: {
43
+ id: '/',
44
+ path: '/',
45
+ __typename: 'Route'
46
+ },
47
+ __typename: 'StartPage'
48
+ }
49
+ }
50
+ }
51
+ };
52
+
53
+ const productPathnameRedirectQuery = gql`
54
+ query ProductPathnameRedirectQuery($id: Int!) {
55
+ Product: product(id: $id) {
56
+ id
57
+ primaryRoute {
58
+ id
59
+ path
60
+ __typename
61
+ }
62
+ __typename
63
+ }
64
+ }
65
+ `;
66
+
67
+ const redirectQueryMocks = [
68
+ {
69
+ request: {
70
+ query: PreserveRedirectRouteQuery,
71
+ variables: {
72
+ path: '/'
73
+ }
74
+ },
75
+ result: {
76
+ data: {
77
+ route: {
78
+ id: '/',
79
+ object: {
80
+ id: 44,
81
+ __typename: 'StartPage'
82
+ },
83
+ __typename: 'Route'
84
+ },
85
+ __typename: 'Query'
86
+ }
87
+ }
88
+ },
89
+ startPagePathnameRedirectRequest,
90
+ startPagePathnameRedirectRequest,
91
+ startPagePathnameRedirectRequest,
92
+ startPagePathnameRedirectRequest,
93
+ {
94
+ request: {
95
+ query: PreserveRedirectRouteQuery,
96
+ variables: {
97
+ path: '/accessories/orchid-peach-bag'
98
+ }
99
+ },
100
+ result: {
101
+ data: {
102
+ route: {
103
+ id: '/accessories/orchid-peach-bag',
104
+ object: {
105
+ id: 522,
106
+ __typename: 'Product'
107
+ },
108
+ __typename: 'Route'
109
+ }
110
+ }
111
+ }
112
+ },
113
+ {
114
+ request: {
115
+ query: productPathnameRedirectQuery,
116
+ variables: { id: 522 }
117
+ },
118
+ result: {
119
+ data: {
120
+ Product: {
121
+ id: 522,
122
+ primaryRoute: {
123
+ id: '/accessories/bags/orchid-peach-bag-uk',
124
+ path: '/accessories/bags/orchid-peach-bag-uk',
125
+ __typename: 'Route'
126
+ },
127
+ __typename: 'Product'
128
+ }
129
+ }
130
+ }
131
+ },
132
+ {
133
+ request: {
134
+ query: productPathnameRedirectQuery,
135
+ variables: { id: 522 }
136
+ },
137
+ result: {
138
+ data: {
139
+ Product: {
140
+ id: 522,
141
+ primaryRoute: {
142
+ id: '/accessories/orchid-peach-bag',
143
+ path: '/accessories/orchid-peach-bag',
144
+ __typename: 'Route'
145
+ },
146
+ __typename: 'Product'
147
+ }
148
+ }
149
+ }
150
+ }
151
+ ];
152
+
153
+ function createClient(mocks) {
154
+ return new ApolloClient({
155
+ cache: new InMemoryCache({
156
+ addTypename: true,
157
+ fragmentMatcher: new IntrospectionFragmentMatcher({
158
+ introspectionQueryResultData: {
159
+ __schema: {
160
+ types: fragmentTypes
161
+ }
162
+ }
163
+ })
164
+ }),
165
+ link: new MockLink(mocks)
166
+ });
167
+ }
168
+
169
+ const client = createClient(redirectQueryMocks);
170
+ const getPrimaryRoutePath = primaryRouteForPathFetcher(client);
171
+
172
+ const selectedChannelSingleDomain = createSelectedChannel(
173
+ singleDomainChannels[0]
174
+ );
175
+
176
+ describe('Channel utils', () => {
177
+ beforeEach(() => {
178
+ // Workaround changes in universal-cookie
179
+ Object.defineProperty(document, 'cookie', {
180
+ value: null
181
+ });
182
+ });
183
+
184
+ it('successfully redirect to the appropriate channel', () => {
185
+ const recommendedChannel = createSelectedChannel(channels[1]);
186
+ const selectedChannel = createSelectedChannel(channels[0]);
187
+ const channelHandler = new ChannelHandler({
188
+ selectedChannel,
189
+ recommendedChannel,
190
+ getPrimaryRoutePath,
191
+ channels
192
+ });
193
+ const redirectUrl = channelHandler.getRedirectUrl({
194
+ client,
195
+ url: selectedChannel.url,
196
+ newChannel: recommendedChannel
197
+ });
198
+ expect(redirectUrl).resolves.toBe(
199
+ 'https://flight-m2.jetshop.se/?culture=sv-SE&channelCountry=SE&channel=SE'
200
+ );
201
+ });
202
+
203
+ it('Will not redirect when there is a channel in the cookie', () => {
204
+ const cookies = new Cookies();
205
+ cookies.set('channel', channels[0].name);
206
+ const { redirect } = getSelectedAndRecommendedChannel({
207
+ url: channels[0].url,
208
+ singleDomainMode: false,
209
+ channels,
210
+ cookies
211
+ });
212
+ expect(redirect).toBeFalsy();
213
+ });
214
+
215
+ it('Will not redirect when there is a channel in the query string', () => {
216
+ const cookies = new Cookies();
217
+ cookies.set('channel', channels[0].name);
218
+ const { redirect } = getSelectedAndRecommendedChannel({
219
+ url: channels[0].url + '?channelCountry="US"',
220
+ singleDomainMode: false,
221
+ channels,
222
+ cookies
223
+ });
224
+ expect(redirect).toBeFalsy();
225
+ });
226
+
227
+ it('Will not geo redirect when there is a channel in the query string', () => {
228
+ const cookies = new Cookies();
229
+ cookies.set('channel', channels[0].name);
230
+ const { redirect } = getSelectedAndRecommendedChannel({
231
+ url: channels[0].url + '?channelCountry="US"',
232
+ geoipCountry: 'SE',
233
+ singleDomainMode: false,
234
+ channels,
235
+ cookies
236
+ });
237
+ expect(redirect).toBeFalsy();
238
+ });
239
+
240
+ it('Will not redirect when the url is already correct', () => {
241
+ const cookies = new Cookies();
242
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
243
+ url: channels[0].url,
244
+ geoipCountry: 'US',
245
+ singleDomainMode: false,
246
+ channels,
247
+ cookies
248
+ });
249
+ expect(redirect).toBeFalsy();
250
+ expect(recommendedChannel).toBeFalsy();
251
+ });
252
+
253
+ it('Will redirect to the channel that has the country set as the default country', () => {
254
+ const cookies = new Cookies();
255
+ channels[0].countries.push({
256
+ name: 'Sweden',
257
+ code: 'SE',
258
+ isDefault: false
259
+ });
260
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
261
+ url: channels[0].url,
262
+ geoipCountry: 'SE',
263
+ singleDomainMode: false,
264
+ channels,
265
+ cookies
266
+ });
267
+ expect(redirect).toBeTruthy();
268
+ expect(recommendedChannel.name).toBe('SE');
269
+ });
270
+
271
+ it('Will not redirect when the channel is from an unkown country', () => {
272
+ const cookies = new Cookies();
273
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
274
+ url: channels[0].url,
275
+ geoipCountry: 'CO',
276
+ singleDomainMode: false,
277
+ channels,
278
+ cookies
279
+ });
280
+ expect(redirect).toBeFalsy();
281
+ expect(recommendedChannel).toBeFalsy();
282
+ });
283
+ });
284
+
285
+ describe('Single domain mode', () => {
286
+ it('Will not redirect when the channel is default, and the selected channel is also default', () => {
287
+ const cookies = new Cookies();
288
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
289
+ url: selectedChannelSingleDomain.url,
290
+ singleDomainMode: true,
291
+ channels: singleDomainChannels,
292
+ cookies
293
+ });
294
+ expect(redirect).toBeFalsy();
295
+ expect(recommendedChannel).toBeFalsy();
296
+ });
297
+
298
+ it('Will redirect when the url is at the wrong channel and the channel is default', () => {
299
+ const cookies = new Cookies();
300
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
301
+ url: channels[0].url,
302
+ singleDomainMode: true,
303
+ channels: singleDomainChannels,
304
+ cookies
305
+ });
306
+ expect(redirect).toBe(true);
307
+ expect(recommendedChannel.url).toBe(selectedChannelSingleDomain.url);
308
+ });
309
+
310
+ it('Will not redirect when the redirect is disabled', () => {
311
+ const cookies = new Cookies();
312
+ const { redirect } = getSelectedAndRecommendedChannel({
313
+ url: channels[0].url + '?redirectDisabled=true',
314
+ singleDomainMode: true,
315
+ channels: singleDomainChannels,
316
+ cookies
317
+ });
318
+ expect(redirect).toBe(false);
319
+ });
320
+
321
+ it('Will not when the url is at the right channel', () => {
322
+ const cookies = new Cookies();
323
+ const { redirect } = getSelectedAndRecommendedChannel({
324
+ url: selectedChannelSingleDomain.url,
325
+ singleDomainMode: true,
326
+ channels: singleDomainChannels,
327
+ cookies
328
+ });
329
+ expect(redirect).toBe(false);
330
+ });
331
+
332
+ it('Will redirect when the url is at the wrong channel', () => {
333
+ const cookies = new Cookies();
334
+ cookies.set('channel', singleDomainChannels[2].name);
335
+ const { redirect, recommendedChannel } = getSelectedAndRecommendedChannel({
336
+ url: selectedChannelSingleDomain.url,
337
+ singleDomainMode: true,
338
+ channels: singleDomainChannels,
339
+ cookies
340
+ });
341
+ expect(redirect).toBe(true);
342
+ expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
343
+ });
344
+
345
+ it('Georedirect will respect single domain mode', () => {
346
+ const cookies = new Cookies();
347
+ const { redirect, recommendedChannel } = getSelectedAndRecommendedChannel({
348
+ url: selectedChannelSingleDomain.url,
349
+ singleDomainMode: true,
350
+ channels: singleDomainChannels,
351
+ cookies,
352
+ geoipCountry: 'UK'
353
+ });
354
+ expect(redirect).toBe(true);
355
+ expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
356
+ });
357
+
358
+ it('Georedirect will respect single domain mode when there is a domain path', async () => {
359
+ const urlToPreserve = '/accessories/orchid-peach-bag';
360
+ const cookies = new Cookies();
361
+ const { redirect, recommendedChannel, selectedChannel } =
362
+ getSelectedAndRecommendedChannel({
363
+ url: selectedChannelSingleDomain.url + urlToPreserve,
364
+ singleDomainMode: true,
365
+ channels: singleDomainChannels,
366
+ cookies,
367
+ geoipCountry: 'UK'
368
+ });
369
+ expect(redirect).toBe(true);
370
+ expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
371
+ const channelHandler = new ChannelHandler({
372
+ selectedChannel,
373
+ recommendedChannel,
374
+ getPrimaryRoutePath,
375
+ channels
376
+ });
377
+
378
+ const redirectUrl = channelHandler.getRedirectUrl({
379
+ client,
380
+ url: selectedChannelSingleDomain.url + urlToPreserve,
381
+ newChannel: channelHandler.recommendedChannel,
382
+ preserveRedirect: true
383
+ });
384
+ await expect(redirectUrl).resolves.toBe(
385
+ 'https://flight-m2.jetshop.se/uk/accessories/bags/orchid-peach-bag-uk?culture=sv-SE&channelCountry=UK&channel=UK'
386
+ );
387
+ });
388
+
389
+ it('Redirect on single domain mode when the basename shows up in the url', async () => {
390
+ const urlToPreserve = '/accessories/int/orchid-peach-bag';
391
+ const cookies = new Cookies();
392
+ const { redirect, recommendedChannel, selectedChannel } =
393
+ getSelectedAndRecommendedChannel({
394
+ url: channels[0].url + urlToPreserve,
395
+ singleDomainMode: true,
396
+ channels: singleDomainChannels,
397
+ cookies,
398
+ geoipCountry: 'UK'
399
+ });
400
+ expect(redirect).toBe(true);
401
+ const channelHandler = new ChannelHandler({
402
+ selectedChannel,
403
+ recommendedChannel,
404
+ getPrimaryRoutePath,
405
+ channels
406
+ });
407
+
408
+ const redirectUrl = channelHandler.getRedirectUrl({
409
+ client,
410
+ url: channels[0].url + urlToPreserve,
411
+ newChannel: channelHandler.recommendedChannel,
412
+ preserveRedirect: false
413
+ });
414
+ await expect(redirectUrl).resolves.toBe(
415
+ `https://flight-m2.jetshop.se/uk${urlToPreserve}?culture=sv-SE&channelCountry=UK&channel=UK`
416
+ );
417
+ });
418
+
419
+ it('Redirect on single domain mode when there is a domain path but no basename', async () => {
420
+ const urlToPreserve = '/accessories/orchid-peach-bag';
421
+ const cookies = new Cookies();
422
+ const { redirect, recommendedChannel, selectedChannel } =
423
+ getSelectedAndRecommendedChannel({
424
+ url: channels[0].url + urlToPreserve,
425
+ singleDomainMode: true,
426
+ channels: singleDomainChannels,
427
+ cookies
428
+ });
429
+ expect(redirect).toBe(true);
430
+ expect(recommendedChannel.url).toBe('https://flight.jetshop.se/int');
431
+ const channelHandler = new ChannelHandler({
432
+ selectedChannel,
433
+ recommendedChannel,
434
+ getPrimaryRoutePath,
435
+ channels
436
+ });
437
+
438
+ const redirectUrl = channelHandler.getRedirectUrl({
439
+ client,
440
+ url: channels[0].url + urlToPreserve,
441
+ newChannel: channelHandler.recommendedChannel,
442
+ preserveRedirect: true
443
+ });
444
+ await expect(redirectUrl).resolves.toBe(
445
+ `https://flight.jetshop.se/int${urlToPreserve}?culture=en-GB&channelCountry=US&channel=INT`
446
+ );
447
+ });
448
+
449
+ it('Will set the appropriate language based on basename', async () => {
450
+ const cookies = new Cookies();
451
+ const { selectedChannel } = getSelectedAndRecommendedChannel({
452
+ url: channels[1].url + '/en',
453
+ channels,
454
+ cookies
455
+ });
456
+ expect(selectedChannel.language.culture).toBe('en-GB');
457
+ });
458
+
459
+ it('Will set the appropriate language based on basename in singledomain mode', async () => {
460
+ const cookies = new Cookies();
461
+ const { selectedChannel } = getSelectedAndRecommendedChannel({
462
+ url: singleDomainChannels[1].url + '/en',
463
+ channels: singleDomainChannels,
464
+ cookies,
465
+ singleDomainMode: true
466
+ });
467
+ expect(selectedChannel.language.culture).toBe('en-GB');
468
+ });
469
+
470
+ it('Will redirect to a new language basename based on cookies', async () => {
471
+ const cookies = new Cookies();
472
+ cookies.set('culture', 'en-GB');
473
+ const { selectedChannel, recommendedChannel, redirect } =
474
+ getSelectedAndRecommendedChannel({
475
+ url: channels[1].url,
476
+ channels,
477
+ cookies
478
+ });
479
+ expect(redirect).toBe(true);
480
+ expect(recommendedChannel.language.culture).toBe('en-GB');
481
+ const channelHandler = new ChannelHandler({
482
+ selectedChannel,
483
+ recommendedChannel,
484
+ getPrimaryRoutePath,
485
+ channels
486
+ });
487
+ const redirectUrl = channelHandler.getRedirectUrl({
488
+ client,
489
+ url: selectedChannel.url,
490
+ newChannel: recommendedChannel
491
+ });
492
+ expect(redirectUrl).resolves.toBe(
493
+ 'https://flight-m2.jetshop.se/en/?culture=en-GB&channelCountry=SE&channel=SE'
494
+ );
495
+ });
496
+
497
+ it('Will redirect to a new language basename based on cookies in single domain mode', async () => {
498
+ const cookies = new Cookies();
499
+ cookies.set('culture', 'en-GB');
500
+ const { selectedChannel, recommendedChannel, redirect } =
501
+ getSelectedAndRecommendedChannel({
502
+ url: singleDomainChannels[1].url,
503
+ channels: singleDomainChannels,
504
+ cookies,
505
+ singleDomainMode: true
506
+ });
507
+ expect(redirect).toBe(true);
508
+ expect(recommendedChannel.language.culture).toBe('en-GB');
509
+ const channelHandler = new ChannelHandler({
510
+ selectedChannel,
511
+ recommendedChannel,
512
+ getPrimaryRoutePath,
513
+ channels
514
+ });
515
+ const redirectUrl = channelHandler.getRedirectUrl({
516
+ client,
517
+ url: selectedChannel.url,
518
+ newChannel: recommendedChannel
519
+ });
520
+ expect(redirectUrl).resolves.toBe(
521
+ 'https://flight-m2.jetshop.se/se/en/?culture=en-GB&channelCountry=SE&channel=SE'
522
+ );
523
+ });
524
+ });