@jetshop/core 5.13.10-0 → 5.14.0-alpha.49df897e

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 +372 -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 +732 -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 +2465 -1231
  556. package/time.d.ts +1 -1
  557. package/time.js +5 -5
@@ -1,538 +1,514 @@
1
- import {
2
- createSelectedChannel,
3
- getSelectedAndRecommendedChannel
4
- } from './channelUtils';
5
- import { MockLink } from 'apollo-link-mock';
6
- import { InMemoryCache } from 'apollo-cache-inmemory';
7
- import ApolloClient from 'apollo-client';
8
- import gql from 'graphql-tag';
9
- import { ChannelHandler } from './ChannelHandler';
10
- import { channels, singleDomainChannels } from '../test-utils/variables';
11
- import { Cookies } from 'react-cookie';
12
- import { primaryRouteForPathFetcher } from './redirectUtils';
13
-
14
- const preserveRedirectRouteQuery = gql`
15
- query preserveRedirectRouteQuery($path: String!) {
16
- route(path: $path) {
17
- id
18
- object {
19
- ... on Category {
20
- id
21
- __typename
22
- }
23
- ... on Product {
24
- id
25
- __typename
26
- }
27
- ... on Page {
28
- id
29
- __typename
30
- }
31
- ... on StartPage {
32
- id
33
- __typename
34
- }
35
- __typename
36
- }
37
- __typename
38
- }
39
- }
40
- `;
41
-
42
- const startPagePathnameRedirectQuery = gql`
43
- query StartPagePathnameRedirectQuery($id: Int!) {
44
- StartPage: startPage(id: $id) {
45
- id
46
- primaryRoute {
47
- id
48
- path
49
- __typename
50
- }
51
- __typename
52
- }
53
- }
54
- `;
55
-
56
- const startPagePathnameRedirectRequest = {
57
- request: {
58
- query: startPagePathnameRedirectQuery,
59
- variables: { id: 44 }
60
- },
61
- result: {
62
- data: {
63
- StartPage: {
64
- id: 44,
65
- primaryRoute: {
66
- id: '/',
67
- path: '/',
68
- __typename: 'Route'
69
- },
70
- __typename: 'StartPage'
71
- }
72
- }
73
- }
74
- };
75
-
76
- const productPathnameRedirectQuery = gql`
77
- query ProductPathnameRedirectQuery($id: Int!) {
78
- Product: product(id: $id) {
79
- id
80
- primaryRoute {
81
- id
82
- path
83
- __typename
84
- }
85
- __typename
86
- }
87
- }
88
- `;
89
-
90
- const redirectQueryMocks = [
91
- {
92
- request: {
93
- query: preserveRedirectRouteQuery,
94
- variables: {
95
- path: '/'
96
- }
97
- },
98
- result: {
99
- data: {
100
- route: {
101
- id: '/',
102
- object: {
103
- id: 44,
104
- __typename: 'StartPage'
105
- },
106
- __typename: 'Route'
107
- },
108
- __typename: 'Query'
109
- }
110
- }
111
- },
112
- startPagePathnameRedirectRequest,
113
- startPagePathnameRedirectRequest,
114
- startPagePathnameRedirectRequest,
115
- startPagePathnameRedirectRequest,
116
- {
117
- request: {
118
- query: preserveRedirectRouteQuery,
119
- variables: {
120
- path: '/accessories/orchid-peach-bag'
121
- }
122
- },
123
- result: {
124
- data: {
125
- route: {
126
- id: '/accessories/orchid-peach-bag',
127
- object: {
128
- id: 522,
129
- __typename: 'Product'
130
- },
131
- __typename: 'Route'
132
- }
133
- }
134
- }
135
- },
136
- {
137
- request: {
138
- query: productPathnameRedirectQuery,
139
- variables: { id: 522 }
140
- },
141
- result: {
142
- data: {
143
- Product: {
144
- id: 522,
145
- primaryRoute: {
146
- id: '/accessories/bags/orchid-peach-bag-uk',
147
- path: '/accessories/bags/orchid-peach-bag-uk',
148
- __typename: 'Route'
149
- },
150
- __typename: 'Product'
151
- }
152
- }
153
- }
154
- },
155
- {
156
- request: {
157
- query: productPathnameRedirectQuery,
158
- variables: { id: 522 }
159
- },
160
- result: {
161
- data: {
162
- Product: {
163
- id: 522,
164
- primaryRoute: {
165
- id: '/accessories/orchid-peach-bag',
166
- path: '/accessories/orchid-peach-bag',
167
- __typename: 'Route'
168
- },
169
- __typename: 'Product'
170
- }
171
- }
172
- }
173
- }
174
- ];
175
-
176
- function createClient(mocks) {
177
- return new ApolloClient({
178
- cache: new InMemoryCache({ addTypename: true }),
179
- link: new MockLink(mocks)
180
- });
181
- }
182
-
183
- const client = createClient(redirectQueryMocks);
184
- const getPrimaryRoutePath = primaryRouteForPathFetcher(client);
185
-
186
- const selectedChannelSingleDomain = createSelectedChannel(
187
- singleDomainChannels[0]
188
- );
189
-
190
- describe('Channel utils', () => {
191
- beforeEach(() => {
192
- // Workaround changes in universal-cookie
193
- Object.defineProperty(document, 'cookie', {
194
- value: null
195
- });
196
- });
197
-
198
- it('successfully redirect to the appropriate channel', () => {
199
- const recommendedChannel = createSelectedChannel(channels[1]);
200
- const selectedChannel = createSelectedChannel(channels[0]);
201
- const channelHandler = new ChannelHandler({
202
- selectedChannel,
203
- recommendedChannel,
204
- getPrimaryRoutePath,
205
- channels
206
- });
207
- const redirectUrl = channelHandler.getRedirectUrl({
208
- client,
209
- url: selectedChannel.url,
210
- newChannel: recommendedChannel
211
- });
212
- expect(redirectUrl).resolves.toBe(
213
- 'https://flight-m2.jetshop.se/?culture=sv-SE&channelCountry=SE&channel=SE'
214
- );
215
- });
216
-
217
- it('Will not redirect when there is a channel in the cookie', () => {
218
- const cookies = new Cookies();
219
- cookies.set('channel', channels[0].name);
220
- const { redirect } = getSelectedAndRecommendedChannel({
221
- url: channels[0].url,
222
- singleDomainMode: false,
223
- channels,
224
- cookies
225
- });
226
- expect(redirect).toBeFalsy();
227
- });
228
-
229
- it('Will not redirect when there is a channel in the query string', () => {
230
- const cookies = new Cookies();
231
- cookies.set('channel', channels[0].name);
232
- const { redirect } = getSelectedAndRecommendedChannel({
233
- url: channels[0].url + '?channelCountry="US"',
234
- singleDomainMode: false,
235
- channels,
236
- cookies
237
- });
238
- expect(redirect).toBeFalsy();
239
- });
240
-
241
- it('Will not geo redirect when there is a channel in the query string', () => {
242
- const cookies = new Cookies();
243
- cookies.set('channel', channels[0].name);
244
- const { redirect } = getSelectedAndRecommendedChannel({
245
- url: channels[0].url + '?channelCountry="US"',
246
- geoipCountry: 'SE',
247
- singleDomainMode: false,
248
- channels,
249
- cookies
250
- });
251
- expect(redirect).toBeFalsy();
252
- });
253
-
254
- it('Will not redirect when the url is already correct', () => {
255
- const cookies = new Cookies();
256
- const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
257
- url: channels[0].url,
258
- geoipCountry: 'US',
259
- singleDomainMode: false,
260
- channels,
261
- cookies
262
- });
263
- expect(redirect).toBeFalsy();
264
- expect(recommendedChannel).toBeFalsy();
265
- });
266
-
267
- it('Will redirect to the channel that has the country set as the default country', () => {
268
- const cookies = new Cookies();
269
- channels[0].countries.push({
270
- name: 'Sweden',
271
- code: 'SE',
272
- isDefault: false
273
- });
274
- const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
275
- url: channels[0].url,
276
- geoipCountry: 'SE',
277
- singleDomainMode: false,
278
- channels,
279
- cookies
280
- });
281
- expect(redirect).toBeTruthy();
282
- expect(recommendedChannel.name).toBe('SE');
283
- });
284
-
285
- it('Will not redirect when the channel is from an unkown country', () => {
286
- const cookies = new Cookies();
287
- const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
288
- url: channels[0].url,
289
- geoipCountry: 'CO',
290
- singleDomainMode: false,
291
- channels,
292
- cookies
293
- });
294
- expect(redirect).toBeFalsy();
295
- expect(recommendedChannel).toBeFalsy();
296
- });
297
- });
298
-
299
- describe('Single domain mode', () => {
300
- it('Will not redirect when the channel is default, and the selected channel is also default', () => {
301
- const cookies = new Cookies();
302
- const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
303
- url: selectedChannelSingleDomain.url,
304
- singleDomainMode: true,
305
- channels: singleDomainChannels,
306
- cookies
307
- });
308
- expect(redirect).toBeFalsy();
309
- expect(recommendedChannel).toBeFalsy();
310
- });
311
-
312
- it('Will redirect when the url is at the wrong channel and the channel is default', () => {
313
- const cookies = new Cookies();
314
- const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
315
- url: channels[0].url,
316
- singleDomainMode: true,
317
- channels: singleDomainChannels,
318
- cookies
319
- });
320
- expect(redirect).toBe(true);
321
- expect(recommendedChannel.url).toBe(selectedChannelSingleDomain.url);
322
- });
323
-
324
- it('Will not redirect when the redirect is disabled', () => {
325
- const cookies = new Cookies();
326
- const { redirect } = getSelectedAndRecommendedChannel({
327
- url: channels[0].url + '?redirectDisabled=true',
328
- singleDomainMode: true,
329
- channels: singleDomainChannels,
330
- cookies
331
- });
332
- expect(redirect).toBe(false);
333
- });
334
-
335
- it('Will not when the url is at the right channel', () => {
336
- const cookies = new Cookies();
337
- const { redirect } = getSelectedAndRecommendedChannel({
338
- url: selectedChannelSingleDomain.url,
339
- singleDomainMode: true,
340
- channels: singleDomainChannels,
341
- cookies
342
- });
343
- expect(redirect).toBe(false);
344
- });
345
-
346
- it('Will redirect when the url is at the wrong channel', () => {
347
- const cookies = new Cookies();
348
- cookies.set('channel', singleDomainChannels[2].name);
349
- const { redirect, recommendedChannel } = getSelectedAndRecommendedChannel({
350
- url: selectedChannelSingleDomain.url,
351
- singleDomainMode: true,
352
- channels: singleDomainChannels,
353
- cookies
354
- });
355
- expect(redirect).toBe(true);
356
- expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
357
- });
358
-
359
- it('Georedirect will respect single domain mode', () => {
360
- const cookies = new Cookies();
361
- const { redirect, recommendedChannel } = getSelectedAndRecommendedChannel({
362
- url: selectedChannelSingleDomain.url,
363
- singleDomainMode: true,
364
- channels: singleDomainChannels,
365
- cookies,
366
- geoipCountry: 'UK'
367
- });
368
- expect(redirect).toBe(true);
369
- expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
370
- });
371
-
372
- it('Georedirect will respect single domain mode when there is a domain path', async () => {
373
- const urlToPreserve = '/accessories/orchid-peach-bag';
374
- const cookies = new Cookies();
375
- const { redirect, recommendedChannel, selectedChannel } =
376
- getSelectedAndRecommendedChannel({
377
- url: selectedChannelSingleDomain.url + urlToPreserve,
378
- singleDomainMode: true,
379
- channels: singleDomainChannels,
380
- cookies,
381
- geoipCountry: 'UK'
382
- });
383
- expect(redirect).toBe(true);
384
- expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
385
- const channelHandler = new ChannelHandler({
386
- selectedChannel,
387
- recommendedChannel,
388
- getPrimaryRoutePath,
389
- channels
390
- });
391
-
392
- const redirectUrl = channelHandler.getRedirectUrl({
393
- client,
394
- url: selectedChannelSingleDomain.url + urlToPreserve,
395
- newChannel: channelHandler.recommendedChannel,
396
- preserveRedirect: true
397
- });
398
- await expect(redirectUrl).resolves.toBe(
399
- 'https://flight-m2.jetshop.se/uk/accessories/bags/orchid-peach-bag-uk?culture=sv-SE&channelCountry=UK&channel=UK'
400
- );
401
- });
402
-
403
- it('Redirect on single domain mode when the basename shows up in the url', async () => {
404
- const urlToPreserve = '/accessories/int/orchid-peach-bag';
405
- const cookies = new Cookies();
406
- const { redirect, recommendedChannel, selectedChannel } =
407
- getSelectedAndRecommendedChannel({
408
- url: channels[0].url + urlToPreserve,
409
- singleDomainMode: true,
410
- channels: singleDomainChannels,
411
- cookies,
412
- geoipCountry: 'UK'
413
- });
414
- expect(redirect).toBe(true);
415
- const channelHandler = new ChannelHandler({
416
- selectedChannel,
417
- recommendedChannel,
418
- getPrimaryRoutePath,
419
- channels
420
- });
421
-
422
- const redirectUrl = channelHandler.getRedirectUrl({
423
- client,
424
- url: channels[0].url + urlToPreserve,
425
- newChannel: channelHandler.recommendedChannel,
426
- preserveRedirect: false
427
- });
428
- await expect(redirectUrl).resolves.toBe(
429
- `https://flight-m2.jetshop.se/uk${urlToPreserve}?culture=sv-SE&channelCountry=UK&channel=UK`
430
- );
431
- });
432
-
433
- it('Redirect on single domain mode when there is a domain path but no basename', async () => {
434
- const urlToPreserve = '/accessories/orchid-peach-bag';
435
- const cookies = new Cookies();
436
- const { redirect, recommendedChannel, selectedChannel } =
437
- getSelectedAndRecommendedChannel({
438
- url: channels[0].url + urlToPreserve,
439
- singleDomainMode: true,
440
- channels: singleDomainChannels,
441
- cookies
442
- });
443
- expect(redirect).toBe(true);
444
- expect(recommendedChannel.url).toBe('https://flight.jetshop.se/int');
445
- const channelHandler = new ChannelHandler({
446
- selectedChannel,
447
- recommendedChannel,
448
- getPrimaryRoutePath,
449
- channels
450
- });
451
-
452
- const redirectUrl = channelHandler.getRedirectUrl({
453
- client,
454
- url: channels[0].url + urlToPreserve,
455
- newChannel: channelHandler.recommendedChannel,
456
- preserveRedirect: true
457
- });
458
- await expect(redirectUrl).resolves.toBe(
459
- `https://flight.jetshop.se/int${urlToPreserve}?culture=en-GB&channelCountry=US&channel=INT`
460
- );
461
- });
462
-
463
- it('Will set the appropriate language based on basename', async () => {
464
- const cookies = new Cookies();
465
- const { selectedChannel } = getSelectedAndRecommendedChannel({
466
- url: channels[1].url + '/en',
467
- channels,
468
- cookies
469
- });
470
- expect(selectedChannel.language.culture).toBe('en-GB');
471
- });
472
-
473
- it('Will set the appropriate language based on basename in singledomain mode', async () => {
474
- const cookies = new Cookies();
475
- const { selectedChannel } = getSelectedAndRecommendedChannel({
476
- url: singleDomainChannels[1].url + '/en',
477
- channels: singleDomainChannels,
478
- cookies,
479
- singleDomainMode: true
480
- });
481
- expect(selectedChannel.language.culture).toBe('en-GB');
482
- });
483
-
484
- it('Will redirect to a new language basename based on cookies', async () => {
485
- const cookies = new Cookies();
486
- cookies.set('culture', 'en-GB');
487
- const { selectedChannel, recommendedChannel, redirect } =
488
- getSelectedAndRecommendedChannel({
489
- url: channels[1].url,
490
- channels,
491
- cookies
492
- });
493
- expect(redirect).toBe(true);
494
- expect(recommendedChannel.language.culture).toBe('en-GB');
495
- const channelHandler = new ChannelHandler({
496
- selectedChannel,
497
- recommendedChannel,
498
- getPrimaryRoutePath,
499
- channels
500
- });
501
- const redirectUrl = channelHandler.getRedirectUrl({
502
- client,
503
- url: selectedChannel.url,
504
- newChannel: recommendedChannel
505
- });
506
- expect(redirectUrl).resolves.toBe(
507
- 'https://flight-m2.jetshop.se/en/?culture=en-GB&channelCountry=SE&channel=SE'
508
- );
509
- });
510
-
511
- it('Will redirect to a new language basename based on cookies in single domain mode', async () => {
512
- const cookies = new Cookies();
513
- cookies.set('culture', 'en-GB');
514
- const { selectedChannel, recommendedChannel, redirect } =
515
- getSelectedAndRecommendedChannel({
516
- url: singleDomainChannels[1].url,
517
- channels: singleDomainChannels,
518
- cookies,
519
- singleDomainMode: true
520
- });
521
- expect(redirect).toBe(true);
522
- expect(recommendedChannel.language.culture).toBe('en-GB');
523
- const channelHandler = new ChannelHandler({
524
- selectedChannel,
525
- recommendedChannel,
526
- getPrimaryRoutePath,
527
- channels
528
- });
529
- const redirectUrl = channelHandler.getRedirectUrl({
530
- client,
531
- url: selectedChannel.url,
532
- newChannel: recommendedChannel
533
- });
534
- expect(redirectUrl).resolves.toBe(
535
- 'https://flight-m2.jetshop.se/se/en/?culture=en-GB&channelCountry=SE&channel=SE'
536
- );
537
- });
538
- });
1
+ import {
2
+ createSelectedChannel,
3
+ getSelectedAndRecommendedChannel
4
+ } from './channelUtils';
5
+ import { MockLink } from 'apollo-link-mock';
6
+ import {
7
+ InMemoryCache,
8
+ IntrospectionFragmentMatcher
9
+ } from 'apollo-cache-inmemory';
10
+ import ApolloClient from 'apollo-client';
11
+ import gql from 'graphql-tag';
12
+ import { ChannelHandler } from './ChannelHandler';
13
+ import {
14
+ channels,
15
+ singleDomainChannels,
16
+ groupedChannels,
17
+ groupedSingleDomainChannels
18
+ } from '../test-utils/variables';
19
+ import { Cookies } from 'react-cookie';
20
+ import { primaryRouteForPathFetcher } from './redirectUtils';
21
+ import PreserveRedirectRouteQuery from './PreserveRedirectRouteQuery.gql';
22
+ import fragmentTypes from '@jetshop/core/data/fragmentTypes';
23
+
24
+ const startPagePathnameRedirectQuery = gql`
25
+ query StartPagePathnameRedirectQuery($id: Int!) {
26
+ StartPage: startPage(id: $id) {
27
+ id
28
+ primaryRoute {
29
+ id
30
+ path
31
+ __typename
32
+ }
33
+ __typename
34
+ }
35
+ }
36
+ `;
37
+
38
+ const startPagePathnameRedirectRequest = {
39
+ request: {
40
+ query: startPagePathnameRedirectQuery,
41
+ variables: { id: 44 }
42
+ },
43
+ result: {
44
+ data: {
45
+ StartPage: {
46
+ id: 44,
47
+ primaryRoute: {
48
+ id: '/',
49
+ path: '/',
50
+ __typename: 'Route'
51
+ },
52
+ __typename: 'StartPage'
53
+ }
54
+ }
55
+ }
56
+ };
57
+
58
+ const productPathnameRedirectQuery = gql`
59
+ query ProductPathnameRedirectQuery($id: Int!) {
60
+ Product: product(id: $id) {
61
+ id
62
+ primaryRoute {
63
+ id
64
+ path
65
+ __typename
66
+ }
67
+ __typename
68
+ }
69
+ }
70
+ `;
71
+
72
+ const redirectQueryMocks = [
73
+ {
74
+ request: {
75
+ query: PreserveRedirectRouteQuery,
76
+ variables: {
77
+ path: '/'
78
+ }
79
+ },
80
+ result: {
81
+ data: {
82
+ route: {
83
+ id: '/',
84
+ object: {
85
+ id: 44,
86
+ __typename: 'StartPage'
87
+ },
88
+ __typename: 'Route'
89
+ },
90
+ __typename: 'Query'
91
+ }
92
+ }
93
+ },
94
+ startPagePathnameRedirectRequest,
95
+ startPagePathnameRedirectRequest,
96
+ startPagePathnameRedirectRequest,
97
+ startPagePathnameRedirectRequest,
98
+ {
99
+ request: {
100
+ query: PreserveRedirectRouteQuery,
101
+ variables: {
102
+ path: '/accessories/orchid-peach-bag'
103
+ }
104
+ },
105
+ result: {
106
+ data: {
107
+ route: {
108
+ id: '/accessories/orchid-peach-bag',
109
+ object: {
110
+ id: 522,
111
+ __typename: 'Product'
112
+ },
113
+ __typename: 'Route'
114
+ }
115
+ }
116
+ }
117
+ },
118
+ {
119
+ request: {
120
+ query: productPathnameRedirectQuery,
121
+ variables: { id: 522 }
122
+ },
123
+ result: {
124
+ data: {
125
+ Product: {
126
+ id: 522,
127
+ primaryRoute: {
128
+ id: '/accessories/bags/orchid-peach-bag-uk',
129
+ path: '/accessories/bags/orchid-peach-bag-uk',
130
+ __typename: 'Route'
131
+ },
132
+ __typename: 'Product'
133
+ }
134
+ }
135
+ }
136
+ },
137
+ {
138
+ request: {
139
+ query: productPathnameRedirectQuery,
140
+ variables: { id: 522 }
141
+ },
142
+ result: {
143
+ data: {
144
+ Product: {
145
+ id: 522,
146
+ primaryRoute: {
147
+ id: '/accessories/orchid-peach-bag',
148
+ path: '/accessories/orchid-peach-bag',
149
+ __typename: 'Route'
150
+ },
151
+ __typename: 'Product'
152
+ }
153
+ }
154
+ }
155
+ }
156
+ ];
157
+
158
+ function createClient(mocks) {
159
+ return new ApolloClient({
160
+ cache: new InMemoryCache({
161
+ addTypename: true,
162
+ fragmentMatcher: new IntrospectionFragmentMatcher({
163
+ introspectionQueryResultData: {
164
+ __schema: {
165
+ types: fragmentTypes
166
+ }
167
+ }
168
+ })
169
+ }),
170
+ link: new MockLink(mocks)
171
+ });
172
+ }
173
+
174
+ const client = createClient(redirectQueryMocks);
175
+ const getPrimaryRoutePath = primaryRouteForPathFetcher(client);
176
+
177
+ const selectedChannelSingleDomain = createSelectedChannel(
178
+ singleDomainChannels[0]
179
+ );
180
+
181
+ describe('Channel utils', () => {
182
+ beforeEach(() => {
183
+ // Workaround changes in universal-cookie
184
+ Object.defineProperty(document, 'cookie', {
185
+ value: null
186
+ });
187
+ });
188
+
189
+ it('successfully redirect to the appropriate channel', () => {
190
+ const recommendedChannel = createSelectedChannel(channels[1]);
191
+ const selectedChannel = createSelectedChannel(channels[0]);
192
+ const channelHandler = new ChannelHandler({
193
+ selectedChannel,
194
+ recommendedChannel,
195
+ getPrimaryRoutePath,
196
+ channels
197
+ });
198
+ const redirectUrl = channelHandler.getRedirectUrl({
199
+ client,
200
+ url: selectedChannel.url,
201
+ newChannel: recommendedChannel
202
+ });
203
+ expect(redirectUrl).resolves.toBe(
204
+ 'https://flight-m2.jetshop.se/?culture=sv-SE&channelCountry=SE&channel=SE'
205
+ );
206
+ });
207
+
208
+ it('Will not redirect when there is a channel in the cookie', () => {
209
+ const cookies = new Cookies();
210
+ cookies.set('channel', channels[0].name);
211
+ const { redirect } = getSelectedAndRecommendedChannel({
212
+ url: channels[0].url,
213
+ singleDomainMode: false,
214
+ channels,
215
+ cookies
216
+ });
217
+ expect(redirect).toBeFalsy();
218
+ });
219
+
220
+ it('Will not redirect when there is a channel in the query string', () => {
221
+ const cookies = new Cookies();
222
+ cookies.set('channel', channels[0].name);
223
+ const { redirect } = getSelectedAndRecommendedChannel({
224
+ url: channels[0].url + '?channelCountry="US"',
225
+ singleDomainMode: false,
226
+ channels,
227
+ cookies
228
+ });
229
+ expect(redirect).toBeFalsy();
230
+ });
231
+
232
+ it('Will not geo redirect when there is a channel in the query string', () => {
233
+ const cookies = new Cookies();
234
+ cookies.set('channel', channels[0].name);
235
+ const { redirect } = getSelectedAndRecommendedChannel({
236
+ url: channels[0].url + '?channelCountry="US"',
237
+ geoipCountry: 'SE',
238
+ singleDomainMode: false,
239
+ channels,
240
+ cookies
241
+ });
242
+ expect(redirect).toBeFalsy();
243
+ });
244
+
245
+ it('Will not redirect when the url is already correct', () => {
246
+ const cookies = new Cookies();
247
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
248
+ url: channels[0].url,
249
+ geoipCountry: 'US',
250
+ singleDomainMode: false,
251
+ channels,
252
+ cookies
253
+ });
254
+ expect(redirect).toBeFalsy();
255
+ expect(recommendedChannel).toBeFalsy();
256
+ });
257
+
258
+ it('Will redirect to the channel that has the country set as the default country', () => {
259
+ const cookies = new Cookies();
260
+ channels[0].countries.push({
261
+ name: 'Sweden',
262
+ code: 'SE',
263
+ isDefault: false
264
+ });
265
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
266
+ url: channels[0].url,
267
+ geoipCountry: 'SE',
268
+ singleDomainMode: false,
269
+ channels,
270
+ cookies
271
+ });
272
+ expect(redirect).toBeTruthy();
273
+ expect(recommendedChannel.name).toBe('SE');
274
+ });
275
+
276
+ it('Will not redirect when the channel is from an unkown country', () => {
277
+ const cookies = new Cookies();
278
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
279
+ url: channels[0].url,
280
+ geoipCountry: 'CO',
281
+ singleDomainMode: false,
282
+ channels,
283
+ cookies
284
+ });
285
+ expect(redirect).toBeFalsy();
286
+ expect(recommendedChannel).toBeFalsy();
287
+ });
288
+ });
289
+
290
+ describe('Single domain mode', () => {
291
+ it('Will not redirect when the channel is default, and the selected channel is also default', () => {
292
+ const cookies = new Cookies();
293
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
294
+ url: selectedChannelSingleDomain.url,
295
+ singleDomainMode: true,
296
+ channels: singleDomainChannels,
297
+ cookies
298
+ });
299
+ expect(redirect).toBeFalsy();
300
+ expect(recommendedChannel).toBeFalsy();
301
+ });
302
+ it('Will redirect when the url is at the wrong channel and the channel is default', () => {
303
+ const cookies = new Cookies();
304
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
305
+ url: channels[0].url,
306
+ singleDomainMode: true,
307
+ channels: singleDomainChannels,
308
+ cookies
309
+ });
310
+ expect(redirect).toBe(true);
311
+ expect(recommendedChannel.url).toBe(selectedChannelSingleDomain.url);
312
+ });
313
+ it('Will not redirect when the redirect is disabled', () => {
314
+ const cookies = new Cookies();
315
+ const { redirect } = getSelectedAndRecommendedChannel({
316
+ url: channels[0].url + '?redirectDisabled=true',
317
+ singleDomainMode: true,
318
+ channels: singleDomainChannels,
319
+ cookies
320
+ });
321
+ expect(redirect).toBe(false);
322
+ });
323
+ it('Will not when the url is at the right channel', () => {
324
+ const cookies = new Cookies();
325
+ const { redirect } = getSelectedAndRecommendedChannel({
326
+ url: selectedChannelSingleDomain.url,
327
+ singleDomainMode: true,
328
+ channels: singleDomainChannels,
329
+ cookies
330
+ });
331
+ expect(redirect).toBe(false);
332
+ });
333
+ it('Will redirect when the url is at the wrong channel', () => {
334
+ const cookies = new Cookies();
335
+ cookies.set('channel', singleDomainChannels[2].name);
336
+ const { redirect, recommendedChannel } = getSelectedAndRecommendedChannel({
337
+ url: selectedChannelSingleDomain.url,
338
+ singleDomainMode: true,
339
+ channels: singleDomainChannels,
340
+ cookies
341
+ });
342
+ expect(redirect).toBe(true);
343
+ expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
344
+ });
345
+ it('Georedirect will respect single domain mode', () => {
346
+ const cookies = new Cookies();
347
+ const { redirect, recommendedChannel } = getSelectedAndRecommendedChannel({
348
+ url: selectedChannelSingleDomain.url,
349
+ singleDomainMode: true,
350
+ channels: singleDomainChannels,
351
+ cookies,
352
+ geoipCountry: 'UK'
353
+ });
354
+ expect(redirect).toBe(true);
355
+ expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
356
+ });
357
+ it('Georedirect will respect single domain mode when there is a domain path', async () => {
358
+ const urlToPreserve = '/accessories/orchid-peach-bag';
359
+ const cookies = new Cookies();
360
+ const { redirect, recommendedChannel, selectedChannel } =
361
+ getSelectedAndRecommendedChannel({
362
+ url: selectedChannelSingleDomain.url + urlToPreserve,
363
+ singleDomainMode: true,
364
+ channels: singleDomainChannels,
365
+ cookies,
366
+ geoipCountry: 'UK'
367
+ });
368
+ expect(redirect).toBe(true);
369
+ expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
370
+ const channelHandler = new ChannelHandler({
371
+ selectedChannel,
372
+ recommendedChannel,
373
+ getPrimaryRoutePath,
374
+ channels
375
+ });
376
+ const redirectUrl = channelHandler.getRedirectUrl({
377
+ client,
378
+ url: selectedChannelSingleDomain.url + urlToPreserve,
379
+ newChannel: channelHandler.recommendedChannel,
380
+ preserveRedirect: true
381
+ });
382
+ await expect(redirectUrl).resolves.toBe(
383
+ 'https://flight-m2.jetshop.se/uk/accessories/bags/orchid-peach-bag-uk?culture=sv-SE&channelCountry=UK&channel=UK'
384
+ );
385
+ });
386
+ it('Redirect on single domain mode when the basename shows up in the url', async () => {
387
+ const urlToPreserve = '/accessories/int/orchid-peach-bag';
388
+ const cookies = new Cookies();
389
+ const { redirect, recommendedChannel, selectedChannel } =
390
+ getSelectedAndRecommendedChannel({
391
+ url: channels[0].url + urlToPreserve,
392
+ singleDomainMode: true,
393
+ channels: singleDomainChannels,
394
+ cookies,
395
+ geoipCountry: 'UK'
396
+ });
397
+ expect(redirect).toBe(true);
398
+ const channelHandler = new ChannelHandler({
399
+ selectedChannel,
400
+ recommendedChannel,
401
+ getPrimaryRoutePath,
402
+ channels
403
+ });
404
+ const redirectUrl = channelHandler.getRedirectUrl({
405
+ client,
406
+ url: channels[0].url + urlToPreserve,
407
+ newChannel: channelHandler.recommendedChannel,
408
+ preserveRedirect: false
409
+ });
410
+ await expect(redirectUrl).resolves.toBe(
411
+ `https://flight-m2.jetshop.se/uk${urlToPreserve}?culture=sv-SE&channelCountry=UK&channel=UK`
412
+ );
413
+ });
414
+ it('Redirect on single domain mode when there is a domain path but no basename', async () => {
415
+ const urlToPreserve = '/accessories/orchid-peach-bag';
416
+ const cookies = new Cookies();
417
+ const { redirect, recommendedChannel, selectedChannel } =
418
+ getSelectedAndRecommendedChannel({
419
+ url: channels[0].url + urlToPreserve,
420
+ singleDomainMode: true,
421
+ channels: singleDomainChannels,
422
+ cookies
423
+ });
424
+ expect(redirect).toBe(true);
425
+ expect(recommendedChannel.url).toBe('https://flight.jetshop.se/int');
426
+ const channelHandler = new ChannelHandler({
427
+ selectedChannel,
428
+ recommendedChannel,
429
+ getPrimaryRoutePath,
430
+ channels
431
+ });
432
+ const redirectUrl = channelHandler.getRedirectUrl({
433
+ client,
434
+ url: channels[0].url + urlToPreserve,
435
+ newChannel: channelHandler.recommendedChannel,
436
+ preserveRedirect: true
437
+ });
438
+ await expect(redirectUrl).resolves.toBe(
439
+ `https://flight.jetshop.se/int${urlToPreserve}?culture=en-GB&channelCountry=US&channel=INT`
440
+ );
441
+ });
442
+ it('Will set the appropriate language based on basename', async () => {
443
+ const cookies = new Cookies();
444
+ const { selectedChannel } = getSelectedAndRecommendedChannel({
445
+ url: channels[1].url + '/en',
446
+ channels,
447
+ cookies
448
+ });
449
+ expect(selectedChannel.language.culture).toBe('en-GB');
450
+ });
451
+ it('Will set the appropriate language based on basename in singledomain mode', async () => {
452
+ const cookies = new Cookies();
453
+ const { selectedChannel } = getSelectedAndRecommendedChannel({
454
+ url: singleDomainChannels[1].url + '/en',
455
+ channels: singleDomainChannels,
456
+ cookies,
457
+ singleDomainMode: true
458
+ });
459
+ expect(selectedChannel.language.culture).toBe('en-GB');
460
+ });
461
+ it('Will redirect to a new language basename based on cookies', async () => {
462
+ const cookies = new Cookies();
463
+ cookies.set('culture', 'en-GB');
464
+ const { selectedChannel, recommendedChannel, redirect } =
465
+ getSelectedAndRecommendedChannel({
466
+ url: channels[1].url,
467
+ channels,
468
+ cookies
469
+ });
470
+ expect(redirect).toBe(true);
471
+ expect(recommendedChannel.language.culture).toBe('en-GB');
472
+ const channelHandler = new ChannelHandler({
473
+ selectedChannel,
474
+ recommendedChannel,
475
+ getPrimaryRoutePath,
476
+ channels
477
+ });
478
+ const redirectUrl = channelHandler.getRedirectUrl({
479
+ client,
480
+ url: selectedChannel.url,
481
+ newChannel: recommendedChannel
482
+ });
483
+ expect(redirectUrl).resolves.toBe(
484
+ 'https://flight-m2.jetshop.se/en/?culture=en-GB&channelCountry=SE&channel=SE'
485
+ );
486
+ });
487
+ it('Will redirect to a new language basename based on cookies in single domain mode', async () => {
488
+ const cookies = new Cookies();
489
+ cookies.set('culture', 'en-GB');
490
+ const { selectedChannel, recommendedChannel, redirect } =
491
+ getSelectedAndRecommendedChannel({
492
+ url: singleDomainChannels[1].url,
493
+ channels: singleDomainChannels,
494
+ cookies,
495
+ singleDomainMode: true
496
+ });
497
+ expect(redirect).toBe(true);
498
+ expect(recommendedChannel.language.culture).toBe('en-GB');
499
+ const channelHandler = new ChannelHandler({
500
+ selectedChannel,
501
+ recommendedChannel,
502
+ getPrimaryRoutePath,
503
+ channels
504
+ });
505
+ const redirectUrl = channelHandler.getRedirectUrl({
506
+ client,
507
+ url: selectedChannel.url,
508
+ newChannel: recommendedChannel
509
+ });
510
+ expect(redirectUrl).resolves.toBe(
511
+ 'https://flight-m2.jetshop.se/se/en/?culture=en-GB&channelCountry=SE&channel=SE'
512
+ );
513
+ });
514
+ });