feat(medusa): handle product categories in import/export strategies (#3842)
**What** - add ProductCategories to import and export strategies - refactor ProductCategoriesService methods to use "retrieve_" pattern --- RESOLVES CORE-1275
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { ProductCategory } from "@medusajs/medusa"
|
||||
import path from "path"
|
||||
|
||||
import startServerWithEnvironment from "../../../helpers/start-server-with-environment"
|
||||
@@ -56,7 +57,7 @@ describe("/store/product-categories", () => {
|
||||
parent_category: productCategory,
|
||||
is_active: true,
|
||||
is_internal: false,
|
||||
rank: 3
|
||||
rank: 3,
|
||||
})
|
||||
|
||||
productCategoryChild2 = await simpleProductCategoryFactory(dbConnection, {
|
||||
@@ -80,7 +81,7 @@ describe("/store/product-categories", () => {
|
||||
parent_category: productCategory,
|
||||
is_active: true,
|
||||
is_internal: false,
|
||||
rank: 2
|
||||
rank: 2,
|
||||
})
|
||||
})
|
||||
|
||||
@@ -94,7 +95,7 @@ describe("/store/product-categories", () => {
|
||||
const api = useApi()
|
||||
|
||||
const response = await api.get(
|
||||
`/store/product-categories/${productCategory.id}?fields=handle,name,description`,
|
||||
`/store/product-categories/${productCategory.id}?fields=handle,name,description`
|
||||
)
|
||||
|
||||
expect(response.data.product_category).toEqual(
|
||||
@@ -107,7 +108,7 @@ describe("/store/product-categories", () => {
|
||||
id: productCategoryParent.id,
|
||||
handle: productCategoryParent.handle,
|
||||
name: productCategoryParent.name,
|
||||
description: "test description"
|
||||
description: "test description",
|
||||
}),
|
||||
category_children: [
|
||||
expect.objectContaining({
|
||||
@@ -120,7 +121,7 @@ describe("/store/product-categories", () => {
|
||||
handle: productCategoryChild.handle,
|
||||
name: productCategoryChild.name,
|
||||
}),
|
||||
]
|
||||
],
|
||||
})
|
||||
)
|
||||
|
||||
@@ -130,40 +131,42 @@ describe("/store/product-categories", () => {
|
||||
it("throws error on querying not allowed fields", async () => {
|
||||
const api = useApi()
|
||||
|
||||
const error = await api.get(
|
||||
`/store/product-categories/${productCategory.id}?fields=mpath`,
|
||||
).catch(e => e)
|
||||
const error = await api
|
||||
.get(`/store/product-categories/${productCategory.id}?fields=mpath`)
|
||||
.catch((e) => e)
|
||||
|
||||
expect(error.response.status).toEqual(400)
|
||||
expect(error.response.data.type).toEqual('invalid_data')
|
||||
expect(error.response.data.message).toEqual('Fields [mpath] are not valid')
|
||||
expect(error.response.data.type).toEqual("invalid_data")
|
||||
expect(error.response.data.message).toEqual(
|
||||
"Fields [mpath] are not valid"
|
||||
)
|
||||
})
|
||||
|
||||
it("throws error on querying for internal product category", async () => {
|
||||
const api = useApi()
|
||||
|
||||
const error = await api.get(
|
||||
`/store/product-categories/${productCategoryChild2.id}`,
|
||||
).catch(e => e)
|
||||
const error = await api
|
||||
.get(`/store/product-categories/${productCategoryChild2.id}`)
|
||||
.catch((e) => e)
|
||||
|
||||
expect(error.response.status).toEqual(404)
|
||||
expect(error.response.data.type).toEqual('not_found')
|
||||
expect(error.response.data.type).toEqual("not_found")
|
||||
expect(error.response.data.message).toEqual(
|
||||
`ProductCategory with id: ${productCategoryChild2.id} was not found`
|
||||
`ProductCategory with id: ${productCategoryChild2.id}, is_internal: false, is_active: true was not found`
|
||||
)
|
||||
})
|
||||
|
||||
it("throws error on querying for inactive product category", async () => {
|
||||
const api = useApi()
|
||||
|
||||
const error = await api.get(
|
||||
`/store/product-categories/${productCategoryChild3.id}`,
|
||||
).catch(e => e)
|
||||
const error = await api
|
||||
.get(`/store/product-categories/${productCategoryChild3.id}`)
|
||||
.catch((e) => e)
|
||||
|
||||
expect(error.response.status).toEqual(404)
|
||||
expect(error.response.data.type).toEqual('not_found')
|
||||
expect(error.response.data.type).toEqual("not_found")
|
||||
expect(error.response.data.message).toEqual(
|
||||
`ProductCategory with id: ${productCategoryChild3.id} was not found`
|
||||
`ProductCategory with id: ${productCategoryChild3.id}, is_internal: false, is_active: true was not found`
|
||||
)
|
||||
})
|
||||
})
|
||||
@@ -186,60 +189,58 @@ describe("/store/product-categories", () => {
|
||||
expect(response.data.offset).toEqual(0)
|
||||
expect(response.data.limit).toEqual(10)
|
||||
|
||||
expect(response.data.product_categories).toEqual(
|
||||
[
|
||||
expect.objectContaining({
|
||||
id: productCategory.id,
|
||||
rank: 0,
|
||||
parent_category: expect.objectContaining({
|
||||
id: productCategoryParent.id,
|
||||
}),
|
||||
category_children: [
|
||||
expect.objectContaining({
|
||||
id: productCategoryChild4.id,
|
||||
rank: 2,
|
||||
}),
|
||||
expect.objectContaining({
|
||||
id: productCategoryChild.id,
|
||||
rank: 3,
|
||||
}),
|
||||
],
|
||||
}),
|
||||
expect.objectContaining({
|
||||
expect(response.data.product_categories).toEqual([
|
||||
expect.objectContaining({
|
||||
id: productCategory.id,
|
||||
rank: 0,
|
||||
parent_category: expect.objectContaining({
|
||||
id: productCategoryParent.id,
|
||||
parent_category: null,
|
||||
rank: 0,
|
||||
category_children: [
|
||||
expect.objectContaining({
|
||||
id: productCategory.id,
|
||||
})
|
||||
],
|
||||
}),
|
||||
expect.objectContaining({
|
||||
id: productCategoryChild4.id,
|
||||
rank: 2,
|
||||
parent_category: expect.objectContaining({
|
||||
category_children: [
|
||||
expect.objectContaining({
|
||||
id: productCategoryChild4.id,
|
||||
rank: 2,
|
||||
}),
|
||||
expect.objectContaining({
|
||||
id: productCategoryChild.id,
|
||||
rank: 3,
|
||||
}),
|
||||
],
|
||||
}),
|
||||
expect.objectContaining({
|
||||
id: productCategoryParent.id,
|
||||
parent_category: null,
|
||||
rank: 0,
|
||||
category_children: [
|
||||
expect.objectContaining({
|
||||
id: productCategory.id,
|
||||
}),
|
||||
category_children: [],
|
||||
],
|
||||
}),
|
||||
expect.objectContaining({
|
||||
id: productCategoryChild4.id,
|
||||
rank: 2,
|
||||
parent_category: expect.objectContaining({
|
||||
id: productCategory.id,
|
||||
}),
|
||||
expect.objectContaining({
|
||||
id: productCategoryChild.id,
|
||||
rank: 3,
|
||||
parent_category: expect.objectContaining({
|
||||
id: productCategory.id,
|
||||
}),
|
||||
category_children: [],
|
||||
category_children: [],
|
||||
}),
|
||||
expect.objectContaining({
|
||||
id: productCategoryChild.id,
|
||||
rank: 3,
|
||||
parent_category: expect.objectContaining({
|
||||
id: productCategory.id,
|
||||
}),
|
||||
]
|
||||
)
|
||||
category_children: [],
|
||||
}),
|
||||
])
|
||||
})
|
||||
|
||||
it("gets list of product category with all childrens when include_descendants_tree=true", async () => {
|
||||
const api = useApi()
|
||||
|
||||
const response = await api.get(
|
||||
`/store/product-categories?parent_category_id=null&include_descendants_tree=true&limit=10`,
|
||||
`/store/product-categories?parent_category_id=null&include_descendants_tree=true&limit=10`
|
||||
)
|
||||
|
||||
expect(response.status).toEqual(200)
|
||||
@@ -260,7 +261,7 @@ describe("/store/product-categories", () => {
|
||||
id: productCategoryChild4.id,
|
||||
parent_category_id: productCategory.id,
|
||||
category_children: [],
|
||||
rank: 2
|
||||
rank: 2,
|
||||
}),
|
||||
expect.objectContaining({
|
||||
id: productCategoryChild.id,
|
||||
@@ -279,32 +280,36 @@ describe("/store/product-categories", () => {
|
||||
it("throws error when querying not allowed fields", async () => {
|
||||
const api = useApi()
|
||||
|
||||
const error = await api.get(
|
||||
`/store/product-categories?is_internal=true&limit=10`,
|
||||
).catch(e => e)
|
||||
const error = await api
|
||||
.get(`/store/product-categories?is_internal=true&limit=10`)
|
||||
.catch((e) => e)
|
||||
|
||||
expect(error.response.status).toEqual(400)
|
||||
expect(error.response.data.type).toEqual('invalid_data')
|
||||
expect(error.response.data.message).toEqual('property is_internal should not exist')
|
||||
expect(error.response.data.type).toEqual("invalid_data")
|
||||
expect(error.response.data.message).toEqual(
|
||||
"property is_internal should not exist"
|
||||
)
|
||||
})
|
||||
|
||||
it("filters based on free text on name and handle columns", async () => {
|
||||
const api = useApi()
|
||||
|
||||
const response = await api.get(
|
||||
`/store/product-categories?q=category-parent&limit=10`,
|
||||
`/store/product-categories?q=category-parent&limit=10`
|
||||
)
|
||||
|
||||
expect(response.status).toEqual(200)
|
||||
expect(response.data.count).toEqual(1)
|
||||
expect(response.data.product_categories[0].id).toEqual(productCategoryParent.id)
|
||||
expect(response.data.product_categories[0].id).toEqual(
|
||||
productCategoryParent.id
|
||||
)
|
||||
})
|
||||
|
||||
it("filters based on handle attribute of the data model", async () => {
|
||||
const api = useApi()
|
||||
|
||||
const response = await api.get(
|
||||
`/store/product-categories?handle=${productCategory.handle}&limit=10`,
|
||||
`/store/product-categories?handle=${productCategory.handle}&limit=10`
|
||||
)
|
||||
|
||||
expect(response.status).toEqual(200)
|
||||
@@ -316,39 +321,39 @@ describe("/store/product-categories", () => {
|
||||
const api = useApi()
|
||||
|
||||
const response = await api.get(
|
||||
`/store/product-categories?parent_category_id=${productCategory.id}&limit=10`,
|
||||
`/store/product-categories?parent_category_id=${productCategory.id}&limit=10`
|
||||
)
|
||||
|
||||
expect(response.status).toEqual(200)
|
||||
expect(response.data.count).toEqual(2)
|
||||
expect(response.data.product_categories).toEqual(
|
||||
[
|
||||
expect.objectContaining({
|
||||
id: productCategoryChild4.id,
|
||||
category_children: [],
|
||||
parent_category: expect.objectContaining({
|
||||
id: productCategory.id,
|
||||
}),
|
||||
rank: 2
|
||||
expect(response.data.product_categories).toEqual([
|
||||
expect.objectContaining({
|
||||
id: productCategoryChild4.id,
|
||||
category_children: [],
|
||||
parent_category: expect.objectContaining({
|
||||
id: productCategory.id,
|
||||
}),
|
||||
expect.objectContaining({
|
||||
id: productCategoryChild.id,
|
||||
category_children: [],
|
||||
parent_category: expect.objectContaining({
|
||||
id: productCategory.id,
|
||||
}),
|
||||
rank: 3
|
||||
rank: 2,
|
||||
}),
|
||||
expect.objectContaining({
|
||||
id: productCategoryChild.id,
|
||||
category_children: [],
|
||||
parent_category: expect.objectContaining({
|
||||
id: productCategory.id,
|
||||
}),
|
||||
]
|
||||
)
|
||||
rank: 3,
|
||||
}),
|
||||
])
|
||||
|
||||
const nullCategoryResponse = await api.get(
|
||||
`/store/product-categories?parent_category_id=null`,
|
||||
).catch(e => e)
|
||||
const nullCategoryResponse = await api
|
||||
.get(`/store/product-categories?parent_category_id=null`)
|
||||
.catch((e) => e)
|
||||
|
||||
expect(nullCategoryResponse.status).toEqual(200)
|
||||
expect(nullCategoryResponse.data.count).toEqual(1)
|
||||
expect(nullCategoryResponse.data.product_categories[0].id).toEqual(productCategoryParent.id)
|
||||
expect(nullCategoryResponse.data.product_categories[0].id).toEqual(
|
||||
productCategoryParent.id
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user