From 48352df71f5919311ccc2ac32957eca53f643b24 Mon Sep 17 00:00:00 2001 From: Matteo Alessani Date: Thu, 10 Oct 2024 11:08:25 +0200 Subject: [PATCH 1/2] fix: avoid infinite loop for expired access token --- utils/getSettings.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/utils/getSettings.ts b/utils/getSettings.ts index a52dd107..46bb33d2 100644 --- a/utils/getSettings.ts +++ b/utils/getSettings.ts @@ -19,6 +19,7 @@ const RETRIES = 2 interface FetchResource { object: T | undefined success: boolean + bailed?: boolean } function isProduction(): boolean { @@ -39,13 +40,18 @@ async function retryCall( } catch (e: unknown) { if (CommerceLayerStatic.isApiError(e) && e.status === 401) { console.log("Not authorized") - bail(e) - return + + return { + object: undefined, + success: false, + bailed: true, + } } if (number === RETRIES + 1) { return { object: undefined, success: false, + bailed: false, } } throw e @@ -187,14 +193,14 @@ export const getSettings = async ({ if (!organizationResource?.success || !organization?.id) { console.log("Invalid: organization") - return invalidateCheckout(true) + return invalidateCheckout(!organizationResource?.bailed) } const order = orderResource?.object if (!orderResource?.success || !order?.id) { console.log("Invalid: order") - return invalidateCheckout(true) + return invalidateCheckout(!orderResource?.bailed) } const lineItemsShoppable = order.line_items?.filter((line_item) => { From 87c33ec3733eea4ae7497a201bc5d0ea6d5fde07 Mon Sep 17 00:00:00 2001 From: Matteo Alessani Date: Thu, 10 Oct 2024 12:18:37 +0200 Subject: [PATCH 2/2] test: add test for expired token --- specs/e2e/entrypoint.spec.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/specs/e2e/entrypoint.spec.ts b/specs/e2e/entrypoint.spec.ts index f6ac1824..c368c6e3 100644 --- a/specs/e2e/entrypoint.spec.ts +++ b/specs/e2e/entrypoint.spec.ts @@ -99,3 +99,21 @@ test("should navigate to checkout with valid token and valid orderId", async ({ }) => { await expect(checkoutPage.page.locator("text=Order Summary")).toBeVisible() }) + +test.describe("override token", () => { + test.use({ + defaultParams: { + token: + "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCIsImtpZCI6ImFiYTRjYzYyOGQxZmNlM2ZiOTNhM2VlNTU4MjZlNDFjZmFmMThkYzJkZmYzYjA3MjIyNzQwMzgwZTkxOTlkNWQifQ.eyJvcmdhbml6YXRpb24iOnsiaWQiOiJXWGxFT0Zyam5yIiwic2x1ZyI6ImFsZXNzYW5pIiwiZW50ZXJwcmlzZSI6dHJ1ZSwicmVnaW9uIjoiZXUtd2VzdC0xIn0sImFwcGxpY2F0aW9uIjp7ImlkIjoiRE5PdllpclJwbiIsImNsaWVudF9pZCI6IlJmc0FIMGpUekZoZ3lyZGtqZ2VmWHB5VFlhYm9jWVRPd0FHbUMzSTFOcGMiLCJraW5kIjoic2FsZXNfY2hhbm5lbCIsInB1YmxpYyI6dHJ1ZX0sIm1hcmtldCI6eyJpZCI6WyJkbFFiUGhOTm9wIl0sInN0b2NrX2xvY2F0aW9uX2lkcyI6WyJabllxWHVxUG5ZIiwiUWt4b2V1WFpHVyJdLCJnZW9jb2Rlcl9pZCI6bnVsbCwiYWxsb3dzX2V4dGVybmFsX3ByaWNlcyI6dHJ1ZX0sIm93bmVyIjp7ImlkIjoieVFCckJobVhtUSIsInR5cGUiOiJDdXN0b21lciJ9LCJzY29wZSI6Im1hcmtldDozNTAiLCJleHAiOjE3Mjg0OTE4MzksInRlc3QiOnRydWUsInJhbmQiOjAuOTg4MDE2OTI0NjI3MzcyMSwiaWF0IjoxNzI4NDc3NDM5LCJpc3MiOiJodHRwczovL2F1dGguY29tbWVyY2VsYXllci5jbyJ9.gbWYd8gKlX5oFLjEukEzCQtkiyfs5RT82xTZedJi3b8ZvAG1MtIXyFiUjF_12rnlsy_oQhb0Yjd_Eu2ioV7ZpWXN7c5r9oaPuFj0wMEgDQbeb1ga-K3hVIessGhGSOueSrWroQVVMrDv7TXihlzVMZAOs-OsIQZYMn3fCGBIffErtRicsRQJLRxHMZqWIX1nhFqewWcKY6paPJ5M5WdB_1GBhWujh7HQk0YsVAlL67OyLAoZCyDxPP577sTYnCTXZZep2MZQ9mxO5NYRqMjJlcZ9E_to7iGgwaypGx52G7y05Grk6z6GJQPOCUtDRibcl6I2FBOsB0Jf1_CsHXaD7Qjj55mBvHeWK1aMNzPqnHy8AC7iZsw03NpTBtKZZAX9bapzsS9oPIFcVC9qAKu81zoC027DvgLTrVH_16fZ3ivu-zFKUNTDw8tNP6e7U9Tqu1qxh5hE0gnkJpeukqKQIOFB_wIEQNOWETpLTo7-ZyTxNvj_s7XDZMnD4BWsDKkKGclkGK7EYr0_4TI48CCM848XK_wfE-hpAkSbi3J_AtxsuaZEX3mE0ub3yH0qusLln7kYcLCEEiYW_u2GIlFddk4evWflwlqRjhkALPDSLrGLPDG4zzZkd1XsT_ALm-08X9QmF1mLIPA5Oc25X7Ok7aei1cQH_wlu33M2JDzOVqQ", + order: "plain", + }, + }) + + test("should navigate to the 404 page with valid order, expired token", async ({ + checkoutPage, + }) => { + await expect( + checkoutPage.page.locator("text=This order is not accessible.") + ).toBeVisible() + }) +})