diff --git a/integration-tests/api/__tests__/store/__snapshots__/swaps.js.snap b/integration-tests/api/__tests__/store/__snapshots__/swaps.js.snap index 5605ac2735..654c95ac5e 100644 --- a/integration-tests/api/__tests__/store/__snapshots__/swaps.js.snap +++ b/integration-tests/api/__tests__/store/__snapshots__/swaps.js.snap @@ -98,7 +98,7 @@ Object { "payment_authorized_at": null, "payment_id": null, "region_id": "test-region", - "shipping_address_id": StringMatching /\\^addr_\\*/, + "shipping_address_id": "test-shipping-address", "type": "swap", "updated_at": Any, }, @@ -274,7 +274,7 @@ Object { "payment_authorized_at": null, "payment_id": null, "region_id": "test-region", - "shipping_address_id": StringMatching /\\^addr_\\*/, + "shipping_address_id": "test-shipping-address", "type": "swap", "updated_at": Any, }, diff --git a/integration-tests/api/__tests__/store/swaps.js b/integration-tests/api/__tests__/store/swaps.js index 243d5e1e96..1065aef2c6 100644 --- a/integration-tests/api/__tests__/store/swaps.js +++ b/integration-tests/api/__tests__/store/swaps.js @@ -1,18 +1,7 @@ const path = require("path") const { - Region, - Order, - Customer, ShippingProfile, - Product, - ProductVariant, - MoneyAmount, - LineItem, - Payment, - Cart, - ShippingMethod, ShippingOption, - Swap, } = require("@medusajs/medusa") const setupServer = require("../../../helpers/setup-server") @@ -137,7 +126,7 @@ describe("/store/carts", () => { type: "swap", created_at: expect.any(String), updated_at: expect.any(String), - shipping_address_id: expect.stringMatching(/^addr_*/), + shipping_address_id: "test-shipping-address", metadata: { swap_id: expect.stringMatching(/^swap_*/), }, @@ -221,7 +210,7 @@ describe("/store/carts", () => { cart: { id: expect.stringMatching(/^cart_*/), billing_address_id: "test-billing-address", - shipping_address_id: expect.stringMatching(/^addr_*/), + shipping_address_id: "test-shipping-address", type: "swap", created_at: expect.any(String), updated_at: expect.any(String), diff --git a/integration-tests/plugins/__tests__/medusa-plugin-sendgrid/__snapshots__/index.js.snap b/integration-tests/plugins/__tests__/medusa-plugin-sendgrid/__snapshots__/index.js.snap index b414a3f7a1..e80d777ab5 100644 --- a/integration-tests/plugins/__tests__/medusa-plugin-sendgrid/__snapshots__/index.js.snap +++ b/integration-tests/plugins/__tests__/medusa-plugin-sendgrid/__snapshots__/index.js.snap @@ -2389,9 +2389,9 @@ Object { "created_at": Any, "customer_id": null, "deleted_at": null, - "first_name": null, + "first_name": "Chyna", "id": Any, - "last_name": null, + "last_name": "Osinski", "metadata": null, "phone": "12353245", "postal_code": "1234", diff --git a/packages/medusa/src/services/__tests__/cart.js b/packages/medusa/src/services/__tests__/cart.js index 571b7c26a7..0fefc85592 100644 --- a/packages/medusa/src/services/__tests__/cart.js +++ b/packages/medusa/src/services/__tests__/cart.js @@ -204,7 +204,21 @@ describe("CartService", () => { }, } - const addressRepository = MockRepository({ create: (c) => c }) + const addressRepository = MockRepository({ + create: (c) => c, + findOne: (id) => { + return { + id, + first_name: "LeBron", + last_name: "James", + address_1: "Dunk St", + city: "Dunkville", + province: "CA", + postal_code: "12345", + country_code: "us", + } + } + }) const cartRepository = MockRepository() const customerService = { retrieveByEmail: jest.fn().mockReturnValue( @@ -262,7 +276,7 @@ describe("CartService", () => { expect(cartRepository.save).toHaveBeenCalledTimes(1) }) - it("creates a cart with a prefilled shipping address", async () => { + it("should throw shipping country not in region", async () => { const res = cartService.create({ region_id: IdMap.getId("testRegion"), shipping_address: { @@ -279,7 +293,7 @@ describe("CartService", () => { await expect(res).rejects.toThrow("Shipping country not in region") }) - it("creates a cart with a prefilled shipping address", async () => { + it("a cart with a prefilled shipping address", async () => { await cartService.create({ region_id: IdMap.getId("testRegion"), shipping_address: { diff --git a/packages/medusa/src/services/cart.ts b/packages/medusa/src/services/cart.ts index 69973d4371..7df4de88c6 100644 --- a/packages/medusa/src/services/cart.ts +++ b/packages/medusa/src/services/cart.ts @@ -362,41 +362,32 @@ class CartService extends TransactionBaseService { rawCart.region_id = region.id - if (data.shipping_address_id !== undefined) { - const shippingAddress = data.shipping_address_id - ? await addressRepo.findOne(data.shipping_address_id) - : null - - if ( - shippingAddress && - !regCountries.includes(shippingAddress.country_code) - ) { - throw new MedusaError( - MedusaError.Types.NOT_ALLOWED, - "Shipping country not in region" - ) - } - - rawCart.shipping_address = shippingAddress - } - - if (!data.shipping_address) { + if (!data.shipping_address && !data.shipping_address_id) { if (region.countries.length === 1) { - // Preselect the country if the region only has 1 - // and create address entity rawCart.shipping_address = addressRepo.create({ country_code: regCountries[0], }) } } else { - if (!regCountries.includes(data.shipping_address.country_code)) { - throw new MedusaError( - MedusaError.Types.NOT_ALLOWED, - "Shipping country not in region" - ) + if (data.shipping_address) { + if (!regCountries.includes(data.shipping_address.country_code)) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Shipping country not in region" + ) + } + rawCart.shipping_address = data.shipping_address + } + if (data.shipping_address_id) { + const addr = await addressRepo.findOne(data.shipping_address_id) + if (addr && !regCountries.includes(addr.country_code)) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Shipping country not in region" + ) + } + rawCart.shipping_address_id = data.shipping_address_id } - - rawCart.shipping_address = data.shipping_address } const remainingFields: (keyof Cart)[] = [