@jetshop/core 5.13.11-0 → 5.14.0-alpha.abd04298

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 (557) 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 +514 -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/formatSignupInput.d.ts +8 -8
  137. package/components/Auth/formatSignupInput.js +42 -42
  138. package/components/Auth/signup-context.d.ts +36 -36
  139. package/components/Auth/signup-context.js +71 -71
  140. package/components/Auth/signup-field-translations.d.ts +3 -3
  141. package/components/Auth/signup-field-translations.js +43 -43
  142. package/components/Auth/signupSubmit.d.ts +6 -6
  143. package/components/Auth/signupSubmit.js +56 -56
  144. package/components/Auth/useAddressFields.d.ts +22 -22
  145. package/components/Auth/useAddressFields.js +32 -32
  146. package/components/Auth/useAddressFields.test.js +294 -294
  147. package/components/Auth/useCustomer.d.ts +70 -70
  148. package/components/Auth/useCustomer.js +167 -167
  149. package/components/Auth/useLoginFields.d.ts +20 -20
  150. package/components/Auth/useLoginFields.js +20 -20
  151. package/components/Auth/useSignupForm.d.ts +7 -7
  152. package/components/Auth/useSignupForm.js +14 -14
  153. package/components/AuthContext/AuthContext.d.ts +8 -8
  154. package/components/AuthContext/AuthContext.js +8 -8
  155. package/components/AuthContext/AuthProvider.d.ts +6 -6
  156. package/components/AuthContext/AuthProvider.js +84 -84
  157. package/components/AuthContext/AuthProvider.js.map +1 -1
  158. package/components/AuthContext/AuthProvider.test.js +66 -66
  159. package/components/AuthContext/LogOut.d.ts +5 -5
  160. package/components/AuthContext/LogOut.js +14 -14
  161. package/components/AuthContext/googleUserIdQuery.gql +6 -6
  162. package/components/AuthContext/useAuth.d.ts +6 -6
  163. package/components/AuthContext/useAuth.js +20 -20
  164. package/components/BreakpointProvider.d.ts +21 -21
  165. package/components/BreakpointProvider.js +23 -23
  166. package/components/Cart/CartIdContext.d.ts +11 -11
  167. package/components/Cart/CartIdContext.js +60 -60
  168. package/components/Cart/CartIdContext.test.js +87 -87
  169. package/components/ChannelContext/ChannelContext.d.ts +21 -20
  170. package/components/ChannelContext/ChannelContext.js +3 -3
  171. package/components/ChannelContext/ChannelContext.js.map +1 -1
  172. package/components/ChannelContext/ChannelProvider.d.ts +10 -10
  173. package/components/ChannelContext/ChannelProvider.js +44 -42
  174. package/components/ChannelContext/ChannelProvider.js.map +1 -1
  175. package/components/ChannelContext/ChannelProvider.test.js +112 -112
  176. package/components/ChannelContext/CountrySettingsQuery.gql +34 -34
  177. package/components/ChannelContext/index.d.ts +2 -2
  178. package/components/ChannelContext/index.js +2 -2
  179. package/components/ChannelContext/useCountrySettings.d.ts +8 -8
  180. package/components/ChannelContext/useCountrySettings.js +23 -23
  181. package/components/ChannelContext/useCountrySettings.js.map +1 -1
  182. package/components/ConfigProvider.d.ts +107 -108
  183. package/components/ConfigProvider.js +19 -19
  184. package/components/ConfigProvider.js.map +1 -1
  185. package/components/DynamicRoute/ActiveFiltersQuery.gql +21 -21
  186. package/components/DynamicRoute/CategoryRoute.d.ts +13 -13
  187. package/components/DynamicRoute/CategoryRoute.js +55 -55
  188. package/components/DynamicRoute/ContentRoute.d.ts +14 -14
  189. package/components/DynamicRoute/ContentRoute.js +27 -27
  190. package/components/DynamicRoute/PreviewRoute.d.ts +17 -17
  191. package/components/DynamicRoute/PreviewRoute.js +57 -57
  192. package/components/DynamicRoute/ProductByArticlenumber.d.ts +5 -5
  193. package/components/DynamicRoute/ProductByArticlenumber.gql +16 -16
  194. package/components/DynamicRoute/ProductByArticlenumber.js +21 -21
  195. package/components/DynamicRoute/ProductRoute.d.ts +15 -15
  196. package/components/DynamicRoute/ProductRoute.js +57 -57
  197. package/components/DynamicRoute/RouteResolver.d.ts +22 -22
  198. package/components/DynamicRoute/RouteResolver.js +64 -64
  199. package/components/DynamicRoute/Status.d.ts +14 -14
  200. package/components/DynamicRoute/Status.js +19 -19
  201. package/components/DynamicRoute/index.d.ts +17 -17
  202. package/components/DynamicRoute/index.js +95 -95
  203. package/components/Filters/index.d.ts +1 -1
  204. package/components/Filters/index.js +1 -1
  205. package/components/Filters/toggleActiveListItem.gql +15 -15
  206. package/components/Filters/utils/replaceInSearch.d.ts +14 -14
  207. package/components/Filters/utils/replaceInSearch.js +22 -22
  208. package/components/Filters/utils/replaceInSearch.test.js +184 -184
  209. package/components/Filters/utils/updateHistory.d.ts +25 -25
  210. package/components/Filters/utils/updateHistory.js +29 -29
  211. package/components/Filters/utils/updateHistory.test.js +102 -102
  212. package/components/Fonts/CustomFont.d.ts +14 -14
  213. package/components/Fonts/CustomFont.js +16 -16
  214. package/components/Fonts/GoogleFont.d.ts +10 -10
  215. package/components/Fonts/GoogleFont.js +34 -34
  216. package/components/Fonts/TypekitFont.d.ts +16 -16
  217. package/components/Fonts/TypekitFont.js +24 -24
  218. package/components/Fonts/injectFont.d.ts +11 -11
  219. package/components/Fonts/injectFont.js +29 -29
  220. package/components/Head.d.ts +11 -11
  221. package/components/Head.js +79 -74
  222. package/components/Head.js.map +1 -1
  223. package/components/Mutation/AddToCart/addToCartUtils.d.ts +18 -18
  224. package/components/Mutation/AddToCart/addToCartUtils.js +51 -51
  225. package/components/Mutation/AddToCartFormik.d.ts +53 -53
  226. package/components/Mutation/AddToCartFormik.js +171 -171
  227. package/components/Mutation/DecrementQuantity.d.ts +4 -4
  228. package/components/Mutation/DecrementQuantity.js +34 -34
  229. package/components/Mutation/IncrementQuantity.d.ts +4 -4
  230. package/components/Mutation/IncrementQuantity.js +34 -34
  231. package/components/Mutation/RemoveFromCart.d.ts +5 -5
  232. package/components/Mutation/RemoveFromCart.js +51 -51
  233. package/components/Mutation/SetQuantity.d.ts +4 -4
  234. package/components/Mutation/SetQuantity.js +36 -36
  235. package/components/Mutation/SubscribeToNewsletter.d.ts +4 -4
  236. package/components/Mutation/SubscribeToNewsletter.js +29 -29
  237. package/components/Mutation/SubscribeToStockNotifications.d.ts +4 -4
  238. package/components/Mutation/SubscribeToStockNotifications.js +30 -30
  239. package/components/Mutation/cartMutationUtils.d.ts +28 -28
  240. package/components/Mutation/cartMutationUtils.js +108 -108
  241. package/components/Mutation/cartMutationUtils.spec.js +142 -142
  242. package/components/Mutation/useDecrementQuantity.d.ts +11 -11
  243. package/components/Mutation/useDecrementQuantity.js +53 -53
  244. package/components/Mutation/useIncrementQuantity.d.ts +11 -11
  245. package/components/Mutation/useIncrementQuantity.js +53 -53
  246. package/components/Mutation/useRemoveFromCart.d.ts +13 -13
  247. package/components/Mutation/useRemoveFromCart.js +49 -49
  248. package/components/Mutation/useSetQuantity.d.ts +12 -12
  249. package/components/Mutation/useSetQuantity.js +37 -37
  250. package/components/Notifications/Notifications.d.ts +15 -15
  251. package/components/Notifications/Notifications.js +26 -26
  252. package/components/Notifications/index.d.ts +2 -2
  253. package/components/Notifications/index.js +2 -2
  254. package/components/Notifications/notificationMachine.d.ts +30 -30
  255. package/components/Notifications/notificationMachine.js +73 -73
  256. package/components/Notifications/notificationsMachine.d.ts +37 -37
  257. package/components/Notifications/notificationsMachine.js +65 -65
  258. package/components/Notifications/useNotification.d.ts +9 -9
  259. package/components/Notifications/useNotification.js +26 -26
  260. package/components/OpenGraph/OpenGraph.test.js +180 -180
  261. package/components/OpenGraph/OpenGraphGeneralPageData.d.ts +25 -25
  262. package/components/OpenGraph/OpenGraphGeneralPageData.js +36 -36
  263. package/components/OpenGraph/OpenGraphGeneralPageData.js.map +1 -1
  264. package/components/OpenGraph/OpenGraphProductData.d.ts +25 -25
  265. package/components/OpenGraph/OpenGraphProductData.js +48 -48
  266. package/components/OpenGraph/OpenGraphProductData.js.map +1 -1
  267. package/components/OpenGraph/index.d.ts +2 -2
  268. package/components/OpenGraph/index.js +2 -2
  269. package/components/Pagination/PaginationContainer.d.ts +2 -2
  270. package/components/Pagination/PaginationContainer.js +4 -4
  271. package/components/Pagination/PaginationContext.d.ts +14 -14
  272. package/components/Pagination/PaginationContext.js +3 -3
  273. package/components/Pagination/PaginationProvider.d.ts +19 -19
  274. package/components/Pagination/PaginationProvider.js +94 -94
  275. package/components/Pagination/PaginationProvider.test.js +282 -282
  276. package/components/PreviewContext.d.ts +10 -10
  277. package/components/PreviewContext.js +26 -26
  278. package/components/ProductConfigurationProvider/ConfigPrice.gql +22 -22
  279. package/components/ProductConfigurationProvider/ProductConfigurationContext.d.ts +13 -13
  280. package/components/ProductConfigurationProvider/ProductConfigurationContext.js +4 -4
  281. package/components/ProductConfigurationProvider/ProductConfigurationProvider.d.ts +6 -6
  282. package/components/ProductConfigurationProvider/ProductConfigurationProvider.js +49 -49
  283. package/components/Query/CartProvider.d.ts +22 -22
  284. package/components/Query/CartProvider.js +67 -67
  285. package/components/SortOrder/SortOrderContainer.d.ts +40 -40
  286. package/components/SortOrder/SortOrderContainer.js +101 -101
  287. package/components/SortOrder/SortOrderContext.d.ts +9 -9
  288. package/components/SortOrder/SortOrderContext.js +8 -8
  289. package/components/StructuredData/SiteLinksSearchStructuredData.d.ts +3 -3
  290. package/components/StructuredData/SiteLinksSearchStructuredData.js +24 -24
  291. package/components/StructuredData/StructuredBreadcrumbData.d.ts +12 -12
  292. package/components/StructuredData/StructuredBreadcrumbData.js +54 -54
  293. package/components/StructuredData/StructuredCategoryData.d.ts +16 -16
  294. package/components/StructuredData/StructuredCategoryData.js +17 -17
  295. package/components/StructuredData/StructuredData.d.ts +9 -9
  296. package/components/StructuredData/StructuredData.js +6 -6
  297. package/components/StructuredData/StructuredPageData.d.ts +16 -16
  298. package/components/StructuredData/StructuredPageData.js +16 -16
  299. package/components/StructuredData/StructuredProductData.d.ts +18 -18
  300. package/components/StructuredData/StructuredProductData.js +42 -42
  301. package/components/StructuredData/StructuredProductData.test.js +130 -130
  302. package/components/StructuredData/index.d.ts +5 -5
  303. package/components/StructuredData/index.js +5 -5
  304. package/data/cache.d.ts +3 -3
  305. package/data/cache.js +20 -20
  306. package/data/fragmentTypes.d.ts +8 -8
  307. package/data/fragmentTypes.js +83 -83
  308. package/data/fragments/BadgeFragment.gql +7 -7
  309. package/data/fragments/CartCoreFragment.gql +89 -89
  310. package/data/fragments/ChannelsFragment.gql +59 -58
  311. package/data/fragments/CommentsFragment.gql +6 -6
  312. package/data/fragments/HeadFragment.gql +9 -9
  313. package/data/fragments/PriceFragment.gql +5 -5
  314. package/data/fragments/ProductCampaignFragment.gql +10 -10
  315. package/data/fragments/ProductConfigurationsFragment.gql +24 -24
  316. package/data/fragments/ProductListsFragments.gql +94 -94
  317. package/data/fragments/ProductMetadataFragment.gql +20 -20
  318. package/data/fragments/ProductPriceFragment.gql +10 -10
  319. package/data/fragments/ProductVariantPriceFragment.gql +10 -10
  320. package/data/fragments/RouteCrumbFragment.gql +20 -20
  321. package/data/fragments/RouteMetaFragment.gql +18 -18
  322. package/data/fragments/StockStatusFragment.gql +7 -7
  323. package/data/fragments/index.d.ts +1 -1
  324. package/data/fragments/index.js +1 -1
  325. package/data/mutations/accountMutations.gql +28 -28
  326. package/data/mutations/cartMutations.gql +41 -41
  327. package/data/mutations/productListMutations.gql +18 -18
  328. package/data/mutations/signup.gql +7 -7
  329. package/data/mutations/subscribeToNewsletter.gql +3 -3
  330. package/data/mutations/subscribeToStockNotifications.gql +6 -6
  331. package/data/mutations/updateCustomer.gql +5 -5
  332. package/data/mutations/updatePassword.gql +5 -5
  333. package/data/queries/CartMutationQuery.gql +36 -36
  334. package/data/queries/CartQuery.gql +7 -7
  335. package/data/queries/GetCustomerCountryCode.gql +9 -9
  336. package/data/queries/PersonLookupQuery.gql +28 -28
  337. package/data/queries/ProductLists.gql +8 -8
  338. package/dependencies.d.ts +104 -104
  339. package/errorReporting.browser.d.ts +3 -3
  340. package/errorReporting.browser.js +11 -11
  341. package/errorReporting.d.ts +3 -3
  342. package/errorReporting.js +19 -19
  343. package/errorReporting.server.d.ts +3 -3
  344. package/errorReporting.server.js +11 -11
  345. package/errorReporting.shared.d.ts +5 -5
  346. package/errorReporting.shared.js +16 -16
  347. package/experiments/ExperimentsProvider.d.ts +4 -4
  348. package/experiments/ExperimentsProvider.js +28 -28
  349. package/experiments/ExperimentsProvider.test.js +105 -105
  350. package/experiments/integration.test.js +76 -76
  351. package/experiments/selectExperimentVariant.d.ts +3 -3
  352. package/experiments/selectExperimentVariant.js +34 -34
  353. package/experiments/selectExperimentVariant.test.js +64 -64
  354. package/experiments/useExperiment.d.ts +2 -2
  355. package/experiments/useExperiment.js +10 -10
  356. package/experiments/useExperiment.test.js +100 -100
  357. package/global.d.ts +1 -1
  358. package/helpers/decodeUrlQuery.d.ts +9 -9
  359. package/helpers/decodeUrlQuery.js +26 -26
  360. package/helpers/decodeUrlQuery.test.js +54 -54
  361. package/helpers/distance.d.ts +7 -7
  362. package/helpers/distance.js +12 -12
  363. package/helpers/encodeVariant.d.ts +3 -3
  364. package/helpers/encodeVariant.js +24 -24
  365. package/helpers/getBreakpointsFromValues.d.ts +6 -6
  366. package/helpers/getBreakpointsFromValues.js +14 -14
  367. package/helpers/getBreakpointsFromValues.test.js +47 -47
  368. package/helpers/getCartItemVariant.d.ts +7 -7
  369. package/helpers/getCartItemVariant.js +8 -8
  370. package/helpers/getErrorDetail.d.ts +7 -7
  371. package/helpers/getErrorDetail.js +11 -11
  372. package/helpers/getErrorDetail.test.js +44 -44
  373. package/helpers/getHeaders.d.ts +6 -6
  374. package/helpers/getHeaders.js +3 -3
  375. package/helpers/isRelativeUrl.d.ts +1 -1
  376. package/helpers/isRelativeUrl.js +3 -3
  377. package/helpers/logError.d.ts +1 -1
  378. package/helpers/logError.js +16 -16
  379. package/helpers/logWarningInDev.d.ts +1 -1
  380. package/helpers/logWarningInDev.js +6 -6
  381. package/helpers/throwErrorInDev.d.ts +6 -6
  382. package/helpers/throwErrorInDev.js +14 -14
  383. package/helpers/uniqueId.d.ts +5 -5
  384. package/helpers/uniqueId.js +9 -9
  385. package/hooks/CartCheckoutQuery.gql +5 -5
  386. package/hooks/Channels/useChannelSettings.d.ts +7 -7
  387. package/hooks/Channels/useChannelSettings.js +11 -11
  388. package/hooks/Channels/useChannelSettings.js.map +1 -1
  389. package/hooks/Channels/useChannelSettings.test.js +51 -51
  390. package/hooks/Filters/useBooleanFilter.d.ts +8 -8
  391. package/hooks/Filters/useBooleanFilter.js +20 -20
  392. package/hooks/Filters/useFilters.d.ts +3 -3
  393. package/hooks/Filters/useFilters.js +15 -15
  394. package/hooks/Filters/useListFilter.d.ts +10 -10
  395. package/hooks/Filters/useListFilter.js +37 -37
  396. package/hooks/Filters/useMultiFilter.d.ts +13 -13
  397. package/hooks/Filters/useMultiFilter.js +49 -49
  398. package/hooks/Filters/useRangeFilter.d.ts +10 -10
  399. package/hooks/Filters/useRangeFilter.js +35 -35
  400. package/hooks/Filters/useSortOrder.d.ts +11 -11
  401. package/hooks/Filters/useSortOrder.js +21 -21
  402. package/hooks/FreeShippingQuery.gql +16 -16
  403. package/hooks/PackageProducts/index.d.ts +2 -2
  404. package/hooks/PackageProducts/index.js +2 -2
  405. package/hooks/PackageProducts/packagePriceQuery.gql +29 -29
  406. package/hooks/PackageProducts/usePackageProductItem.d.ts +17 -17
  407. package/hooks/PackageProducts/usePackageProductItem.js +26 -26
  408. package/hooks/PackageProducts/usePackageProducts.d.ts +19 -19
  409. package/hooks/PackageProducts/usePackageProducts.js +345 -345
  410. package/hooks/PackageProducts/usePackageProducts.test.js +383 -383
  411. package/hooks/Product/index.d.ts +1 -1
  412. package/hooks/Product/index.js +1 -1
  413. package/hooks/Product/useStockStatus.d.ts +9 -9
  414. package/hooks/Product/useStockStatus.js +25 -25
  415. package/hooks/Product/useSwitchToVariantImage.d.ts +9 -9
  416. package/hooks/Product/useSwitchToVariantImage.js +20 -20
  417. package/hooks/ProductList/ProductListContext.d.ts +7 -7
  418. package/hooks/ProductList/ProductListContext.js +110 -110
  419. package/hooks/ProductList/action-creators.d.ts +46 -46
  420. package/hooks/ProductList/action-creators.js +296 -296
  421. package/hooks/ProductList/index.d.ts +118 -118
  422. package/hooks/ProductList/index.js +21 -21
  423. package/hooks/ProductList/list-transforms.d.ts +73 -73
  424. package/hooks/ProductList/list-transforms.js +106 -106
  425. package/hooks/ProductList/list-transforms.test.js +489 -489
  426. package/hooks/ProductList/product-list-reducer.d.ts +76 -76
  427. package/hooks/ProductList/product-list-reducer.js +197 -197
  428. package/hooks/ProductList/product-list-reducer.test.js +464 -464
  429. package/hooks/ProductList/useProductList.d.ts +13 -13
  430. package/hooks/ProductList/useProductList.js +93 -93
  431. package/hooks/ProductList/useProductListItems.d.ts +10 -10
  432. package/hooks/ProductList/useProductListItems.js +48 -48
  433. package/hooks/ProductList/validate-product.d.ts +6 -6
  434. package/hooks/ProductList/validate-product.js +40 -40
  435. package/hooks/Subscriptions/useNewsletterSubscription.d.ts +38 -38
  436. package/hooks/Subscriptions/useNewsletterSubscription.js +41 -41
  437. package/hooks/Subscriptions/useStockNotifications.d.ts +36 -36
  438. package/hooks/Subscriptions/useStockNotifications.js +37 -37
  439. package/hooks/Subscriptions/useStoreSubscriptions.d.ts +48 -48
  440. package/hooks/Subscriptions/useStoreSubscriptions.js +150 -150
  441. package/hooks/Subscriptions/useStoresubscriptions.test.js +179 -179
  442. package/hooks/useAddMultipleToCart.d.ts +27 -27
  443. package/hooks/useAddMultipleToCart.js +113 -113
  444. package/hooks/useAddMultipleToCart.test.js +181 -181
  445. package/hooks/useChannelBanner.js +22 -22
  446. package/hooks/useChannelBanner.test.js +77 -77
  447. package/hooks/useCustomerOrders.test.js +176 -176
  448. package/hooks/useCustomerOrdersQuery.d.ts +21 -21
  449. package/hooks/useCustomerOrdersQuery.js +20 -20
  450. package/hooks/useDeleteAccountMutation.d.ts +15 -15
  451. package/hooks/useDeleteAccountMutation.js +38 -38
  452. package/hooks/useDynamicPrice.d.ts +3 -3
  453. package/hooks/useDynamicPrice.js +24 -24
  454. package/hooks/useFreeShippingCheck.d.ts +15 -15
  455. package/hooks/useFreeShippingCheck.js +30 -30
  456. package/hooks/useGeolocation.d.ts +11 -11
  457. package/hooks/useGeolocation.js +33 -33
  458. package/hooks/useInfinitePagination.d.ts +37 -37
  459. package/hooks/useInfinitePagination.js +138 -138
  460. package/hooks/useLogError.d.ts +1 -1
  461. package/hooks/useLogError.js +7 -7
  462. package/hooks/useLoginMutation.d.ts +12 -12
  463. package/hooks/useLoginMutation.js +14 -14
  464. package/hooks/useLoginRedirect.d.ts +4 -4
  465. package/hooks/useLoginRedirect.js +36 -36
  466. package/hooks/useOrderDetailQuery.d.ts +20 -20
  467. package/hooks/useOrderDetailQuery.js +28 -28
  468. package/hooks/usePreconnectLinks.d.ts +10 -10
  469. package/hooks/usePreconnectLinks.js +29 -29
  470. package/hooks/usePreconnectLinks.test.js +95 -95
  471. package/hooks/usePrice.d.ts +39 -39
  472. package/hooks/usePrice.js +71 -71
  473. package/hooks/usePrice.test.js +171 -171
  474. package/hooks/useProductVariants/index.d.ts +1 -1
  475. package/hooks/useProductVariants/index.js +1 -1
  476. package/hooks/useProductVariants/useProductVariants.d.ts +19 -19
  477. package/hooks/useProductVariants/useProductVariants.js +202 -202
  478. package/hooks/useProductVariants/useProductVariants.test.js +415 -415
  479. package/hooks/useProductVariants/useVariantFromUrl.d.ts +5 -5
  480. package/hooks/useProductVariants/useVariantFromUrl.js +15 -15
  481. package/hooks/useProductVariants/useVariantFromUrl.test.js +79 -79
  482. package/hooks/useRoutePreload.d.ts +24 -24
  483. package/hooks/useRoutePreload.js +39 -39
  484. package/hooks/useShopConfig.d.ts +1 -1
  485. package/hooks/useShopConfig.js +10 -10
  486. package/hooks/useShopConfig.js.map +1 -1
  487. package/hooks/useThrowErrorInDev.d.ts +1 -1
  488. package/hooks/useThrowErrorInDev.js +7 -7
  489. package/hooks/useThunkReducer.d.ts +7 -7
  490. package/hooks/useThunkReducer.js +23 -23
  491. package/hooks/useWarningInDev.d.ts +1 -1
  492. package/hooks/useWarningInDev.js +9 -9
  493. package/inServer.d.ts +1 -1
  494. package/inServer.js +2 -2
  495. package/index.d.ts +1 -1
  496. package/index.js +1 -1
  497. package/integrations/addwishSchemaExtension.d.ts +35 -35
  498. package/integrations/addwishSchemaExtension.js +140 -140
  499. package/integrations/nostoSchemaExtension.d.ts +5 -5
  500. package/integrations/nostoSchemaExtension.js +76 -76
  501. package/integrations/sluggishSchemaExtension.d.ts +2 -2
  502. package/integrations/sluggishSchemaExtension.js +26 -26
  503. package/package.json +2 -2
  504. package/polyfills.d.ts +1 -1
  505. package/polyfills.js +37 -37
  506. package/registerServiceWorker.js +110 -110
  507. package/resolvers/filters/boolFilter.d.ts +3 -3
  508. package/resolvers/filters/boolFilter.js +84 -84
  509. package/resolvers/filters/defaultActiveFilters.d.ts +3 -3
  510. package/resolvers/filters/defaultActiveFilters.js +8 -8
  511. package/resolvers/filters/filterParams.d.ts +3 -3
  512. package/resolvers/filters/filterParams.js +84 -84
  513. package/resolvers/filters/filters.d.ts +5 -5
  514. package/resolvers/filters/filters.js +78 -78
  515. package/resolvers/filters/index.d.ts +27 -27
  516. package/resolvers/filters/index.js +7 -7
  517. package/resolvers/filters/listFilter.d.ts +7 -7
  518. package/resolvers/filters/listFilter.js +73 -73
  519. package/resolvers/filters/listFilterItem.d.ts +3 -3
  520. package/resolvers/filters/listFilterItem.js +122 -122
  521. package/resolvers/filters/multiListFilter.d.ts +5 -5
  522. package/resolvers/filters/multiListFilter.js +195 -195
  523. package/resolvers/filters/multiListFilterList.d.ts +3 -3
  524. package/resolvers/filters/multiListFilterList.js +55 -55
  525. package/resolvers/filters/rangeFilter.d.ts +5 -5
  526. package/resolvers/filters/rangeFilter.js +137 -137
  527. package/resolvers/filters/updateQueryString.d.ts +12 -12
  528. package/resolvers/filters/updateQueryString.js +116 -116
  529. package/resolvers/index.d.ts +37 -37
  530. package/resolvers/index.js +37 -37
  531. package/scripts/dev-apolloServer.js +31 -31
  532. package/sentry/client.d.ts +1 -1
  533. package/sentry/client.js +29 -29
  534. package/sentry/common.d.ts +1 -1
  535. package/sentry/common.js +4 -4
  536. package/sentry/server.d.ts +1 -1
  537. package/sentry/server.js +19 -19
  538. package/sentry/utils.d.ts +1 -1
  539. package/sentry/utils.js +1 -1
  540. package/server/graphql.d.ts +20 -20
  541. package/server/graphql.js +118 -118
  542. package/server/graphql.test.js +123 -123
  543. package/server/index.d.ts +2 -2
  544. package/server/index.js +2 -2
  545. package/server/tracking/facebook.d.ts +5 -5
  546. package/server/tracking/facebook.js +132 -132
  547. package/server/tracking/middleware.d.ts +8 -8
  548. package/server/tracking/middleware.js +14 -14
  549. package/server/tracking/types.d.ts +33 -33
  550. package/setupTests.js +2 -2
  551. package/test-utils/ProviderPyramid.js +45 -45
  552. package/test-utils/mockShopConfig.js +26 -26
  553. package/test-utils/mockedProduct.js +253 -253
  554. package/test-utils/renderWithRouter.js +20 -20
  555. package/test-utils/variables.js +2476 -1231
  556. package/time.d.ts +1 -1
  557. 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
+ });