@magento/venia-ui 9.2.0-beta.1 → 9.3.0-beta.1

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 (167) hide show
  1. package/i18n/en_US.json +17 -3
  2. package/lib/RootComponents/CMS/__tests__/__snapshots__/cms.spec.js.snap +19 -0
  3. package/lib/RootComponents/CMS/__tests__/cms.spec.js +4 -9
  4. package/lib/RootComponents/CMS/cms.js +5 -4
  5. package/lib/RootComponents/CMS/cms.shimmer.js +18 -0
  6. package/lib/RootComponents/Category/__tests__/__snapshots__/categoryContent.shimmer.spec.js.snap +12 -0
  7. package/lib/RootComponents/Category/categoryContent.js +4 -1
  8. package/lib/components/AccountChip/accountChip.js +3 -1
  9. package/lib/components/AccountInformationPage/accountInformationPage.js +3 -1
  10. package/lib/components/AccountInformationPage/editModal.js +9 -2
  11. package/lib/components/AccountMenu/accountMenuItems.js +8 -3
  12. package/lib/components/CartPage/GiftCards/giftCards.js +1 -1
  13. package/lib/components/CartPage/PriceAdjustments/CouponCode/couponCode.js +5 -1
  14. package/lib/components/CartPage/PriceAdjustments/GiftOptions/__tests__/__snapshots__/giftOptions.spec.js.snap +1018 -78
  15. package/lib/components/CartPage/PriceAdjustments/GiftOptions/__tests__/giftOptions.spec.js +221 -35
  16. package/lib/components/CartPage/PriceAdjustments/GiftOptions/giftOptions.js +287 -40
  17. package/lib/components/CartPage/PriceAdjustments/GiftOptions/giftOptions.module.css +56 -1
  18. package/lib/components/CartPage/PriceAdjustments/__tests__/__snapshots__/giftCardSection.ee.spec.js.snap +12 -0
  19. package/lib/components/CartPage/PriceAdjustments/__tests__/__snapshots__/giftOptionsSection.ce.spec.js.snap +3 -0
  20. package/lib/components/CartPage/PriceAdjustments/__tests__/__snapshots__/giftOptionsSection.ee.spec.js.snap +16 -0
  21. package/lib/components/CartPage/PriceAdjustments/__tests__/__snapshots__/priceAdjustments.spec.js.snap +1 -32
  22. package/lib/components/CartPage/PriceAdjustments/__tests__/giftCardSection.ce.spec.js +17 -0
  23. package/lib/components/CartPage/PriceAdjustments/__tests__/giftCardSection.ee.spec.js +36 -0
  24. package/lib/components/CartPage/PriceAdjustments/__tests__/giftOptionsSection.ce.spec.js +17 -0
  25. package/lib/components/CartPage/PriceAdjustments/__tests__/giftOptionsSection.ee.spec.js +54 -0
  26. package/lib/components/CartPage/PriceAdjustments/__tests__/priceAdjustments.spec.js +1 -1
  27. package/lib/components/CartPage/PriceAdjustments/{giftCardSection.js → giftCardSection.ce.js} +0 -0
  28. package/lib/components/CartPage/PriceAdjustments/giftOptionsSection.ce.js +7 -0
  29. package/lib/components/CartPage/PriceAdjustments/giftOptionsSection.ee.js +38 -0
  30. package/lib/components/CartPage/PriceAdjustments/priceAdjustments.js +2 -14
  31. package/lib/components/CartPage/PriceSummary/__tests__/__snapshots__/discountSummary.spec.js.snap +496 -42
  32. package/lib/components/CartPage/PriceSummary/__tests__/__snapshots__/giftCardSummary.ce.spec.js.snap +3 -0
  33. package/lib/components/CartPage/PriceSummary/__tests__/__snapshots__/{giftCardSummary.spec.js.snap → giftCardSummary.ee.spec.js.snap} +4 -4
  34. package/lib/components/CartPage/PriceSummary/__tests__/__snapshots__/giftOptionsSummary.ce.spec.js.snap +3 -0
  35. package/lib/components/CartPage/PriceSummary/__tests__/__snapshots__/giftOptionsSummary.ee.spec.js.snap +63 -0
  36. package/lib/components/CartPage/PriceSummary/__tests__/__snapshots__/priceSummary.spec.js.snap +201 -141
  37. package/lib/components/CartPage/PriceSummary/__tests__/discountSummary.spec.js +41 -1
  38. package/lib/components/CartPage/PriceSummary/__tests__/giftCardSummary.ce.spec.js +17 -0
  39. package/lib/components/CartPage/PriceSummary/__tests__/giftCardSummary.ee.spec.js +84 -0
  40. package/lib/components/CartPage/PriceSummary/__tests__/giftOptionsSummary.ce.spec.js +17 -0
  41. package/lib/components/CartPage/PriceSummary/__tests__/giftOptionsSummary.ee.spec.js +69 -0
  42. package/lib/components/CartPage/PriceSummary/__tests__/priceSummary.spec.js +2 -0
  43. package/lib/components/CartPage/PriceSummary/discountSummary.js +99 -49
  44. package/lib/components/CartPage/PriceSummary/discountSummary.module.css +40 -0
  45. package/lib/components/CartPage/PriceSummary/giftOptionsSummary.ce.js +5 -0
  46. package/lib/components/CartPage/PriceSummary/giftOptionsSummary.ee.js +40 -0
  47. package/lib/components/CartPage/PriceSummary/priceSummary.js +95 -53
  48. package/lib/components/CartPage/PriceSummary/priceSummary.module.css +2 -0
  49. package/lib/components/CartPage/ProductListing/EditModal/__tests__/__snapshots__/productDetail.spec.js.snap +57 -0
  50. package/lib/components/CartPage/ProductListing/EditModal/__tests__/__snapshots__/productForm.spec.js.snap +22 -0
  51. package/lib/components/CartPage/ProductListing/EditModal/__tests__/productDetail.spec.js +42 -3
  52. package/lib/components/CartPage/ProductListing/EditModal/productDetail.js +13 -10
  53. package/lib/components/CartPage/ProductListing/EditModal/productForm.js +7 -2
  54. package/lib/components/CartPage/ProductListing/product.js +1 -0
  55. package/lib/components/CartPage/ProductListing/productListing.js +1 -1
  56. package/lib/components/CartPage/cartPage.js +1 -1
  57. package/lib/components/Checkbox/checkbox.js +6 -1
  58. package/lib/components/Checkbox/checkbox.module.css +1 -0
  59. package/lib/components/CheckoutPage/ItemsReview/__tests__/__snapshots__/item.spec.js.snap +2 -2
  60. package/lib/components/CheckoutPage/ItemsReview/__tests__/__snapshots__/itemsReview.spec.js.snap +33 -0
  61. package/lib/components/CheckoutPage/ItemsReview/__tests__/item.spec.js +2 -2
  62. package/lib/components/CheckoutPage/ItemsReview/itemsReview.js +4 -1
  63. package/lib/components/CheckoutPage/OrderConfirmationPage/__tests__/createAccount.spec.js +4 -0
  64. package/lib/components/CheckoutPage/OrderConfirmationPage/createAccount.js +9 -1
  65. package/lib/components/CheckoutPage/OrderConfirmationPage/orderConfirmationPage.js +12 -3
  66. package/lib/components/CheckoutPage/PaymentInformation/__tests__/__snapshots__/creditCard.spec.js.snap +1 -0
  67. package/lib/components/CheckoutPage/PaymentInformation/__tests__/creditCard.spec.js +2 -1
  68. package/lib/components/CheckoutPage/PaymentInformation/brainTreeDropIn.js +2 -18
  69. package/lib/components/CheckoutPage/PaymentInformation/creditCard.js +13 -3
  70. package/lib/components/CheckoutPage/PriceAdjustments/__tests__/__snapshots__/priceAdjustments.spec.js.snap +1 -6
  71. package/lib/components/CheckoutPage/PriceAdjustments/__tests__/priceAdjustments.spec.js +2 -2
  72. package/lib/components/CheckoutPage/PriceAdjustments/priceAdjustments.js +8 -12
  73. package/lib/components/CheckoutPage/ShippingInformation/AddressForm/customerForm.js +1 -1
  74. package/lib/components/CheckoutPage/ShippingInformation/shippingInformation.js +4 -1
  75. package/lib/components/CheckoutPage/ShippingMethod/shippingMethod.js +5 -2
  76. package/lib/components/CheckoutPage/__tests__/__snapshots__/checkoutPage.spec.js.snap +3 -3
  77. package/lib/components/CheckoutPage/__tests__/checkoutPage.spec.js +5 -0
  78. package/lib/components/CheckoutPage/checkoutPage.js +25 -4
  79. package/lib/components/CheckoutPage/checkoutPage.module.css +8 -1
  80. package/lib/components/CmsDynamicBlock/__tests__/__snapshots__/cmsDynamicBlock.ce.spec.js.snap +3 -0
  81. package/lib/components/CmsDynamicBlock/__tests__/__snapshots__/cmsDynamicBlock.ee.spec.js.snap +61 -0
  82. package/lib/components/CmsDynamicBlock/__tests__/__snapshots__/dynamicBlock.spec.js.snap +7 -0
  83. package/lib/components/CmsDynamicBlock/__tests__/cmsDynamicBlock.ce.spec.js +17 -0
  84. package/lib/components/CmsDynamicBlock/__tests__/cmsDynamicBlock.ee.spec.js +211 -0
  85. package/lib/components/CmsDynamicBlock/__tests__/constants.spec.js +37 -0
  86. package/lib/components/CmsDynamicBlock/__tests__/dynamicBlock.spec.js +33 -0
  87. package/lib/components/CmsDynamicBlock/cmsDynamicBlock.ce.js +5 -0
  88. package/lib/components/CmsDynamicBlock/cmsDynamicBlock.ee.js +73 -0
  89. package/lib/components/CmsDynamicBlock/constants.js +6 -0
  90. package/lib/components/CmsDynamicBlock/dynamicBlock.js +32 -0
  91. package/lib/components/CmsDynamicBlock/index.js +2 -0
  92. package/lib/components/CreateAccount/__tests__/createAccount.spec.js +6 -1
  93. package/lib/components/CreateAccount/createAccount.js +7 -2
  94. package/lib/components/Field/field.module.css +6 -0
  95. package/lib/components/FilterSidebar/filterSidebar.js +4 -1
  96. package/lib/components/Footer/__tests__/__snapshots__/footer.spec.js.snap +8 -2
  97. package/lib/components/Footer/footer.js +16 -9
  98. package/lib/components/Footer/footer.module.css +7 -2
  99. package/lib/components/ForgotPassword/ForgotPasswordForm/__tests__/__snapshots__/forgotPasswordForm.spec.js.snap +109 -1
  100. package/lib/components/ForgotPassword/ForgotPasswordForm/__tests__/forgotPasswordForm.spec.js +22 -3
  101. package/lib/components/ForgotPassword/ForgotPasswordForm/forgotPasswordForm.js +13 -3
  102. package/lib/components/ForgotPassword/ForgotPasswordForm/forgotPasswordForm.module.css +1 -1
  103. package/lib/components/ForgotPassword/__tests__/__snapshots__/forgotPassword.spec.js.snap +5 -6
  104. package/lib/components/ForgotPassword/__tests__/forgotPassword.spec.js +41 -28
  105. package/lib/components/ForgotPassword/forgotPassword.js +10 -3
  106. package/lib/components/ForgotPassword/forgotPassword.module.css +2 -2
  107. package/lib/components/Gallery/__tests__/__snapshots__/gallery.spec.js.snap +22 -0
  108. package/lib/components/Gallery/__tests__/__snapshots__/item.spec.js.snap +17 -0
  109. package/lib/components/Gallery/addToCartButton.js +2 -0
  110. package/lib/components/Gallery/gallery.js +6 -1
  111. package/lib/components/Gallery/item.js +7 -2
  112. package/lib/components/GoogleReCaptcha/googleReCaptcha.js +49 -0
  113. package/lib/components/GoogleReCaptcha/googleReCaptcha.module.css +3 -0
  114. package/lib/components/GoogleReCaptcha/index.js +1 -0
  115. package/lib/components/Header/currencySwitcher.js +2 -1
  116. package/lib/components/Header/header.js +1 -1
  117. package/lib/components/Header/header.module.css +2 -2
  118. package/lib/components/Header/searchTrigger.js +3 -1
  119. package/lib/components/Header/storeSwitcher.js +18 -4
  120. package/lib/components/Header/switcherItem.js +4 -1
  121. package/lib/components/HomePage/homePage.module.css +12 -0
  122. package/lib/components/Image/resourceImage.js +8 -1
  123. package/lib/components/Image/simpleImage.js +8 -1
  124. package/lib/components/Link/link.js +15 -13
  125. package/lib/components/LoadingIndicator/spinner.js +5 -7
  126. package/lib/components/LoadingIndicator/spinner.module.css +4 -17
  127. package/lib/components/MiniCart/ProductList/__tests__/__snapshots__/item.spec.js.snap +44 -0
  128. package/lib/components/MiniCart/ProductList/__tests__/item.spec.js +2 -2
  129. package/lib/components/MiniCart/ProductList/item.js +3 -2
  130. package/lib/components/MiniCart/miniCart.js +6 -3
  131. package/lib/components/MyAccount/ResetPassword/__tests__/__snapshots__/resetPassword.spec.js.snap +274 -254
  132. package/lib/components/MyAccount/ResetPassword/__tests__/resetPassword.spec.js +10 -5
  133. package/lib/components/MyAccount/ResetPassword/resetPassword.js +55 -55
  134. package/lib/components/MyAccount/ResetPassword/resetPassword.module.css +27 -79
  135. package/lib/components/Newsletter/newsletter.js +6 -2
  136. package/lib/components/OrderHistoryPage/OrderDetails/__tests__/__snapshots__/item.spec.js.snap +11 -0
  137. package/lib/components/ProductFullDetail/productFullDetail.js +12 -3
  138. package/lib/components/ProductImageCarousel/__tests__/__snapshots__/carousel.spec.js.snap +61 -0
  139. package/lib/components/ProductImageCarousel/__tests__/__snapshots__/thumbnail.spec.js.snap +26 -0
  140. package/lib/components/ProductOptions/__tests__/options.spec.js +1 -1
  141. package/lib/components/ProductOptions/__tests__/swatch.spec.js +1 -1
  142. package/lib/components/ProductOptions/__tests__/swatchList.spec.js +1 -1
  143. package/lib/components/ProductOptions/__tests__/tile.spec.js +1 -1
  144. package/lib/components/ProductOptions/__tests__/tileList.spec.js +1 -1
  145. package/lib/components/ProductOptions/option.js +4 -1
  146. package/lib/components/ProductSort/productSort.js +22 -14
  147. package/lib/components/Rating/rating.js +1 -1
  148. package/lib/components/SearchBar/__tests__/__snapshots__/suggestedProduct.spec.js.snap +11 -0
  149. package/lib/components/SearchBar/autocomplete.js +4 -2
  150. package/lib/components/SearchBar/suggestedProduct.js +1 -1
  151. package/lib/components/SearchBar/suggestions.js +1 -1
  152. package/lib/components/SignIn/__tests__/signIn.spec.js +11 -20
  153. package/lib/components/SignIn/signIn.js +6 -16
  154. package/lib/components/TextInput/textInput.module.css +0 -4
  155. package/lib/components/Wishlist/WishlistDialog/WishlistLineItem/__tests__/__snapshots__/wishlistLineItem.spec.js.snap +5 -1
  156. package/lib/components/Wishlist/WishlistDialog/WishlistLineItem/wishlistLineItem.js +7 -1
  157. package/lib/components/Wishlist/WishlistDialog/WishlistLineItem/wishlistLineItem.module.css +7 -0
  158. package/lib/components/Wishlist/WishlistDialog/__tests__/__snapshots__/wishlistDialog.spec.js.snap +6 -1
  159. package/lib/components/WishlistPage/__tests__/__snapshots__/wishlist.spec.js.snap +4 -0
  160. package/lib/components/WishlistPage/__tests__/__snapshots__/wishlistItem.spec.js.snap +22 -0
  161. package/lib/components/WishlistPage/__tests__/__snapshots__/wishlistPage.spec.js.snap +9 -3
  162. package/lib/components/WishlistPage/createWishlist.ee.js +3 -1
  163. package/lib/components/WishlistPage/wishlist.js +1 -1
  164. package/lib/components/WishlistPage/wishlist.module.css +3 -0
  165. package/lib/components/WishlistPage/wishlistPage.js +1 -1
  166. package/package.json +5 -4
  167. package/lib/components/CartPage/PriceSummary/__tests__/giftCardSummary.spec.js +0 -84
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { FormattedMessage, useIntl } from 'react-intl';
3
3
  import Price from '@magento/venia-ui/lib/components/Price';
4
+ import configuredVariant from '@magento/peregrine/lib/util/configuredVariant';
4
5
 
5
6
  import { useStyle } from '../../../../classify';
6
7
  import Image from '../../../Image';
@@ -9,18 +10,12 @@ import defaultClasses from './productDetail.module.css';
9
10
  const IMAGE_SIZE = 240;
10
11
 
11
12
  const ProductDetail = props => {
12
- const { item, variantPrice } = props;
13
+ const { item, variantPrice, configurableThumbnailSource } = props;
13
14
  const { formatMessage } = useIntl();
14
15
  const { prices, product } = item;
15
16
  const { price } = prices;
16
17
  const { currency, value: unitPrice } = variantPrice || price;
17
- const {
18
- name,
19
- sku,
20
- small_image: smallImage,
21
- stock_status: stockStatusValue
22
- } = product;
23
- const { url: imageURL } = smallImage;
18
+ const { name, sku, stock_status: stockStatusValue } = product;
24
19
  const stockStatusLabels = new Map([
25
20
  [
26
21
  'IN_STOCK',
@@ -44,7 +39,10 @@ const ProductDetail = props => {
44
39
  defaultMessage: 'Unknown'
45
40
  });
46
41
  const classes = useStyle(defaultClasses, props.classes);
47
-
42
+ const configured_variant = configuredVariant(
43
+ item.configurable_options,
44
+ product
45
+ );
48
46
  return (
49
47
  <div className={classes.root}>
50
48
  <Image
@@ -54,7 +52,12 @@ const ProductDetail = props => {
54
52
  root: classes.imageContainer
55
53
  }}
56
54
  width={IMAGE_SIZE}
57
- resource={imageURL}
55
+ resource={
56
+ configurableThumbnailSource === 'itself' &&
57
+ configured_variant
58
+ ? configured_variant.small_image.url
59
+ : product.small_image.url
60
+ }
58
61
  />
59
62
  <span className={classes.productName}>{name}</span>
60
63
  <div className={classes.stockRow}>
@@ -34,7 +34,8 @@ const ProductForm = props => {
34
34
  isLoading,
35
35
  isSaving,
36
36
  isDialogOpen,
37
- handleClose
37
+ handleClose,
38
+ configurableThumbnailSource
38
39
  } = talonProps;
39
40
 
40
41
  const classes = useStyle(defaultClasses, props.classes);
@@ -90,7 +91,11 @@ const ProductForm = props => {
90
91
  errors={Array.from(errors.values())}
91
92
  scrollOnError={false}
92
93
  />
93
- <ProductDetail item={cartItem} variantPrice={variantPrice} />
94
+ <ProductDetail
95
+ item={cartItem}
96
+ variantPrice={variantPrice}
97
+ configurableThumbnailSource={configurableThumbnailSource}
98
+ />
94
99
  <Options
95
100
  classes={{
96
101
  root: classes.optionRoot
@@ -111,6 +111,7 @@ const Product = props => {
111
111
  }}
112
112
  width={IMAGE_SIZE}
113
113
  resource={image}
114
+ data-cy="Product-image"
114
115
  />
115
116
  </Link>
116
117
  <div className={classes.details}>
@@ -59,7 +59,7 @@ const ProductListing = props => {
59
59
  const productComponents = items.map(product => (
60
60
  <Product
61
61
  item={product}
62
- key={product.id}
62
+ key={product.uid}
63
63
  setActiveEditItem={setActiveEditItem}
64
64
  setIsCartUpdating={setIsCartUpdating}
65
65
  onAddToWishlistSuccess={onAddToWishlistSuccess}
@@ -93,7 +93,7 @@ const CartPage = props => {
93
93
  })}
94
94
  </StoreTitle>
95
95
  <div className={classes.heading_container}>
96
- <h1 className={classes.heading}>
96
+ <h1 data-cy="CartPage-heading" className={classes.heading}>
97
97
  <FormattedMessage
98
98
  id={'cartPage.heading'}
99
99
  defaultMessage={'Cart'}
@@ -38,7 +38,12 @@ const Checkbox = props => {
38
38
 
39
39
  return (
40
40
  <Fragment>
41
- <label aria-label={ariaLabel} className={classes.root} htmlFor={id}>
41
+ <label
42
+ data-cy="Checkbox-label"
43
+ aria-label={ariaLabel}
44
+ className={classes.root}
45
+ htmlFor={id}
46
+ >
42
47
  <InformedCheckbox
43
48
  {...rest}
44
49
  className={classes.input}
@@ -45,6 +45,7 @@
45
45
  }
46
46
 
47
47
  .input:disabled {
48
+ background: rgb(var(--venia-global-color-gray-100));
48
49
  cursor: default;
49
50
  }
50
51
 
@@ -60,9 +60,9 @@ exports[`Snapshot test when configured to use variant image 1`] = `
60
60
  options={
61
61
  Array [
62
62
  Object {
63
- "id": 22,
63
+ "configurable_product_option_uid": 22,
64
+ "configurable_product_option_value_uid": "Y29uZmlndXJhYmxlLzIyLzI=",
64
65
  "option_label": "Color",
65
- "value_id": 2,
66
66
  "value_label": "red",
67
67
  },
68
68
  ]
@@ -21,6 +21,11 @@ exports[`Snapshot test 1`] = `
21
21
  className="undefined undefined"
22
22
  loading="eager"
23
23
  src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc0JyBoZWlnaHQ9JzUnPjxyZWN0IHdpZHRoPSc0JyBoZWlnaHQ9JzUnIHN0eWxlPSdmaWxsOiBub25lJyAvPjwvc3ZnPg=="
24
+ style={
25
+ Object {
26
+ "--width": "100px",
27
+ }
28
+ }
24
29
  width={100}
25
30
  />
26
31
  <img
@@ -40,6 +45,12 @@ https://master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud/media/catalog/produc
40
45
  https://master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud/media/catalog/product/cache/d3ba9f7bcd3b0724e976dc5144b29c7d/v/t/vt12-kh_main_2.jpg?auto=webp&format=pjpg&width=1280&height=1600&fit=cover 1280w,
41
46
  https://master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud/media/catalog/product/cache/d3ba9f7bcd3b0724e976dc5144b29c7d/v/t/vt12-kh_main_2.jpg?auto=webp&format=pjpg&width=1600&height=2000&fit=cover 1600w,
42
47
  https://master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud/media/catalog/product/cache/d3ba9f7bcd3b0724e976dc5144b29c7d/v/t/vt12-kh_main_2.jpg?auto=webp&format=pjpg&width=2560&height=3200&fit=cover 2560w"
48
+ style={
49
+ Object {
50
+ "--height": "125px",
51
+ "--width": "100px",
52
+ }
53
+ }
43
54
  width={100}
44
55
  />
45
56
  </div>
@@ -85,6 +96,11 @@ https://master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud/media/catalog/produc
85
96
  className="undefined undefined"
86
97
  loading="eager"
87
98
  src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc0JyBoZWlnaHQ9JzUnPjxyZWN0IHdpZHRoPSc0JyBoZWlnaHQ9JzUnIHN0eWxlPSdmaWxsOiBub25lJyAvPjwvc3ZnPg=="
99
+ style={
100
+ Object {
101
+ "--width": "100px",
102
+ }
103
+ }
88
104
  width={100}
89
105
  />
90
106
  <img
@@ -104,6 +120,12 @@ https://master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud/media/catalog/produc
104
120
  https://master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud/media/catalog/product/cache/d3ba9f7bcd3b0724e976dc5144b29c7d/v/s/vsw02-pe_main_2.jpg?auto=webp&format=pjpg&width=1280&height=1600&fit=cover 1280w,
105
121
  https://master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud/media/catalog/product/cache/d3ba9f7bcd3b0724e976dc5144b29c7d/v/s/vsw02-pe_main_2.jpg?auto=webp&format=pjpg&width=1600&height=2000&fit=cover 1600w,
106
122
  https://master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud/media/catalog/product/cache/d3ba9f7bcd3b0724e976dc5144b29c7d/v/s/vsw02-pe_main_2.jpg?auto=webp&format=pjpg&width=2560&height=3200&fit=cover 2560w"
123
+ style={
124
+ Object {
125
+ "--height": "125px",
126
+ "--width": "100px",
127
+ }
128
+ }
107
129
  width={100}
108
130
  />
109
131
  </div>
@@ -149,6 +171,11 @@ https://master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud/media/catalog/produc
149
171
  className="undefined undefined"
150
172
  loading="eager"
151
173
  src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc0JyBoZWlnaHQ9JzUnPjxyZWN0IHdpZHRoPSc0JyBoZWlnaHQ9JzUnIHN0eWxlPSdmaWxsOiBub25lJyAvPjwvc3ZnPg=="
174
+ style={
175
+ Object {
176
+ "--width": "100px",
177
+ }
178
+ }
152
179
  width={100}
153
180
  />
154
181
  <img
@@ -168,6 +195,12 @@ https://master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud/media/catalog/produc
168
195
  https://master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud/media/catalog/product/cache/d3ba9f7bcd3b0724e976dc5144b29c7d/v/d/vd01-ll_main_2.jpg?auto=webp&format=pjpg&width=1280&height=1600&fit=cover 1280w,
169
196
  https://master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud/media/catalog/product/cache/d3ba9f7bcd3b0724e976dc5144b29c7d/v/d/vd01-ll_main_2.jpg?auto=webp&format=pjpg&width=1600&height=2000&fit=cover 1600w,
170
197
  https://master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud/media/catalog/product/cache/d3ba9f7bcd3b0724e976dc5144b29c7d/v/d/vd01-ll_main_2.jpg?auto=webp&format=pjpg&width=2560&height=3200&fit=cover 2560w"
198
+ style={
199
+ Object {
200
+ "--height": "125px",
201
+ "--width": "100px",
202
+ }
203
+ }
171
204
  width={100}
172
205
  />
173
206
  </div>
@@ -60,8 +60,8 @@ test('Snapshot test when configured to use variant image', () => {
60
60
  {
61
61
  option_label: 'Color',
62
62
  value_label: 'red',
63
- id: 22,
64
- value_id: 2
63
+ configurable_product_option_uid: 22,
64
+ configurable_product_option_value_uid: 'Y29uZmlndXJhYmxlLzIyLzI='
65
65
  }
66
66
  ];
67
67
  const tree = createTestInstance(
@@ -62,7 +62,10 @@ const ItemsReview = props => {
62
62
  data-cy="ItemsReview-container"
63
63
  >
64
64
  <div className={classes.items_container}>
65
- <div className={classes.total_quantity}>
65
+ <div
66
+ data-cy="ItemsReview-totalQuantity"
67
+ className={classes.total_quantity}
68
+ >
66
69
  <span className={classes.total_quantity_amount}>
67
70
  {totalQuantity}
68
71
  </span>
@@ -35,6 +35,10 @@ const defaultTalonProps = {
35
35
  firstname: 'Avatar',
36
36
  lastname: 'Aang'
37
37
  }
38
+ },
39
+ recaptchaWidgetProps: {
40
+ containerElement: jest.fn(),
41
+ shouldRender: false
38
42
  }
39
43
  };
40
44
  describe('CreateAccount', () => {
@@ -19,6 +19,7 @@ import Field from '../../Field';
19
19
  import FormError from '../../FormError';
20
20
  import TextInput from '../../TextInput';
21
21
  import Password from '../../Password';
22
+ import GoogleReCaptcha from '../../GoogleReCaptcha';
22
23
 
23
24
  import defaultClasses from './createAccount.module.css';
24
25
 
@@ -59,7 +60,13 @@ const CreateAccount = props => {
59
60
  onSubmit
60
61
  });
61
62
 
62
- const { errors, handleSubmit, isDisabled, initialValues } = talonProps;
63
+ const {
64
+ errors,
65
+ handleSubmit,
66
+ isDisabled,
67
+ initialValues,
68
+ recaptchaWidgetProps
69
+ } = talonProps;
63
70
 
64
71
  return (
65
72
  <div className={classes.root}>
@@ -152,6 +159,7 @@ const CreateAccount = props => {
152
159
  })}
153
160
  />
154
161
  </div>
162
+ <GoogleReCaptcha {...recaptchaWidgetProps} />
155
163
  <div className={classes.actions}>
156
164
  <Button
157
165
  disabled={isDisabled}
@@ -91,7 +91,10 @@ const OrderConfirmationPage = props => {
91
91
  values={{ orderNumber }}
92
92
  />
93
93
  </div>
94
- <div className={classes.shippingInfoHeading}>
94
+ <div
95
+ data-cy="OrderConfirmationPage-shippingInfoHeading"
96
+ className={classes.shippingInfoHeading}
97
+ >
95
98
  <FormattedMessage
96
99
  id={'global.shippingInformation'}
97
100
  defaultMessage={'Shipping Information'}
@@ -105,7 +108,10 @@ const OrderConfirmationPage = props => {
105
108
  {additionalAddressString}
106
109
  </span>
107
110
  </div>
108
- <div className={classes.shippingMethodHeading}>
111
+ <div
112
+ data-cy="OrderConfirmationPage-shippingMethodHeading"
113
+ className={classes.shippingMethodHeading}
114
+ >
109
115
  <FormattedMessage
110
116
  id={'global.shippingMethod'}
111
117
  defaultMessage={'Shipping Method'}
@@ -115,7 +121,10 @@ const OrderConfirmationPage = props => {
115
121
  <div className={classes.itemsReview}>
116
122
  <ItemsReview data={data} />
117
123
  </div>
118
- <div className={classes.additionalText}>
124
+ <div
125
+ data-cy="OrderConfirmationPage-additionalText"
126
+ className={classes.additionalText}
127
+ >
119
128
  <FormattedMessage
120
129
  id={'checkoutPage.additionalText'}
121
130
  defaultMessage={
@@ -8,6 +8,7 @@ exports[`Should return correct shape 1`] = `
8
8
  className="credit_card_root"
9
9
  >
10
10
  <FormError
11
+ allowErrorMessages={true}
11
12
  classes={
12
13
  Object {
13
14
  "root": "formErrorContainer",
@@ -83,7 +83,8 @@ const useCreditCardReturnValue = {
83
83
  phoneNumber: 'sample phone number',
84
84
  isBillingAddressSame: false
85
85
  },
86
- shippingAddressCountry: 'US'
86
+ shippingAddressCountry: 'US',
87
+ recaptchaWidgetProps: {}
87
88
  };
88
89
 
89
90
  test('Should return correct shape', () => {
@@ -129,8 +129,6 @@ const BraintreeDropin = props => {
129
129
  * The parent component does this by setting `shouldTeardownDropin` `true`.
130
130
  */
131
131
  useEffect(() => {
132
- let unmounted = false;
133
-
134
132
  const teardownAndRenderDropin = async () => {
135
133
  try {
136
134
  dropinInstance.teardown();
@@ -138,32 +136,18 @@ const BraintreeDropin = props => {
138
136
 
139
137
  const instance = await createDropinInstance();
140
138
 
141
- if (!unmounted) {
142
- setDropinInstance(instance);
143
- onReady(true);
144
- } else {
145
- /**
146
- * Component has been unmounted, tear down the instance.
147
- */
148
- instance.teardown();
149
- }
139
+ setDropinInstance(instance);
140
+ onReady(true);
150
141
  } catch (err) {
151
142
  console.error(
152
143
  `Unable to tear down and re-initialize Credit Card form (Braintree). \n${err}`
153
144
  );
154
- if (!unmounted) {
155
- setIsError(true);
156
- }
157
145
  }
158
146
  };
159
147
 
160
148
  if (shouldTeardownDropin) {
161
149
  teardownAndRenderDropin();
162
150
  }
163
-
164
- return () => {
165
- unmounted = true;
166
- };
167
151
  }, [
168
152
  shouldTeardownDropin,
169
153
  dropinInstance,
@@ -16,6 +16,7 @@ import { useStyle } from '../../../classify';
16
16
 
17
17
  import defaultClasses from './creditCard.module.css';
18
18
  import FormError from '../../FormError';
19
+ import GoogleReCaptcha from '../../GoogleReCaptcha';
19
20
 
20
21
  const STEP_DESCRIPTIONS = [
21
22
  { defaultMessage: 'Loading Payment', id: 'checkoutPage.step0' },
@@ -83,7 +84,8 @@ const CreditCard = props => {
83
84
  initialValues,
84
85
  shippingAddressCountry,
85
86
  shouldTeardownDropin,
86
- resetShouldTeardownDropin
87
+ resetShouldTeardownDropin,
88
+ recaptchaWidgetProps
87
89
  } = talonProps;
88
90
 
89
91
  const creditCardComponentClassName = isLoading
@@ -154,6 +156,7 @@ const CreditCard = props => {
154
156
  <div className={classes.root} data-cy="CreditCard-root">
155
157
  <div className={creditCardComponentClassName}>
156
158
  <FormError
159
+ allowErrorMessages
157
160
  classes={{ root: classes.formErrorContainer }}
158
161
  errors={Array.from(errors.values())}
159
162
  />
@@ -167,7 +170,10 @@ const CreditCard = props => {
167
170
  resetShouldTeardownDropin={resetShouldTeardownDropin}
168
171
  />
169
172
  </div>
170
- <div className={classes.address_check}>
173
+ <div
174
+ data-cy="CreditCard-AddressCheck-root"
175
+ className={classes.address_check}
176
+ >
171
177
  <Checkbox
172
178
  data-cy="PaymentInformation-billingAddressSame"
173
179
  field="isBillingAddressSame"
@@ -179,7 +185,10 @@ const CreditCard = props => {
179
185
  initialValue={initialValues.isBillingAddressSame}
180
186
  />
181
187
  </div>
182
- <div className={billingAddressFieldsClassName}>
188
+ <div
189
+ data-cy="CreditCard-billingAddressFields"
190
+ className={billingAddressFieldsClassName}
191
+ >
183
192
  <Field
184
193
  id="firstName"
185
194
  classes={fieldClasses.first_name}
@@ -304,6 +313,7 @@ const CreditCard = props => {
304
313
  />
305
314
  </Field>
306
315
  </div>
316
+ <GoogleReCaptcha {...recaptchaWidgetProps} />
307
317
  </div>
308
318
  {loadingIndicator}
309
319
  </div>
@@ -18,12 +18,7 @@ exports[`renders price adjustments 1`] = `
18
18
  <GiftCardSection
19
19
  setIsCartUpdating={[MockFunction setPageIsUpdating]}
20
20
  />
21
- <mock-Section
22
- id="gift_options"
23
- title="See Gift Options"
24
- >
25
- <GiftOptions />
26
- </mock-Section>
21
+ <GiftOptionsSection />
27
22
  </mock-Accordion>
28
23
  </div>
29
24
  `;
@@ -14,8 +14,8 @@ jest.mock(
14
14
  () => 'GiftCardSection'
15
15
  );
16
16
  jest.mock(
17
- '../../../CartPage/PriceAdjustments/GiftOptions',
18
- () => 'GiftOptions'
17
+ '../../../CartPage/PriceAdjustments/giftOptionsSection',
18
+ () => 'GiftOptionsSection'
19
19
  );
20
20
 
21
21
  test('renders price adjustments', () => {
@@ -1,12 +1,13 @@
1
- import React from 'react';
1
+ import React, { Suspense } from 'react';
2
2
  import { useIntl } from 'react-intl';
3
3
  import { func } from 'prop-types';
4
4
 
5
5
  import { useStyle } from '../../../classify';
6
+ import LoadingIndicator from '../../LoadingIndicator';
6
7
  import { Accordion, Section } from '../../Accordion';
7
8
  import CouponCode from '../../CartPage/PriceAdjustments/CouponCode';
8
9
  import GiftCardSection from '../../CartPage/PriceAdjustments/giftCardSection';
9
- import GiftOptions from '../../CartPage/PriceAdjustments/GiftOptions';
10
+ import GiftOptionsSection from '../../CartPage/PriceAdjustments/giftOptionsSection';
10
11
 
11
12
  import defaultClasses from './priceAdjustments.module.css';
12
13
 
@@ -25,24 +26,19 @@ const PriceAdjustments = props => {
25
26
  <div className={classes.root}>
26
27
  <Accordion canOpenMultiple={true}>
27
28
  <Section
29
+ data-cy="PriceAdjustments-couponCodeSection"
28
30
  id={'coupon_code'}
29
31
  title={formatMessage({
30
32
  id: 'checkoutPage.couponCode',
31
33
  defaultMessage: 'Enter Coupon Code'
32
34
  })}
33
35
  >
34
- <CouponCode setIsCartUpdating={setPageIsUpdating} />
36
+ <Suspense fallback={<LoadingIndicator />}>
37
+ <CouponCode setIsCartUpdating={setPageIsUpdating} />
38
+ </Suspense>
35
39
  </Section>
36
40
  <GiftCardSection setIsCartUpdating={setPageIsUpdating} />
37
- <Section
38
- id={'gift_options'}
39
- title={formatMessage({
40
- id: 'checkoutPage.giftOptions',
41
- defaultMessage: 'See Gift Options'
42
- })}
43
- >
44
- <GiftOptions />
45
- </Section>
41
+ <GiftOptionsSection />
46
42
  </Accordion>
47
43
  </div>
48
44
  );
@@ -76,7 +76,7 @@ const CustomerForm = props => {
76
76
  ) : null;
77
77
 
78
78
  const formMessageRow = !hasDefaultShipping ? (
79
- <div className={classes.formMessage}>
79
+ <div data-cy="CustomerForm-formMessage" className={classes.formMessage}>
80
80
  <Message>
81
81
  <FormattedMessage
82
82
  id={'customerForm.formMessage'}
@@ -93,7 +93,10 @@ const ShippingInformation = props => {
93
93
  </Fragment>
94
94
  ) : (
95
95
  <Fragment>
96
- <h3 className={classes.editTitle}>
96
+ <h3
97
+ data-cy="ShippingInformation-editTitle"
98
+ className={classes.editTitle}
99
+ >
97
100
  <FormattedMessage
98
101
  id={'shippingInformation.editTitle'}
99
102
  defaultMessage={'1. Shipping Information'}
@@ -118,8 +118,11 @@ const ShippingMethod = props => {
118
118
  }
119
119
 
120
120
  contents = (
121
- <div className={classes.root}>
122
- <h3 className={classes.editingHeading}>
121
+ <div data-cy="ShippingMethod-root" className={classes.root}>
122
+ <h3
123
+ data-cy="ShippingMethod-heading"
124
+ className={classes.editingHeading}
125
+ >
123
126
  <FormattedMessage
124
127
  id={'shippingMethod.heading'}
125
128
  defaultMessage={'Shipping Method'}
@@ -253,7 +253,7 @@ exports[`CheckoutPage renders an error and disables review order button if there
253
253
  </span>
254
254
  </button>
255
255
  <div
256
- className="summaryContainer"
256
+ className="summaryContainer signInContainerVisible"
257
257
  >
258
258
  <OrderSummary
259
259
  isUpdating={true}
@@ -596,7 +596,7 @@ exports[`CheckoutPage renders checkout content for guest on desktop 1`] = `
596
596
  </h3>
597
597
  </div>
598
598
  <div
599
- className="summaryContainer"
599
+ className="summaryContainer signInContainerVisible"
600
600
  >
601
601
  <OrderSummary
602
602
  isUpdating={false}
@@ -739,7 +739,7 @@ exports[`CheckoutPage renders checkout content for guest on mobile 1`] = `
739
739
  </h3>
740
740
  </div>
741
741
  <div
742
- className="summaryContainer"
742
+ className="summaryContainer signInContainerVisible"
743
743
  >
744
744
  <OrderSummary
745
745
  isUpdating={false}
@@ -77,6 +77,7 @@ const defaultTalonProps = {
77
77
  orderDetailsLoading: false,
78
78
  orderNumber: null,
79
79
  placeOrderLoading: false,
80
+ placeOrderButtonClicked: false,
80
81
  setGuestSignInUsername: jest.fn().mockName('setGuestSignInUsername'),
81
82
  setIsUpdating: jest.fn().mockName('setIsUpdating'),
82
83
  setShippingInformationDone: jest
@@ -84,6 +85,10 @@ const defaultTalonProps = {
84
85
  .mockName('setShippingInformationDone'),
85
86
  setShippingMethodDone: jest.fn().mockName('setShippingMethodDone'),
86
87
  setPaymentInformationDone: jest.fn().mockName('setPaymentInformationDone'),
88
+ recaptchaWidgetProps: {
89
+ containerElement: [Function],
90
+ shouldRender: false
91
+ },
87
92
  toggleAddressBookContent: jest.fn().mockName('toggleAddressBookContent'),
88
93
  toggleSignInContent: jest.fn().mockName('toggleSignInContent')
89
94
  };