feat(medusa): Add metadata to StorePostCartsCartLineItemsItemReq (#4230)
This commit is contained in:
1 parent
bfc0ea5695
commit
2f283996f8
6 files changed
+165
-3
No files matched your search
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
"@medusajs/medusa": patch
|
||||||
|
"@medusajs/client-types": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
feat(medusa): Add `metadata` to `StorePostCartsCartLineItemsItemReq`
|
||||||
@@ -769,6 +769,9 @@ describe("/store/carts", () => {
|
|||||||
"/store/carts/test-cart-3/line-items/test-item3/",
|
"/store/carts/test-cart-3/line-items/test-item3/",
|
||||||
{
|
{
|
||||||
quantity: 3,
|
quantity: 3,
|
||||||
|
metadata: {
|
||||||
|
another: "prop",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{ withCredentials: true }
|
{ withCredentials: true }
|
||||||
)
|
)
|
||||||
@@ -782,6 +785,10 @@ describe("/store/carts", () => {
|
|||||||
variant_id: "test-variant-sale-cg",
|
variant_id: "test-variant-sale-cg",
|
||||||
quantity: 3,
|
quantity: 3,
|
||||||
adjustments: [],
|
adjustments: [],
|
||||||
|
metadata: {
|
||||||
|
"some-existing": "prop",
|
||||||
|
another: "prop",
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
])
|
])
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -938,6 +938,7 @@ module.exports = async (dataSource, data = {}) => {
|
|||||||
quantity: 1,
|
quantity: 1,
|
||||||
variant_id: "test-variant-sale-cg",
|
variant_id: "test-variant-sale-cg",
|
||||||
cart_id: "test-cart-3",
|
cart_id: "test-cart-3",
|
||||||
|
metadata: { "some-existing": "prop" },
|
||||||
})
|
})
|
||||||
await manager.save(li3)
|
await manager.save(li3)
|
||||||
}
|
}
|
||||||
@@ -8,4 +8,8 @@ export interface StorePostCartsCartLineItemsItemReq {
|
|||||||
* The quantity to set the Line Item to.
|
* The quantity to set the Line Item to.
|
||||||
*/
|
*/
|
||||||
quantity: number
|
quantity: number
|
||||||
|
/**
|
||||||
|
* An optional key-value map with additional details about the Line Item. If omitted, the metadata will remain unchanged."
|
||||||
|
*/
|
||||||
|
metadata?: Record<string, any>
|
||||||
}
|
}
|
||||||
@@ -73,7 +73,7 @@ describe("POST /store/carts/:id/line-items/:line_id", () => {
|
|||||||
jest.clearAllMocks()
|
jest.clearAllMocks()
|
||||||
})
|
})
|
||||||
|
|
||||||
it("calls CartService create", () => {
|
it("calls CartService removeLineItem", () => {
|
||||||
expect(CartServiceMock.removeLineItem).toHaveBeenCalledTimes(1)
|
expect(CartServiceMock.removeLineItem).toHaveBeenCalledTimes(1)
|
||||||
expect(CartServiceMock.removeLineItem).toHaveBeenCalledWith(
|
expect(CartServiceMock.removeLineItem).toHaveBeenCalledWith(
|
||||||
IdMap.getId("fr-cart"),
|
IdMap.getId("fr-cart"),
|
||||||
@@ -89,4 +89,142 @@ describe("POST /store/carts/:id/line-items/:line_id", () => {
|
|||||||
expect(subject.body.cart.id).toEqual(IdMap.getId("fr-cart"))
|
expect(subject.body.cart.id).toEqual(IdMap.getId("fr-cart"))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe("updates metadata if included in request body", () => {
|
||||||
|
let subject
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
const cartId = IdMap.getId("fr-cart")
|
||||||
|
const lineId = IdMap.getId("existingLine")
|
||||||
|
subject = await request(
|
||||||
|
"POST",
|
||||||
|
`/store/carts/${cartId}/line-items/${lineId}`,
|
||||||
|
{
|
||||||
|
payload: {
|
||||||
|
quantity: 3,
|
||||||
|
metadata: {
|
||||||
|
potato: "tomato",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
jest.clearAllMocks()
|
||||||
|
})
|
||||||
|
|
||||||
|
it("calls CartService updateLineItem", () => {
|
||||||
|
expect(CartServiceMock.updateLineItem).toHaveBeenCalledTimes(1)
|
||||||
|
expect(CartServiceMock.updateLineItem).toHaveBeenCalledWith(
|
||||||
|
IdMap.getId("fr-cart"),
|
||||||
|
IdMap.getId("existingLine"),
|
||||||
|
{
|
||||||
|
metadata: {
|
||||||
|
potato: "tomato",
|
||||||
|
},
|
||||||
|
quantity: 3,
|
||||||
|
region_id: expect.any(String),
|
||||||
|
variant_id: expect.any(String),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns 200", () => {
|
||||||
|
expect(subject.status).toEqual(200)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns the cart", () => {
|
||||||
|
expect(subject.body.cart.id).toEqual(IdMap.getId("fr-cart"))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("uses empty metadata if no metadata in request body", () => {
|
||||||
|
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 updateLineItem", () => {
|
||||||
|
expect(CartServiceMock.updateLineItem).toHaveBeenCalledTimes(1)
|
||||||
|
expect(CartServiceMock.updateLineItem).toHaveBeenCalledWith(
|
||||||
|
IdMap.getId("cartLineItemMetadata"),
|
||||||
|
IdMap.getId("lineWithMetadata"),
|
||||||
|
{
|
||||||
|
metadata: {},
|
||||||
|
quantity: 3,
|
||||||
|
region_id: expect.any(String),
|
||||||
|
variant_id: expect.any(String),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns 200", () => {
|
||||||
|
expect(subject.status).toEqual(200)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns the cart", () => {
|
||||||
|
expect(subject.body.cart.id).toEqual(IdMap.getId("cartLineItemMetadata"))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("uses metadata if in request body", () => {
|
||||||
|
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,
|
||||||
|
metadata: { test: "this" },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
jest.clearAllMocks()
|
||||||
|
})
|
||||||
|
|
||||||
|
it("calls CartService updateLineItem", () => {
|
||||||
|
expect(CartServiceMock.updateLineItem).toHaveBeenCalledTimes(1)
|
||||||
|
expect(CartServiceMock.updateLineItem).toHaveBeenCalledWith(
|
||||||
|
IdMap.getId("cartLineItemMetadata"),
|
||||||
|
IdMap.getId("lineWithMetadata"),
|
||||||
|
{
|
||||||
|
metadata: { test: "this" },
|
||||||
|
quantity: 3,
|
||||||
|
region_id: expect.any(String),
|
||||||
|
variant_id: expect.any(String),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns 200", () => {
|
||||||
|
expect(subject.status).toEqual(200)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("returns the cart", () => {
|
||||||
|
expect(subject.body.cart.id).toEqual(IdMap.getId("cartLineItemMetadata"))
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { IsInt } from "class-validator"
|
import { IsInt, IsOptional } from "class-validator"
|
||||||
import { MedusaError } from "medusa-core-utils"
|
import { MedusaError } from "medusa-core-utils"
|
||||||
import { EntityManager } from "typeorm"
|
import { EntityManager } from "typeorm"
|
||||||
import { defaultStoreCartFields, defaultStoreCartRelations } from "."
|
import { defaultStoreCartFields, defaultStoreCartRelations } from "."
|
||||||
@@ -89,7 +89,7 @@ export default async (req, res) => {
|
|||||||
variant_id: existing.variant.id,
|
variant_id: existing.variant.id,
|
||||||
region_id: cart.region_id,
|
region_id: cart.region_id,
|
||||||
quantity: validated.quantity,
|
quantity: validated.quantity,
|
||||||
metadata: existing.metadata || {},
|
metadata: validated.metadata || {},
|
||||||
}
|
}
|
||||||
|
|
||||||
await cartService
|
await cartService
|
||||||
@@ -124,8 +124,14 @@ export default async (req, res) => {
|
|||||||
* quantity:
|
* quantity:
|
||||||
* type: number
|
* type: number
|
||||||
* description: The quantity to set the Line Item to.
|
* description: The quantity to set the Line Item to.
|
||||||
|
* metadata:
|
||||||
|
* type: object
|
||||||
|
* description: An optional key-value map with additional details about the Line Item. If omitted, the metadata will remain unchanged."
|
||||||
*/
|
*/
|
||||||
export class StorePostCartsCartLineItemsItemReq {
|
export class StorePostCartsCartLineItemsItemReq {
|
||||||
@IsInt()
|
@IsInt()
|
||||||
quantity: number
|
quantity: number
|
||||||
|
|
||||||
|
@IsOptional()
|
||||||
|
metadata?: Record<string, unknown> | undefined
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user