Skip to content

Commit ab666dc

Browse files
authored
Merge pull request #3402 from Shopify/kd-2025-10-remove-redundant-reduplication
chore(cart): remove redundant gift card code deduplication
2 parents 9d7d46b + cb68e36 commit ab666dc

File tree

2 files changed

+38
-6
lines changed

2 files changed

+38
-6
lines changed

packages/hydrogen/src/cart/queries/cartGiftCardCodeUpdateDefault.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,29 @@ export type CartGiftCardCodesUpdateFunction = (
1616
optionalParams?: CartOptionalInput,
1717
) => Promise<CartQueryDataReturn>;
1818

19+
/**
20+
* Updates (replaces) gift card codes in the cart.
21+
*
22+
* To add codes without replacing, use `cartGiftCardCodesAdd` (API 2025-10+).
23+
*
24+
* @param {CartQueryOptions} options - Cart query options including storefront client and cart fragment.
25+
* @returns {CartGiftCardCodesUpdateFunction} - Function accepting gift card codes array and optional parameters.
26+
*
27+
* @example Replace all gift card codes
28+
* const updateGiftCardCodes = cartGiftCardCodesUpdateDefault({ storefront, getCartId });
29+
* await updateGiftCardCodes(['SUMMER2025', 'WELCOME10']);
30+
*/
1931
export function cartGiftCardCodesUpdateDefault(
2032
options: CartQueryOptions,
2133
): CartGiftCardCodesUpdateFunction {
2234
return async (giftCardCodes, optionalParams) => {
23-
// Ensure the gift card codes are unique
24-
const uniqueCodes = giftCardCodes.filter((value, index, array) => {
25-
return array.indexOf(value) === index;
26-
});
27-
2835
const {cartGiftCardCodesUpdate, errors} = await options.storefront.mutate<{
2936
cartGiftCardCodesUpdate: CartQueryData;
3037
errors: StorefrontApiErrors;
3138
}>(CART_GIFT_CARD_CODE_UPDATE_MUTATION(options.cartFragment), {
3239
variables: {
3340
cartId: options.getCartId(),
34-
giftCardCodes: uniqueCodes,
41+
giftCardCodes,
3542
...optionalParams,
3643
},
3744
});

packages/hydrogen/src/cart/queries/cartGiftCardCodesUpdateDefault.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,29 @@ describe('cartGiftCardCodesUpdateDefault', () => {
2727
expect(result.cart).toHaveProperty('id', CART_ID);
2828
expect(result.userErrors?.[0]).toContain(cartFragment);
2929
});
30+
31+
describe('no duplicate filtering (API 2025-10+)', () => {
32+
it('should pass duplicate codes directly to API without filtering', async () => {
33+
const updateGiftCardCodes = cartGiftCardCodesUpdateDefault({
34+
storefront: mockCreateStorefrontClient(),
35+
getCartId: () => CART_ID,
36+
});
37+
38+
const codesWithDuplicates = ['GIFT123', 'GIFT123', 'WELCOME10'];
39+
const result = await updateGiftCardCodes(codesWithDuplicates);
40+
41+
expect(result.cart).toHaveProperty('id', CART_ID);
42+
});
43+
44+
it('should delegate duplicate handling to API (case-insensitive normalization)', async () => {
45+
const updateGiftCardCodes = cartGiftCardCodesUpdateDefault({
46+
storefront: mockCreateStorefrontClient(),
47+
getCartId: () => CART_ID,
48+
});
49+
50+
const result = await updateGiftCardCodes(['gift123', 'GIFT123']);
51+
52+
expect(result.cart).toHaveProperty('id', CART_ID);
53+
});
54+
});
3055
});

0 commit comments

Comments
 (0)