From 17e7f1f24d9ca071820b82d46fc24605f2d5898f Mon Sep 17 00:00:00 2001 From: Krishprajapati15 Date: Tue, 1 Jul 2025 13:37:58 +0530 Subject: [PATCH] fix: strengthen error handling and test coverage for Connect component --- src/connect/component.jsx | 27 ++++++++++++++++++++++++--- src/connect/component.test.js | 9 ++++++++- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/connect/component.jsx b/src/connect/component.jsx index c61bfe04b..ae2404591 100644 --- a/src/connect/component.jsx +++ b/src/connect/component.jsx @@ -112,7 +112,28 @@ export const getConnectComponent = async (merchantProps = {}) => { }) .flush(); - throw new Error(error); + throw error; + } + + // Added check for window.braintree and window.braintree.connect + if (!window.braintree || !window.braintree.connect) { + getLogger() + .track({ + [FPTI_KEY.CONTEXT_TYPE]: "CMID", + [FPTI_KEY.CONTEXT_ID]: cmid, + [FPTI_KEY.EVENT_NAME]: `ppcp_connect_failure`, + }) + .error("braintree_sdk_missing_error", { err: "Braintree SDK is not loaded or connect is unavailable." }) + .metricCounter({ + namespace: "connect.init.count", + event: "error", + dimensions: { + errorName: "braintree_sdk_missing_error", + }, + }) + .flush(); + + throw new Error("Braintree SDK is not loaded or connect is unavailable."); } try { @@ -158,6 +179,6 @@ export const getConnectComponent = async (merchantProps = {}) => { }) .flush(); - throw new Error(error); + throw error; } -}; +}; \ No newline at end of file diff --git a/src/connect/component.test.js b/src/connect/component.test.js index 3ebed1dec..87f577b0f 100644 --- a/src/connect/component.test.js +++ b/src/connect/component.test.js @@ -122,6 +122,13 @@ describe("getConnectComponent: returns ConnectComponent", () => { platform: "PPCP", }); }); + + test("throws error if braintree or connect is missing", async () => { + window.braintree = undefined; + await expect(() => getConnectComponent(mockProps)).rejects.toThrow( + "Braintree SDK is not loaded or connect is unavailable." + ); + }); }); describe("getSdkVersion", () => { @@ -150,4 +157,4 @@ describe("getSdkVersion", () => { expect(() => getSdkVersion("2.87.1-alpha-test")).toThrowError(); expect(() => getSdkVersion("3.34.2-beta-test")).toThrowError(); }); -}); +}); \ No newline at end of file