Merge pull request #1475 from medusajs/fix-cartServiceCreateLostShippingAddress

This commit is contained in:
Adrien de Peretti
2022-05-11 22:02:24 +02:00
committed by GitHub
5 changed files with 42 additions and 48 deletions

View File

@@ -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<String>,
},
@@ -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<String>,
},

View File

@@ -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),

View File

@@ -2389,9 +2389,9 @@ Object {
"created_at": Any<Date>,
"customer_id": null,
"deleted_at": null,
"first_name": null,
"first_name": "Chyna",
"id": Any<String>,
"last_name": null,
"last_name": "Osinski",
"metadata": null,
"phone": "12353245",
"postal_code": "1234",

View File

@@ -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: {

View File

@@ -362,41 +362,32 @@ class CartService extends TransactionBaseService<CartService> {
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)[] = [