fix(medusa): Add admin get product tests (#5480)
This commit is contained in:
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
"@medusajs/medusa": patch
|
||||||
|
"medusa-react": patch
|
||||||
|
"@medusajs/admin-ui": patch
|
||||||
|
"@medusajs/admin": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix(medusa): admin get product should return prices when expected
|
||||||
@@ -943,6 +943,142 @@ describe("/admin/products", () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe("GET /admin/products/:id", () => {
|
||||||
|
const productId = "testing-get-product"
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await simpleProductFactory(dbConnection, {
|
||||||
|
id: productId,
|
||||||
|
variants: [
|
||||||
|
{
|
||||||
|
title: "Test variant",
|
||||||
|
prices: [
|
||||||
|
{
|
||||||
|
currency: "usd",
|
||||||
|
amount: 100,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
|
||||||
|
await adminSeeder(dbConnection)
|
||||||
|
})
|
||||||
|
|
||||||
|
afterEach(async () => {
|
||||||
|
const db = useDb()
|
||||||
|
await db.teardown()
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should get a product with default relations", async () => {
|
||||||
|
const api = useApi()
|
||||||
|
|
||||||
|
const res = await api
|
||||||
|
.get(`/admin/products/${productId}`, adminHeaders)
|
||||||
|
.catch((err) => {
|
||||||
|
console.log(err)
|
||||||
|
})
|
||||||
|
|
||||||
|
const keysInResponse = Object.keys(res.data.product)
|
||||||
|
|
||||||
|
expect(res.status).toEqual(200)
|
||||||
|
expect(res.data.product.id).toEqual(productId)
|
||||||
|
expect(keysInResponse).toEqual(
|
||||||
|
expect.arrayContaining([
|
||||||
|
// fields
|
||||||
|
"id",
|
||||||
|
"created_at",
|
||||||
|
"updated_at",
|
||||||
|
"deleted_at",
|
||||||
|
"title",
|
||||||
|
"subtitle",
|
||||||
|
"description",
|
||||||
|
"handle",
|
||||||
|
"is_giftcard",
|
||||||
|
"status",
|
||||||
|
"thumbnail",
|
||||||
|
"weight",
|
||||||
|
"length",
|
||||||
|
"height",
|
||||||
|
"width",
|
||||||
|
"hs_code",
|
||||||
|
"origin_country",
|
||||||
|
"mid_code",
|
||||||
|
"material",
|
||||||
|
"collection_id",
|
||||||
|
"type_id",
|
||||||
|
"discountable",
|
||||||
|
"external_id",
|
||||||
|
"metadata",
|
||||||
|
|
||||||
|
// relations
|
||||||
|
"categories",
|
||||||
|
"collection",
|
||||||
|
"images",
|
||||||
|
"options",
|
||||||
|
"profiles",
|
||||||
|
"profile",
|
||||||
|
"profile_id",
|
||||||
|
"sales_channels",
|
||||||
|
"tags",
|
||||||
|
"type",
|
||||||
|
"variants",
|
||||||
|
])
|
||||||
|
)
|
||||||
|
|
||||||
|
const variants = res.data.product.variants
|
||||||
|
const hasPrices = variants.some((variant) => !!variant.prices)
|
||||||
|
|
||||||
|
expect(hasPrices).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should get a product with prices", async () => {
|
||||||
|
const api = useApi()
|
||||||
|
|
||||||
|
const res = await api
|
||||||
|
.get(
|
||||||
|
`/admin/products/${productId}?expand=variants,variants.prices`,
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
.catch((err) => {
|
||||||
|
console.log(err)
|
||||||
|
})
|
||||||
|
|
||||||
|
const { id, variants } = res.data.product
|
||||||
|
|
||||||
|
expect(id).toEqual(productId)
|
||||||
|
expect(variants[0].prices).toEqual(
|
||||||
|
expect.arrayContaining([
|
||||||
|
expect.objectContaining({
|
||||||
|
amount: 100,
|
||||||
|
currency_code: "usd",
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should get a product only with variants expanded", async () => {
|
||||||
|
const api = useApi()
|
||||||
|
|
||||||
|
const res = await api
|
||||||
|
.get(`/admin/products/${productId}?expand=variants`, adminHeaders)
|
||||||
|
.catch((err) => {
|
||||||
|
console.log(err)
|
||||||
|
})
|
||||||
|
|
||||||
|
const { id, variants } = res.data.product
|
||||||
|
|
||||||
|
expect(id).toEqual(productId)
|
||||||
|
expect(variants[0]).toEqual(
|
||||||
|
expect.objectContaining({
|
||||||
|
title: "Test variant",
|
||||||
|
})
|
||||||
|
)
|
||||||
|
// prices is one of many properties that should not be expanded
|
||||||
|
expect(variants[0].prices).toBeUndefined()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
describe("POST /admin/products", () => {
|
describe("POST /admin/products", () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await productSeeder(dbConnection)
|
await productSeeder(dbConnection)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
AdminGetProductParams,
|
||||||
AdminGetProductsParams,
|
AdminGetProductsParams,
|
||||||
AdminProductsListRes,
|
AdminProductsListRes,
|
||||||
AdminProductsListTagsRes,
|
AdminProductsListTagsRes,
|
||||||
@@ -35,6 +36,7 @@ export const useAdminProducts = (
|
|||||||
|
|
||||||
export const useAdminProduct = (
|
export const useAdminProduct = (
|
||||||
id: string,
|
id: string,
|
||||||
|
query?: AdminGetProductParams,
|
||||||
options?: UseQueryOptionsWrapper<
|
options?: UseQueryOptionsWrapper<
|
||||||
Response<AdminProductsRes>,
|
Response<AdminProductsRes>,
|
||||||
Error,
|
Error,
|
||||||
@@ -44,7 +46,7 @@ export const useAdminProduct = (
|
|||||||
const { client } = useMedusa()
|
const { client } = useMedusa()
|
||||||
const { data, ...rest } = useQuery(
|
const { data, ...rest } = useQuery(
|
||||||
adminProductKeys.detail(id),
|
adminProductKeys.detail(id),
|
||||||
() => client.admin.products.retrieve(id),
|
() => client.admin.products.retrieve(id, query),
|
||||||
options
|
options
|
||||||
)
|
)
|
||||||
return { ...data, ...rest } as const
|
return { ...data, ...rest } as const
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { PricingService, ProductService } from "../../../../services"
|
|
||||||
|
|
||||||
import IsolateProductDomainFeatureFlag from "../../../../loaders/feature-flags/isolate-product-domain"
|
|
||||||
import { MedusaError } from "@medusajs/utils"
|
import { MedusaError } from "@medusajs/utils"
|
||||||
|
import IsolateProductDomainFeatureFlag from "../../../../loaders/feature-flags/isolate-product-domain"
|
||||||
|
import { PricingService, ProductService } from "../../../../services"
|
||||||
|
import { FindParams } from "../../../../types/common"
|
||||||
import { defaultAdminProductRemoteQueryObject } from "./index"
|
import { defaultAdminProductRemoteQueryObject } from "./index"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -114,3 +114,5 @@ async function getProductWithIsolatedProductModule(req, id, retrieveConfig) {
|
|||||||
|
|
||||||
return product
|
return product
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class AdminGetProductParams extends FindParams {}
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
import "reflect-metadata"
|
import "reflect-metadata"
|
||||||
|
|
||||||
import { Product, ProductTag, ProductType, ProductVariant } from "../../../.."
|
import { Product, ProductTag, ProductType, ProductVariant } from "../../../.."
|
||||||
import { FindParams, PaginatedResponse } from "../../../../types/common"
|
import { PaginatedResponse } from "../../../../types/common"
|
||||||
import middlewares, { transformQuery } from "../../../middlewares"
|
import middlewares, { transformQuery } from "../../../middlewares"
|
||||||
|
|
||||||
import { FlagRouter } from "@medusajs/utils"
|
import { FlagRouter } from "@medusajs/utils"
|
||||||
import { Router } from "express"
|
import { Router } from "express"
|
||||||
import { PricedProduct } from "../../../../types/pricing"
|
import { PricedProduct } from "../../../../types/pricing"
|
||||||
import { validateSalesChannelsExist } from "../../../middlewares/validators/sales-channel-existence"
|
import { validateSalesChannelsExist } from "../../../middlewares/validators/sales-channel-existence"
|
||||||
|
import { AdminGetProductParams } from "./get-product"
|
||||||
import { AdminGetProductsParams } from "./list-products"
|
import { AdminGetProductsParams } from "./list-products"
|
||||||
|
|
||||||
const route = Router()
|
const route = Router()
|
||||||
@@ -76,7 +77,7 @@ export default (app, featureFlagRouter: FlagRouter) => {
|
|||||||
)
|
)
|
||||||
route.get(
|
route.get(
|
||||||
"/:id",
|
"/:id",
|
||||||
transformQuery(FindParams, {
|
transformQuery(AdminGetProductParams, {
|
||||||
defaultRelations: defaultAdminProductRelations,
|
defaultRelations: defaultAdminProductRelations,
|
||||||
defaultFields: defaultAdminProductFields,
|
defaultFields: defaultAdminProductFields,
|
||||||
isList: false,
|
isList: false,
|
||||||
@@ -496,3 +497,4 @@ export * from "./set-metadata"
|
|||||||
export * from "./update-option"
|
export * from "./update-option"
|
||||||
export * from "./update-product"
|
export * from "./update-product"
|
||||||
export * from "./update-variant"
|
export * from "./update-variant"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user