hotfix(CartService): Preserve metadata on line-item updates
This commit is contained in:
1 parent
6aa26a2860
commit
128351a8f0
5 files changed
+108
-21
No files matched your search
@@ -34,7 +34,8 @@ describe("POST /store/carts/:id/line-items/:line_id", () => {
|
|||||||
expect(LineItemServiceMock.generate).toHaveBeenCalledWith(
|
expect(LineItemServiceMock.generate).toHaveBeenCalledWith(
|
||||||
IdMap.getId("eur-10-us-12"),
|
IdMap.getId("eur-10-us-12"),
|
||||||
IdMap.getId("region-france"),
|
IdMap.getId("region-france"),
|
||||||
3
|
3,
|
||||||
|
{}
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -48,6 +49,51 @@ describe("POST /store/carts/:id/line-items/:line_id", () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe("successfully updates a line item with metadata", () => {
|
||||||
|
let subject
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
const cartId = IdMap.getId("cartLineItemMetadata")
|
||||||
|
const lineId = IdMap.getId("lineWithMetadata")
|
||||||
|
subject = await request(
|
||||||
|
"POST",
|
||||||
|
`/store/carts/${cartId}/line-items/${lineId}`,
|
||||||
|
{
|
||||||
|
payload: {
|
||||||
|
quantity: 3,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
jest.clearAllMocks()
|
||||||
|
})
|
||||||
|
|
||||||
|
it("calls CartService create", () => {
|
||||||
|
expect(CartServiceMock.updateLineItem).toHaveBeenCalledTimes(1)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("calls LineItemService generate", () => {
|
||||||
|
expect(LineItemServiceMock.generate).toHaveBeenCalledTimes(1)
|
||||||
|
expect(LineItemServiceMock.generate).toHaveBeenCalledWith(
|
||||||
|
IdMap.getId("eur-10-us-12"),
|
||||||
|
IdMap.getId("region-france"),
|
||||||
|
3,
|
||||||
|
{ status: "confirmed" }
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns 200", () => {
|
||||||
|
expect(subject.status).toEqual(200)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns the cart", () => {
|
||||||
|
expect(subject.body.cart._id).toEqual(IdMap.getId("cartLineItemMetadata"))
|
||||||
|
expect(subject.body.cart.decorated).toEqual(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
describe("removes line item on quantity 0", () => {
|
describe("removes line item on quantity 0", () => {
|
||||||
let subject
|
let subject
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,8 @@ export default async (req, res) => {
|
|||||||
const lineItem = await lineItemService.generate(
|
const lineItem = await lineItemService.generate(
|
||||||
existing.content.variant._id,
|
existing.content.variant._id,
|
||||||
cart.region_id,
|
cart.region_id,
|
||||||
value.quantity
|
value.quantity,
|
||||||
|
existing.metadata || {}
|
||||||
)
|
)
|
||||||
|
|
||||||
cart = await cartService.updateLineItem(cart._id, line_id, lineItem)
|
cart = await cartService.updateLineItem(cart._id, line_id, lineItem)
|
||||||
|
|||||||
@@ -184,6 +184,33 @@ export const carts = {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
cartWithMetadataLineItem: {
|
||||||
|
_id: IdMap.getId("cartLineItemMetadata"),
|
||||||
|
discounts: [],
|
||||||
|
region_id: IdMap.getId("region-france"),
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
_id: IdMap.getId("lineWithMetadata"),
|
||||||
|
title: "merge line",
|
||||||
|
description: "This is a new line",
|
||||||
|
thumbnail: "test-img-yeah.com/thumb",
|
||||||
|
content: {
|
||||||
|
unit_price: 10,
|
||||||
|
variant: {
|
||||||
|
_id: IdMap.getId("eur-10-us-12"),
|
||||||
|
},
|
||||||
|
product: {
|
||||||
|
_id: IdMap.getId("product"),
|
||||||
|
},
|
||||||
|
quantity: 1,
|
||||||
|
},
|
||||||
|
quantity: 10,
|
||||||
|
metadata: {
|
||||||
|
status: "confirmed",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
export const CartServiceMock = {
|
export const CartServiceMock = {
|
||||||
@@ -199,6 +226,9 @@ export const CartServiceMock = {
|
|||||||
if (cartId === IdMap.getId("fr-cart")) {
|
if (cartId === IdMap.getId("fr-cart")) {
|
||||||
return Promise.resolve(carts.frCart)
|
return Promise.resolve(carts.frCart)
|
||||||
}
|
}
|
||||||
|
if (cartId === IdMap.getId("cartLineItemMetadata")) {
|
||||||
|
return Promise.resolve(carts.cartWithMetadataLineItem)
|
||||||
|
}
|
||||||
if (cartId === IdMap.getId("regionCart")) {
|
if (cartId === IdMap.getId("regionCart")) {
|
||||||
return Promise.resolve(carts.regionCart)
|
return Promise.resolve(carts.regionCart)
|
||||||
}
|
}
|
||||||
@@ -239,6 +269,9 @@ export const CartServiceMock = {
|
|||||||
if (cartId === IdMap.getId("fr-cart")) {
|
if (cartId === IdMap.getId("fr-cart")) {
|
||||||
return Promise.resolve(carts.frCart)
|
return Promise.resolve(carts.frCart)
|
||||||
}
|
}
|
||||||
|
if (cartId === IdMap.getId("cartLineItemMetadata")) {
|
||||||
|
return Promise.resolve(carts.cartWithMetadataLineItem)
|
||||||
|
}
|
||||||
if (cartId === IdMap.getId("regionCart")) {
|
if (cartId === IdMap.getId("regionCart")) {
|
||||||
return Promise.resolve(carts.regionCart)
|
return Promise.resolve(carts.regionCart)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,25 +29,31 @@ export const LineItemServiceMock = {
|
|||||||
|
|
||||||
return false
|
return false
|
||||||
}),
|
}),
|
||||||
generate: jest.fn().mockImplementation((variantId, regionId, quantity) => {
|
generate: jest
|
||||||
if (variantId === IdMap.getId("fail") || regionId === IdMap.getId("fail")) {
|
.fn()
|
||||||
throw new MedusaError(MedusaError.Types.INVALID_DATA, "Doesn't exist")
|
.mockImplementation((variantId, regionId, quantity, metadata = {}) => {
|
||||||
}
|
if (
|
||||||
|
variantId === IdMap.getId("fail") ||
|
||||||
|
regionId === IdMap.getId("fail")
|
||||||
|
) {
|
||||||
|
throw new MedusaError(MedusaError.Types.INVALID_DATA, "Doesn't exist")
|
||||||
|
}
|
||||||
|
|
||||||
return Promise.resolve({
|
return Promise.resolve({
|
||||||
content: {
|
content: {
|
||||||
variant: {
|
variant: {
|
||||||
_id: variantId,
|
_id: variantId,
|
||||||
|
},
|
||||||
|
product: {
|
||||||
|
_id: `p_${variantId}`,
|
||||||
|
},
|
||||||
|
quantity: 1,
|
||||||
|
unit_price: 100,
|
||||||
},
|
},
|
||||||
product: {
|
quantity,
|
||||||
_id: `p_${variantId}`,
|
metadata,
|
||||||
},
|
})
|
||||||
quantity: 1,
|
}),
|
||||||
unit_price: 100,
|
|
||||||
},
|
|
||||||
quantity,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const mock = jest.fn().mockImplementation(() => {
|
const mock = jest.fn().mockImplementation(() => {
|
||||||
|
|||||||
@@ -120,12 +120,13 @@ class LineItemService extends BaseService {
|
|||||||
product,
|
product,
|
||||||
quantity: 1,
|
quantity: 1,
|
||||||
},
|
},
|
||||||
metadata,
|
metadata: {
|
||||||
|
...metadata,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
if (product.is_giftcard) {
|
if (product.is_giftcard) {
|
||||||
line.is_giftcard = true
|
line.is_giftcard = true
|
||||||
line.metadata = metadata
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return line
|
return line
|
||||||
|
|||||||
Reference in new issue
Block a user