hotfix(CartService): Preserve metadata on line-item updates

This commit is contained in:
Oliver Windall Juhl
2020-10-14 08:28:56 +02:00
committed by GitHub
parent 6aa26a2860
commit 128351a8f0
5 changed files with 108 additions and 21 deletions
@@ -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)