From 9d8f87b03b62b9145b95aa902f209d49c939bb6a Mon Sep 17 00:00:00 2001 From: Sebastian Rindom Date: Sun, 13 Aug 2023 09:26:32 +0200 Subject: [PATCH] fix(medusa): ignore region_id update w/o value change (#4751) --- .changeset/selfish-pugs-cheer.md | 5 +++ .../api/__tests__/store/cart/cart.js | 37 +++++++++++++++++++ packages/medusa/src/services/cart.ts | 8 ++-- 3 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 .changeset/selfish-pugs-cheer.md diff --git a/.changeset/selfish-pugs-cheer.md b/.changeset/selfish-pugs-cheer.md new file mode 100644 index 0000000000..b8185887ba --- /dev/null +++ b/.changeset/selfish-pugs-cheer.md @@ -0,0 +1,5 @@ +--- +"@medusajs/medusa": patch +--- + +fix: ignore region_id update w/o value change diff --git a/integration-tests/api/__tests__/store/cart/cart.js b/integration-tests/api/__tests__/store/cart/cart.js index 75e90262be..2832bd3833 100644 --- a/integration-tests/api/__tests__/store/cart/cart.js +++ b/integration-tests/api/__tests__/store/cart/cart.js @@ -2690,6 +2690,43 @@ describe("/store/carts", () => { }) }) + describe("ignore region update if value didn't change", () => { + afterEach(async () => { + await doAfterEach() + }) + + it("has no side-effects when updating region with no change", async () => { + const region = await simpleRegionFactory(dbConnection, { + countries: ["us", "ca"], + }) + const product = await simpleProductFactory(dbConnection) + const cart = await simpleCartFactory(dbConnection, { + region: region.id, + line_items: [{ variant_id: product.variants[0].id, quantity: 1 }], + shipping_address: { + country_code: "us", + }, + }) + + const api = useApi() + + const { data: preconditionData } = await api.get( + `/store/carts/${cart.id}` + ) + const { data, status } = await api + .post(`/store/carts/${cart.id}`, { + region_id: region.id, + }) + .catch((err) => { + console.log(err) + throw err + }) + + expect(status).toEqual(200) + expect(data.cart.shipping_address.country_code).toEqual("us") + }) + }) + describe("calculated prices for shipping option", () => { afterEach(async () => { await doAfterEach() diff --git a/packages/medusa/src/services/cart.ts b/packages/medusa/src/services/cart.ts index 0110393e3d..5afa284384 100644 --- a/packages/medusa/src/services/cart.ts +++ b/packages/medusa/src/services/cart.ts @@ -765,9 +765,9 @@ class CartService extends TransactionBaseService { return await this.atomicPhase_( async (transactionManager: EntityManager) => { - let cart = await this.retrieve(cartId, { - select, - relations: ["shipping_methods"] + let cart = await this.retrieve(cartId, { + select, + relations: ["shipping_methods"], }) if (this.featureFlagRouter_.isFeatureEnabled("sales_channels")) { @@ -1112,7 +1112,7 @@ class CartService extends TransactionBaseService { await this.updateUnitPrices_(cart, data.region_id, data.customer_id) } - if (isDefined(data.region_id)) { + if (isDefined(data.region_id) && cart.region_id !== data.region_id) { const shippingAddress = typeof data.shipping_address !== "string" ? data.shipping_address