feat(medusa, medusa-js, medusa-react): Add endpoint to retrieve product tags from the storefront (#3051)

This commit is contained in:
Kasper Fabricius Kristensen
2023-01-18 10:47:15 +01:00
committed by GitHub
parent ab580066ae
commit 150696de99
15 changed files with 491 additions and 21 deletions
@@ -0,0 +1,114 @@
const path = require("path")
const setupServer = require("../../../helpers/setup-server")
const { useApi } = require("../../../helpers/use-api")
const { initDb, useDb } = require("../../../helpers/use-db")
const {
simpleProductTagFactory,
} = require("../../factories/simple-product-tag-factory")
jest.setTimeout(30000)
describe("/store/product-tags", () => {
let medusaProcess
let dbConnection
const doAfterEach = async () => {
const db = useDb()
await db.teardown()
}
beforeAll(async () => {
const cwd = path.resolve(path.join(__dirname, "..", ".."))
dbConnection = await initDb({ cwd })
medusaProcess = await setupServer({ cwd })
})
afterAll(async () => {
const db = useDb()
await db.shutdown()
medusaProcess.kill()
})
describe("GET /store/product-tags", () => {
beforeEach(async () => {
for (let i = 0; i < 10; i++) {
await simpleProductTagFactory(dbConnection, {
id: `ptag-${i}`,
value: `tag-${i}`,
})
}
})
afterEach(async () => {
await doAfterEach()
})
it("lists product tags in store", async () => {
const api = useApi()
const res = await api.get("/store/product-tags")
expect(res.status).toEqual(200)
expect(res.data.product_tags.length).toEqual(10)
})
it("lists product tags in store with limit", async () => {
const api = useApi()
const res = await api.get("/store/product-tags?limit=5")
expect(res.status).toEqual(200)
expect(res.data.product_tags.length).toEqual(5)
})
it("lists product tags in store with offset", async () => {
const api = useApi()
const res = await api.get("/store/product-tags?offset=5")
expect(res.status).toEqual(200)
expect(res.data.product_tags.length).toEqual(5)
})
it("lists product tags in store with offset and limit", async () => {
const api = useApi()
const res = await api.get("/store/product-tags?offset=5&limit=5")
expect(res.status).toEqual(200)
expect(res.data.product_tags.length).toEqual(5)
})
it("lists product tags in store where id matches query", async () => {
const api = useApi()
const res = await api.get("/store/product-tags?id=ptag-1")
expect(res.status).toEqual(200)
expect(res.data.product_tags.length).toEqual(1)
expect(res.data.product_tags[0].id).toEqual("ptag-1")
})
it("lists product tags in store where value matches query", async () => {
const api = useApi()
const res = await api.get("/store/product-tags?value=tag-1")
expect(res.status).toEqual(200)
expect(res.data.product_tags.length).toEqual(1)
expect(res.data.product_tags[0].value).toEqual("tag-1")
})
it("lists product tags in store where value matches free text", async () => {
const api = useApi()
const res = await api.get("/store/product-tags?q=tag-1")
expect(res.status).toEqual(200)
expect(res.data.product_tags.length).toEqual(1)
expect(res.data.product_tags[0].value).toEqual("tag-1")
})
})
})
@@ -0,0 +1,29 @@
import { ProductTag } from "@medusajs/medusa"
import faker from "faker"
import { Connection } from "typeorm"
type ProductTagFactoryData = {
id?: string
value?: string
metadata?: Record<string, unknown>
}
export const simpleProductTagFactory = async (
connection: Connection,
data: ProductTagFactoryData = {},
seed?: number
): Promise<ProductTag | undefined> => {
if (typeof seed !== "undefined") {
faker.seed(seed)
}
const manager = connection.manager
const productTag = manager.create(ProductTag, {
id: data.id || faker.datatype.uuid(),
value: data.value || faker.commerce.productAdjective(),
metadata: data.metadata || {},
})
return await manager.save(productTag)
}