@jetshop/core 5.13.12-0 → 5.14.0

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 (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
@@ -0,0 +1,784 @@
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 {
14
+ groupedChannels as channels,
15
+ groupedSingleDomainChannels as singleDomainChannels
16
+ } from '../test-utils/variables';
17
+ import { Cookies } from 'react-cookie';
18
+ import { primaryRouteForPathFetcher } from './redirectUtils';
19
+ import PreserveRedirectRouteQuery from './PreserveRedirectRouteQuery.gql';
20
+ import fragmentTypes from '@jetshop/core/data/fragmentTypes';
21
+
22
+ const startPagePathnameRedirectQuery = gql`
23
+ query StartPagePathnameRedirectQuery($id: Int!) {
24
+ StartPage: startPage(id: $id) {
25
+ id
26
+ primaryRoute {
27
+ id
28
+ path
29
+ __typename
30
+ }
31
+ __typename
32
+ }
33
+ }
34
+ `;
35
+
36
+ const startPagePathnameRedirectRequest = {
37
+ request: {
38
+ query: startPagePathnameRedirectQuery,
39
+ variables: { id: 44 }
40
+ },
41
+ result: {
42
+ data: {
43
+ StartPage: {
44
+ id: 44,
45
+ primaryRoute: {
46
+ id: '/',
47
+ path: '/',
48
+ __typename: 'Route'
49
+ },
50
+ __typename: 'StartPage'
51
+ }
52
+ }
53
+ }
54
+ };
55
+
56
+ const productPathnameRedirectQuery = gql`
57
+ query ProductPathnameRedirectQuery($id: Int!) {
58
+ Product: product(id: $id) {
59
+ id
60
+ primaryRoute {
61
+ id
62
+ path
63
+ __typename
64
+ }
65
+ __typename
66
+ }
67
+ }
68
+ `;
69
+
70
+ const redirectQueryMocks = [
71
+ {
72
+ request: {
73
+ query: PreserveRedirectRouteQuery,
74
+ variables: {
75
+ path: '/'
76
+ }
77
+ },
78
+ result: {
79
+ data: {
80
+ route: {
81
+ id: '/',
82
+ object: {
83
+ id: 44,
84
+ __typename: 'StartPage'
85
+ },
86
+ __typename: 'Route'
87
+ },
88
+ __typename: 'Query'
89
+ }
90
+ }
91
+ },
92
+ startPagePathnameRedirectRequest,
93
+ startPagePathnameRedirectRequest,
94
+ startPagePathnameRedirectRequest,
95
+ startPagePathnameRedirectRequest,
96
+ {
97
+ request: {
98
+ query: PreserveRedirectRouteQuery,
99
+ variables: {
100
+ path: '/accessories/orchid-peach-bag'
101
+ }
102
+ },
103
+ result: {
104
+ data: {
105
+ route: {
106
+ id: '/accessories/orchid-peach-bag',
107
+ object: {
108
+ id: 522,
109
+ __typename: 'Product'
110
+ },
111
+ __typename: 'Route'
112
+ }
113
+ }
114
+ }
115
+ },
116
+ {
117
+ request: {
118
+ query: productPathnameRedirectQuery,
119
+ variables: { id: 522 }
120
+ },
121
+ result: {
122
+ data: {
123
+ Product: {
124
+ id: 522,
125
+ primaryRoute: {
126
+ id: '/accessories/bags/orchid-peach-bag-uk',
127
+ path: '/accessories/bags/orchid-peach-bag-uk',
128
+ __typename: 'Route'
129
+ },
130
+ __typename: 'Product'
131
+ }
132
+ }
133
+ }
134
+ },
135
+ {
136
+ request: {
137
+ query: productPathnameRedirectQuery,
138
+ variables: { id: 522 }
139
+ },
140
+ result: {
141
+ data: {
142
+ Product: {
143
+ id: 522,
144
+ primaryRoute: {
145
+ id: '/accessories/orchid-peach-bag',
146
+ path: '/accessories/orchid-peach-bag',
147
+ __typename: 'Route'
148
+ },
149
+ __typename: 'Product'
150
+ }
151
+ }
152
+ }
153
+ }
154
+ ];
155
+
156
+ function createClient(mocks) {
157
+ return new ApolloClient({
158
+ cache: new InMemoryCache({
159
+ addTypename: true,
160
+ fragmentMatcher: new IntrospectionFragmentMatcher({
161
+ introspectionQueryResultData: {
162
+ __schema: {
163
+ types: fragmentTypes
164
+ }
165
+ }
166
+ })
167
+ }),
168
+ link: new MockLink(mocks)
169
+ });
170
+ }
171
+
172
+ const client = createClient(redirectQueryMocks);
173
+ const getPrimaryRoutePath = primaryRouteForPathFetcher(client);
174
+
175
+ const selectedChannelSingleDomain = createSelectedChannel(
176
+ singleDomainChannels[0]
177
+ );
178
+
179
+ describe('Grouped channels', () => {
180
+ beforeEach(() => {
181
+ // Workaround changes in universal-cookie
182
+ Object.defineProperty(document, 'cookie', {
183
+ value: null
184
+ });
185
+ });
186
+ describe('Single domain', () => {
187
+ it('Only have channels from within the group based on url', () => {
188
+ const cookies = new Cookies();
189
+ const { selectedChannel, channels } = getSelectedAndRecommendedChannel({
190
+ url: singleDomainChannels[0].url,
191
+ singleDomainMode: true,
192
+ channels: singleDomainChannels,
193
+ cookies
194
+ });
195
+
196
+ expect(selectedChannel.groupName).toBe('Brand-1');
197
+ channels.forEach((c) => expect(c.groupName).toBe('Brand-1'));
198
+ });
199
+ it('Only have channels from within the group based on cookie', () => {
200
+ const cookies = new Cookies();
201
+ cookies.set('channel', singleDomainChannels[0].name);
202
+ const { selectedChannel, channels } = getSelectedAndRecommendedChannel({
203
+ url: singleDomainChannels[0].url,
204
+ singleDomainMode: true,
205
+ channels: singleDomainChannels,
206
+ cookies
207
+ });
208
+
209
+ expect(selectedChannel.groupName).toBe('Brand-1');
210
+ channels.forEach((c) => expect(c.groupName).toBe('Brand-1'));
211
+ });
212
+ it('Recommend channel from within current group based on GEO-IP', () => {
213
+ const cookies = new Cookies();
214
+ const { recommendedChannel, selectedChannel, redirect, channels } =
215
+ getSelectedAndRecommendedChannel({
216
+ url: singleDomainChannels[0].url,
217
+ geoipCountry: 'SE',
218
+ singleDomainMode: true,
219
+ disableGeoRedirect: false,
220
+ channels: singleDomainChannels,
221
+ cookies
222
+ });
223
+
224
+ expect(selectedChannel.name).toBe('INT');
225
+
226
+ channels.forEach((c) => expect(c.groupName).toBe('Brand-1'));
227
+
228
+ expect(redirect).toBe(true);
229
+ expect(recommendedChannel.name).toBe('SE');
230
+ expect(recommendedChannel.groupName).toBe('Brand-1');
231
+ });
232
+ });
233
+ describe('Non single domain', () => {
234
+ /**
235
+ * Non single domain
236
+ */
237
+ it('Only have channels from within the group based on url', () => {
238
+ const cookies = new Cookies();
239
+ const { selectedChannel, channels: availableChannels } =
240
+ getSelectedAndRecommendedChannel({
241
+ url: channels[1].url,
242
+ singleDomainMode: false,
243
+ channels: channels,
244
+ cookies
245
+ });
246
+
247
+ expect(selectedChannel.groupName).toBe('Brand-1');
248
+ availableChannels.forEach((c) => expect(c.groupName).toBe('Brand-1'));
249
+ });
250
+ it('Only have channels from within the group based on cookie', () => {
251
+ const cookies = new Cookies();
252
+ cookies.set('channel', channels[0].name);
253
+ const { selectedChannel, channels: availableChannels } =
254
+ getSelectedAndRecommendedChannel({
255
+ url: channels[0].url,
256
+ singleDomainMode: false,
257
+ channels: channels,
258
+ cookies
259
+ });
260
+
261
+ expect(selectedChannel.groupName).toBe('Brand-1');
262
+ availableChannels.forEach((c) => expect(c.groupName).toBe('Brand-1'));
263
+ });
264
+ it('Recommend channel from within current group based on GEO-IP', () => {
265
+ const cookies = new Cookies();
266
+ const {
267
+ recommendedChannel,
268
+ selectedChannel,
269
+ redirect,
270
+ channels: availableChannels
271
+ } = getSelectedAndRecommendedChannel({
272
+ url: channels[0].url,
273
+ geoipCountry: 'SE',
274
+ singleDomainMode: false,
275
+ disableGeoRedirect: false,
276
+ channels: channels,
277
+ cookies
278
+ });
279
+
280
+ expect(selectedChannel.name).toBe('INT');
281
+
282
+ availableChannels.forEach((c) => expect(c.groupName).toBe('Brand-1'));
283
+
284
+ expect(redirect).toBe(true);
285
+ expect(recommendedChannel.name).toBe('SE');
286
+ expect(recommendedChannel.groupName).toBe('Brand-1');
287
+ });
288
+ it('Respects change of channel and group using url', () => {
289
+ const cookies = new Cookies();
290
+ const prevSelectedChannel = createSelectedChannel(channels[2]);
291
+
292
+ expect(prevSelectedChannel.name).toBe('UK');
293
+ expect(prevSelectedChannel.groupName).toBe('Brand-2');
294
+
295
+ const {
296
+ selectedChannel,
297
+ redirect,
298
+ channels: availableChannels
299
+ } = getSelectedAndRecommendedChannel({
300
+ url: channels[1].url,
301
+ singleDomainMode: false,
302
+ channels: channels,
303
+ cookies
304
+ });
305
+
306
+ expect(redirect).toBe(false);
307
+ expect(selectedChannel.name).toBe('SE');
308
+ expect(selectedChannel.groupName).toBe('Brand-1');
309
+ availableChannels.forEach((c) => expect(c.groupName).toBe('Brand-1'));
310
+ });
311
+ });
312
+ describe('Redirects', () => {
313
+ beforeEach(() => {
314
+ // Workaround changes in universal-cookie
315
+ Object.defineProperty(document, 'cookie', {
316
+ value: null
317
+ });
318
+ });
319
+ describe('Single domain', () => {
320
+ it('Will not georedirect to channel outside of current group', () => {
321
+ const cookies = new Cookies();
322
+ const requestedChannel = createSelectedChannel(singleDomainChannels[0]);
323
+
324
+ const {
325
+ redirect,
326
+ channels: availableChannel,
327
+ selectedChannel
328
+ } = getSelectedAndRecommendedChannel({
329
+ url: requestedChannel.url,
330
+ singleDomainMode: true,
331
+ disableGeoRedirect: false,
332
+ channels: singleDomainChannels,
333
+ cookies,
334
+ geoipCountry: 'UK'
335
+ });
336
+
337
+ expect(selectedChannel.name === requestedChannel.name).toBe(true);
338
+ expect(redirect).toBe(false);
339
+
340
+ availableChannel.forEach((channel) =>
341
+ expect(channel.groupName).toBe('Brand-1')
342
+ );
343
+ });
344
+ it('Will georedirect to channel within of current group', () => {
345
+ const cookies = new Cookies();
346
+ const requestedChannel = createSelectedChannel(singleDomainChannels[0]);
347
+
348
+ const {
349
+ redirect,
350
+ channels: availableChannel,
351
+ selectedChannel,
352
+ recommendedChannel
353
+ } = getSelectedAndRecommendedChannel({
354
+ url: requestedChannel.url,
355
+ singleDomainMode: true,
356
+ disableGeoRedirect: false,
357
+ channels: singleDomainChannels,
358
+ cookies,
359
+ geoipCountry: 'SE'
360
+ });
361
+
362
+ expect(selectedChannel.name).toBe('INT');
363
+ expect(redirect).toBe(true);
364
+ expect(recommendedChannel.name).toBe('SE');
365
+
366
+ availableChannel.forEach((channel) =>
367
+ expect(channel.groupName).toBe('Brand-1')
368
+ );
369
+ });
370
+ });
371
+
372
+ describe('Non-single domain', () => {
373
+ it('Wil not redirect to channel within group', () => {
374
+ const cookies = new Cookies();
375
+ const selectedChannel = createSelectedChannel(channels[2]);
376
+ cookies.set('channel', selectedChannel.name);
377
+
378
+ const requestedChannel = createSelectedChannel(channels[0]);
379
+
380
+ const { redirect, channels: availableChannel } =
381
+ getSelectedAndRecommendedChannel({
382
+ url: requestedChannel.url,
383
+ singleDomainMode: false,
384
+ channels,
385
+ cookies
386
+ });
387
+
388
+ availableChannel.forEach((channel) =>
389
+ expect(channel.groupName).toBe('Brand-1')
390
+ );
391
+ expect(redirect).toBe(false);
392
+ });
393
+
394
+ it('Can redirect to channel within group', () => {
395
+ const cookies = new Cookies();
396
+ const selectedChannel = createSelectedChannel(channels[1]);
397
+ cookies.set('channel', selectedChannel.name);
398
+
399
+ const requestedChannel = createSelectedChannel(channels[0]);
400
+
401
+ const { redirect, channels: availableChannel } =
402
+ getSelectedAndRecommendedChannel({
403
+ url: requestedChannel.url,
404
+ singleDomainMode: false,
405
+ channels,
406
+ cookies
407
+ });
408
+
409
+ availableChannel.forEach((channel) =>
410
+ expect(channel.groupName).toBe('Brand-1')
411
+ );
412
+ expect(redirect).toBe(true);
413
+ });
414
+ });
415
+ });
416
+ });
417
+
418
+ describe('Channel utils with grouped channels', () => {
419
+ beforeEach(() => {
420
+ // Workaround changes in universal-cookie
421
+ Object.defineProperty(document, 'cookie', {
422
+ value: null
423
+ });
424
+ });
425
+
426
+ it('successfully redirect to the appropriate channel', () => {
427
+ const recommendedChannel = createSelectedChannel(channels[1]);
428
+ const selectedChannel = createSelectedChannel(channels[0]);
429
+ const channelHandler = new ChannelHandler({
430
+ selectedChannel,
431
+ recommendedChannel,
432
+ getPrimaryRoutePath,
433
+ channels
434
+ });
435
+
436
+ const redirectUrl = channelHandler.getRedirectUrl({
437
+ client,
438
+ url: selectedChannel.url,
439
+ newChannel: recommendedChannel
440
+ });
441
+ expect(redirectUrl).resolves.toBe(
442
+ 'https://flight-m2.jetshop.se/?culture=sv-SE&channelCountry=SE&channel=SE'
443
+ );
444
+ });
445
+
446
+ it('Will not redirect when there is a channel in the cookie', () => {
447
+ const cookies = new Cookies();
448
+ cookies.set('channel', channels[0].name);
449
+ const { redirect } = getSelectedAndRecommendedChannel({
450
+ url: channels[0].url,
451
+ singleDomainMode: false,
452
+ channels,
453
+ cookies
454
+ });
455
+
456
+ expect(redirect).toBeFalsy();
457
+ });
458
+
459
+ it('Will not redirect when there is a channel in the query string', () => {
460
+ const cookies = new Cookies();
461
+ cookies.set('channel', channels[0].name);
462
+ const { redirect } = getSelectedAndRecommendedChannel({
463
+ url: channels[0].url + '?channelCountry="US"',
464
+ singleDomainMode: false,
465
+ channels,
466
+ cookies
467
+ });
468
+ expect(redirect).toBeFalsy();
469
+ });
470
+
471
+ it('Will not geo redirect when there is a channel in the query string', () => {
472
+ const cookies = new Cookies();
473
+ cookies.set('channel', channels[0].name);
474
+ const { redirect } = getSelectedAndRecommendedChannel({
475
+ url: channels[0].url + '?channelCountry="US"',
476
+ geoipCountry: 'SE',
477
+ singleDomainMode: false,
478
+ channels,
479
+ cookies
480
+ });
481
+ expect(redirect).toBeFalsy();
482
+ });
483
+
484
+ it('Will not redirect when the url is already correct', () => {
485
+ const cookies = new Cookies();
486
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
487
+ url: channels[0].url,
488
+ geoipCountry: 'US',
489
+ singleDomainMode: false,
490
+ channels,
491
+ cookies
492
+ });
493
+ expect(redirect).toBeFalsy();
494
+ expect(recommendedChannel).toBeFalsy();
495
+ });
496
+
497
+ it('Will redirect to the channel that has the country set as the default country', () => {
498
+ const cookies = new Cookies();
499
+ channels[0].countries.push({
500
+ name: 'Sweden',
501
+ code: 'SE',
502
+ isDefault: false
503
+ });
504
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
505
+ url: channels[0].url,
506
+ geoipCountry: 'SE',
507
+ singleDomainMode: false,
508
+ channels,
509
+ cookies
510
+ });
511
+ expect(redirect).toBeTruthy();
512
+ expect(recommendedChannel.name).toBe('SE');
513
+ });
514
+
515
+ it('Will not redirect when the channel is from an unkown country', () => {
516
+ const cookies = new Cookies();
517
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
518
+ url: channels[0].url,
519
+ geoipCountry: 'CO',
520
+ singleDomainMode: false,
521
+ channels,
522
+ cookies
523
+ });
524
+ expect(redirect).toBeFalsy();
525
+ expect(recommendedChannel).toBeFalsy();
526
+ });
527
+ describe('Single domain mode', () => {
528
+ it('Will not redirect when the channel is default, and the selected channel is also default', () => {
529
+ const cookies = new Cookies();
530
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel(
531
+ {
532
+ url: selectedChannelSingleDomain.url,
533
+ singleDomainMode: true,
534
+ channels: singleDomainChannels,
535
+ cookies
536
+ }
537
+ );
538
+ expect(redirect).toBeFalsy();
539
+ expect(recommendedChannel).toBeFalsy();
540
+ });
541
+
542
+ it('Will redirect when the url is at the wrong channel and the channel is default', () => {
543
+ const cookies = new Cookies();
544
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel(
545
+ {
546
+ url: channels[0].url,
547
+ singleDomainMode: true,
548
+ channels: singleDomainChannels,
549
+ cookies
550
+ }
551
+ );
552
+ expect(redirect).toBe(true);
553
+ expect(recommendedChannel.url).toBe(selectedChannelSingleDomain.url);
554
+ });
555
+
556
+ it('Will not redirect when the redirect is disabled', () => {
557
+ const cookies = new Cookies();
558
+ const { redirect } = getSelectedAndRecommendedChannel({
559
+ url: channels[0].url + '?redirectDisabled=true',
560
+ singleDomainMode: true,
561
+ channels: singleDomainChannels,
562
+ cookies
563
+ });
564
+ expect(redirect).toBe(false);
565
+ });
566
+
567
+ it('Will not when the url is at the right channel', () => {
568
+ const cookies = new Cookies();
569
+ const { redirect } = getSelectedAndRecommendedChannel({
570
+ url: selectedChannelSingleDomain.url,
571
+ singleDomainMode: true,
572
+ channels: singleDomainChannels,
573
+ cookies
574
+ });
575
+ expect(redirect).toBe(false);
576
+ });
577
+
578
+ it('Will redirect when the url is at the wrong channel but in same group', () => {
579
+ const cookies = new Cookies();
580
+ cookies.set('channel', singleDomainChannels[1].name);
581
+ const { redirect, recommendedChannel } = getSelectedAndRecommendedChannel(
582
+ {
583
+ url: selectedChannelSingleDomain.url,
584
+ singleDomainMode: true,
585
+ channels: singleDomainChannels,
586
+ cookies
587
+ }
588
+ );
589
+
590
+ expect(redirect).toBe(true);
591
+ expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/se');
592
+ });
593
+
594
+ it('Georedirect will respect single domain mode', () => {
595
+ const cookies = new Cookies();
596
+ const { redirect, recommendedChannel } = getSelectedAndRecommendedChannel(
597
+ {
598
+ url: selectedChannelSingleDomain.url,
599
+ singleDomainMode: true,
600
+ channels: singleDomainChannels,
601
+ cookies,
602
+ geoipCountry: 'SE'
603
+ }
604
+ );
605
+ expect(redirect).toBe(true);
606
+ expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/se');
607
+ });
608
+
609
+ it('Georedirect will respect single domain mode when there is a domain path', async () => {
610
+ const urlToPreserve = '/accessories/orchid-peach-bag';
611
+ const cookies = new Cookies();
612
+ const { redirect, recommendedChannel, selectedChannel } =
613
+ getSelectedAndRecommendedChannel({
614
+ url: selectedChannelSingleDomain.url + urlToPreserve,
615
+ singleDomainMode: true,
616
+ channels: singleDomainChannels,
617
+ cookies,
618
+ geoipCountry: 'SE'
619
+ });
620
+ expect(redirect).toBe(true);
621
+ expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/se');
622
+ const channelHandler = new ChannelHandler({
623
+ selectedChannel,
624
+ recommendedChannel,
625
+ getPrimaryRoutePath,
626
+ channels
627
+ });
628
+
629
+ const redirectUrl = channelHandler.getRedirectUrl({
630
+ client,
631
+ url: selectedChannelSingleDomain.url + urlToPreserve,
632
+ newChannel: channelHandler.recommendedChannel,
633
+ preserveRedirect: true
634
+ });
635
+
636
+ await expect(redirectUrl).resolves.toBe(
637
+ 'https://flight-m2.jetshop.se/se/accessories/bags/orchid-peach-bag-uk?culture=sv-SE&channelCountry=SE&channel=SE'
638
+ );
639
+ });
640
+
641
+ it('Redirect on single domain mode when the basename shows up in the url', async () => {
642
+ const urlToPreserve = '/accessories/int/orchid-peach-bag';
643
+ const cookies = new Cookies();
644
+ const { redirect, recommendedChannel, selectedChannel } =
645
+ getSelectedAndRecommendedChannel({
646
+ url: channels[0].url + urlToPreserve,
647
+ singleDomainMode: true,
648
+ channels: singleDomainChannels,
649
+ cookies,
650
+ geoipCountry: 'SE'
651
+ });
652
+ expect(redirect).toBe(true);
653
+ const channelHandler = new ChannelHandler({
654
+ selectedChannel,
655
+ recommendedChannel,
656
+ getPrimaryRoutePath,
657
+ channels
658
+ });
659
+
660
+ const redirectUrl = channelHandler.getRedirectUrl({
661
+ client,
662
+ url: channels[0].url + urlToPreserve,
663
+ newChannel: channelHandler.recommendedChannel,
664
+ preserveRedirect: false
665
+ });
666
+ await expect(redirectUrl).resolves.toBe(
667
+ `https://flight-m2.jetshop.se/se${urlToPreserve}?culture=sv-SE&channelCountry=SE&channel=SE`
668
+ );
669
+ });
670
+
671
+ it('Redirect on single domain mode when there is a domain path but no basename', async () => {
672
+ const urlToPreserve = '/accessories/orchid-peach-bag';
673
+ const cookies = new Cookies();
674
+ const {
675
+ redirect,
676
+ recommendedChannel,
677
+ selectedChannel,
678
+ channels: groupedChannels
679
+ } = getSelectedAndRecommendedChannel({
680
+ url: channels[0].url + urlToPreserve,
681
+ singleDomainMode: true,
682
+ channels: singleDomainChannels,
683
+ cookies
684
+ });
685
+
686
+ expect(redirect).toBe(true);
687
+ expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/int');
688
+
689
+ const channelHandler = new ChannelHandler({
690
+ selectedChannel,
691
+ recommendedChannel,
692
+ getPrimaryRoutePath,
693
+ channels: groupedChannels
694
+ });
695
+
696
+ const redirectUrl = channelHandler.getRedirectUrl({
697
+ client,
698
+ url: channels[0].url + urlToPreserve,
699
+ newChannel: channelHandler.recommendedChannel,
700
+ preserveRedirect: true
701
+ });
702
+
703
+ await expect(redirectUrl).resolves.toBe(
704
+ `https://flight-m2.jetshop.se/int${urlToPreserve}?culture=en-GB&channelCountry=US&channel=INT`
705
+ );
706
+ });
707
+
708
+ it('Will set the appropriate language based on basename', async () => {
709
+ const cookies = new Cookies();
710
+ const { selectedChannel } = getSelectedAndRecommendedChannel({
711
+ url: channels[1].url + '/en',
712
+ channels,
713
+ cookies
714
+ });
715
+ expect(selectedChannel.language.culture).toBe('en-GB');
716
+ });
717
+
718
+ it('Will set the appropriate language based on basename in singledomain mode', async () => {
719
+ const cookies = new Cookies();
720
+ const { selectedChannel } = getSelectedAndRecommendedChannel({
721
+ url: singleDomainChannels[1].url + '/en',
722
+ channels: singleDomainChannels,
723
+ cookies,
724
+ singleDomainMode: true
725
+ });
726
+ expect(selectedChannel.language.culture).toBe('en-GB');
727
+ });
728
+
729
+ it('Will redirect to a new language basename based on cookies', async () => {
730
+ const cookies = new Cookies();
731
+ cookies.set('culture', 'en-GB');
732
+ const { selectedChannel, recommendedChannel, redirect } =
733
+ getSelectedAndRecommendedChannel({
734
+ url: channels[1].url,
735
+ channels,
736
+ cookies
737
+ });
738
+ expect(redirect).toBe(true);
739
+ expect(recommendedChannel.language.culture).toBe('en-GB');
740
+ const channelHandler = new ChannelHandler({
741
+ selectedChannel,
742
+ recommendedChannel,
743
+ getPrimaryRoutePath,
744
+ channels
745
+ });
746
+ const redirectUrl = channelHandler.getRedirectUrl({
747
+ client,
748
+ url: selectedChannel.url,
749
+ newChannel: recommendedChannel
750
+ });
751
+ expect(redirectUrl).resolves.toBe(
752
+ 'https://flight-m2.jetshop.se/en/?culture=en-GB&channelCountry=SE&channel=SE'
753
+ );
754
+ });
755
+
756
+ it('Will redirect to a new language basename based on cookies in single domain mode', async () => {
757
+ const cookies = new Cookies();
758
+ cookies.set('culture', 'en-GB');
759
+ const { selectedChannel, recommendedChannel, redirect } =
760
+ getSelectedAndRecommendedChannel({
761
+ url: singleDomainChannels[1].url,
762
+ channels: singleDomainChannels,
763
+ cookies,
764
+ singleDomainMode: true
765
+ });
766
+ expect(redirect).toBe(true);
767
+ expect(recommendedChannel.language.culture).toBe('en-GB');
768
+ const channelHandler = new ChannelHandler({
769
+ selectedChannel,
770
+ recommendedChannel,
771
+ getPrimaryRoutePath,
772
+ channels
773
+ });
774
+ const redirectUrl = channelHandler.getRedirectUrl({
775
+ client,
776
+ url: selectedChannel.url,
777
+ newChannel: recommendedChannel
778
+ });
779
+ expect(redirectUrl).resolves.toBe(
780
+ 'https://flight-m2.jetshop.se/se/en/?culture=en-GB&channelCountry=SE&channel=SE'
781
+ );
782
+ });
783
+ });
784
+ });