hotfix(CartService): Preserve metadata on line-item updates
This commit is contained in:
committed by
GitHub
parent
6aa26a2860
commit
128351a8f0
@@ -34,7 +34,8 @@ describe("POST /store/carts/:id/line-items/:line_id", () => {
|
||||
expect(LineItemServiceMock.generate).toHaveBeenCalledWith(
|
||||
IdMap.getId("eur-10-us-12"),
|
||||
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", () => {
|
||||
let subject
|
||||
|
||||
|
||||
@@ -34,7 +34,8 @@ export default async (req, res) => {
|
||||
const lineItem = await lineItemService.generate(
|
||||
existing.content.variant._id,
|
||||
cart.region_id,
|
||||
value.quantity
|
||||
value.quantity,
|
||||
existing.metadata || {}
|
||||
)
|
||||
|
||||
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 = {
|
||||
@@ -199,6 +226,9 @@ export const CartServiceMock = {
|
||||
if (cartId === IdMap.getId("fr-cart")) {
|
||||
return Promise.resolve(carts.frCart)
|
||||
}
|
||||
if (cartId === IdMap.getId("cartLineItemMetadata")) {
|
||||
return Promise.resolve(carts.cartWithMetadataLineItem)
|
||||
}
|
||||
if (cartId === IdMap.getId("regionCart")) {
|
||||
return Promise.resolve(carts.regionCart)
|
||||
}
|
||||
@@ -239,6 +269,9 @@ export const CartServiceMock = {
|
||||
if (cartId === IdMap.getId("fr-cart")) {
|
||||
return Promise.resolve(carts.frCart)
|
||||
}
|
||||
if (cartId === IdMap.getId("cartLineItemMetadata")) {
|
||||
return Promise.resolve(carts.cartWithMetadataLineItem)
|
||||
}
|
||||
if (cartId === IdMap.getId("regionCart")) {
|
||||
return Promise.resolve(carts.regionCart)
|
||||
}
|
||||
|
||||
@@ -29,25 +29,31 @@ export const LineItemServiceMock = {
|
||||
|
||||
return false
|
||||
}),
|
||||
generate: jest.fn().mockImplementation((variantId, regionId, quantity) => {
|
||||
if (variantId === IdMap.getId("fail") || regionId === IdMap.getId("fail")) {
|
||||
throw new MedusaError(MedusaError.Types.INVALID_DATA, "Doesn't exist")
|
||||
}
|
||||
generate: jest
|
||||
.fn()
|
||||
.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({
|
||||
content: {
|
||||
variant: {
|
||||
_id: variantId,
|
||||
return Promise.resolve({
|
||||
content: {
|
||||
variant: {
|
||||
_id: variantId,
|
||||
},
|
||||
product: {
|
||||
_id: `p_${variantId}`,
|
||||
},
|
||||
quantity: 1,
|
||||
unit_price: 100,
|
||||
},
|
||||
product: {
|
||||
_id: `p_${variantId}`,
|
||||
},
|
||||
quantity: 1,
|
||||
unit_price: 100,
|
||||
},
|
||||
quantity,
|
||||
})
|
||||
}),
|
||||
quantity,
|
||||
metadata,
|
||||
})
|
||||
}),
|
||||
}
|
||||
|
||||
const mock = jest.fn().mockImplementation(() => {
|
||||
|
||||
@@ -120,12 +120,13 @@ class LineItemService extends BaseService {
|
||||
product,
|
||||
quantity: 1,
|
||||
},
|
||||
metadata,
|
||||
metadata: {
|
||||
...metadata,
|
||||
},
|
||||
}
|
||||
|
||||
if (product.is_giftcard) {
|
||||
line.is_giftcard = true
|
||||
line.metadata = metadata
|
||||
}
|
||||
|
||||
return line
|
||||
|
||||
Reference in New Issue
Block a user