From e14a57467ff4a35bd5de68539bda1231ab6e66f6 Mon Sep 17 00:00:00 2001 From: Yu Long Date: Fri, 8 Mar 2024 12:47:44 +0100 Subject: [PATCH 1/2] fix: remove firstName lastName in the billingAddress for non Riverty payments --- .changeset/cool-zebras-whisper.md | 5 +++++ packages/lib/src/components/BaseElement.test.ts | 16 ++++++++++++++++ packages/lib/src/components/BaseElement.ts | 8 ++++++++ 3 files changed, 29 insertions(+) create mode 100644 .changeset/cool-zebras-whisper.md diff --git a/.changeset/cool-zebras-whisper.md b/.changeset/cool-zebras-whisper.md new file mode 100644 index 0000000000..ad0eae238d --- /dev/null +++ b/.changeset/cool-zebras-whisper.md @@ -0,0 +1,5 @@ +--- +"@adyen/adyen-web": patch +--- + +Sanitize `billingAddress` when making a `/payments` call. Remove `firstName` and `lastName` in the `billingAddress` for non Riverty payments. diff --git a/packages/lib/src/components/BaseElement.test.ts b/packages/lib/src/components/BaseElement.test.ts index c846f43389..6280b698c1 100644 --- a/packages/lib/src/components/BaseElement.test.ts +++ b/packages/lib/src/components/BaseElement.test.ts @@ -34,6 +34,22 @@ describe('BaseElement', () => { expect(baseElement.data).toEqual({ clientStateDataIndicator: true }); expect(spy).toHaveBeenCalled(); }); + + test('return correct billingAddress data', () => { + const Element = class extends BaseElement<{}> { + constructor(props) { + super(props); + } + protected formatData(): any { + return { billingAddress: { firstName: 'bla' } }; + } + }; + let element; + element = new Element({ type: 'riverty' }); + expect(element.data).toEqual({ clientStateDataIndicator: true, billingAddress: { firstName: 'bla' } }); + element = new Element({ type: 'card' }); + expect(element.data).toEqual({ clientStateDataIndicator: true, billingAddress: {} }); + }); }); describe('render', () => { diff --git a/packages/lib/src/components/BaseElement.ts b/packages/lib/src/components/BaseElement.ts index b820f2d42d..7d888f6dea 100644 --- a/packages/lib/src/components/BaseElement.ts +++ b/packages/lib/src/components/BaseElement.ts @@ -65,6 +65,14 @@ class BaseElement

{ componentData.paymentMethod.checkoutAttemptId = checkoutAttemptId; } + // Workaround, to be fixed properly + // Remove the firstName & lastName in the billingAddress for non Riverty components + // @ts-ignore type exists + if (this.props.type !== 'riverty' && componentData.billingAddress) { + const { firstName, lastName, ...rest } = componentData.billingAddress; + componentData.billingAddress = { ...rest }; + } + return { ...(clientData && { riskData: { clientData } }), ...(order && { order: { orderData: order.orderData, pspReference: order.pspReference } }), From 6fc77fd2b459ecbeee37aa5109a0c6662e178c44 Mon Sep 17 00:00:00 2001 From: Yu Long Date: Fri, 8 Mar 2024 13:28:41 +0100 Subject: [PATCH 2/2] fix: e2e-playwright test --- .../e2e-playwright/models/dropinModelUtils/getDropinCardComp.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e-playwright/models/dropinModelUtils/getDropinCardComp.ts b/packages/e2e-playwright/models/dropinModelUtils/getDropinCardComp.ts index b436357794..8a666467e0 100644 --- a/packages/e2e-playwright/models/dropinModelUtils/getDropinCardComp.ts +++ b/packages/e2e-playwright/models/dropinModelUtils/getDropinCardComp.ts @@ -2,7 +2,7 @@ import { Dropin } from '../dropin'; import { getImageCount } from '../../tests/utils/image'; export const getCreditCardPM = (dropin: Dropin) => { - const creditCard = dropin.getPaymentMethodItem('Credit Card'); + const creditCard = dropin.getPaymentMethodItem('Cards'); const brandsHolder = creditCard.locator('.adyen-checkout__payment-method__brands');