feat(medusa): Add endpoints specific to DiscountConditions (#1355)
This commit is contained in:
1 parent
a69b52e031
commit
9ca45ea492
20 files changed
+1433
-159
No files matched your search
@@ -478,7 +478,14 @@
|
||||
"created_at": "2021-03-16T21:24:16.872Z",
|
||||
"updated_at": "2021-03-16T21:24:16.872Z",
|
||||
"deleted_at": null,
|
||||
"metadata": null
|
||||
"metadata": null,
|
||||
"conditions": [
|
||||
{
|
||||
"id": "cnd_01F0YESMVJXKX8XZ6Q9Z6Q6Z6",
|
||||
"type": "products",
|
||||
"operator": "in"
|
||||
}
|
||||
]
|
||||
},
|
||||
"is_disabled": false,
|
||||
"parent_discount_id": null,
|
||||
|
||||
@@ -762,6 +762,43 @@ export const adminHandlers = [
|
||||
)
|
||||
}),
|
||||
|
||||
rest.post("/admin/discounts/:id/conditions", (req, res, ctx) => {
|
||||
return res(
|
||||
ctx.status(200),
|
||||
ctx.json({
|
||||
discount: {
|
||||
...fixtures.get("discount"),
|
||||
},
|
||||
})
|
||||
)
|
||||
}),
|
||||
|
||||
rest.post("/admin/discounts/:id/conditions/:conditionId", (req, res, ctx) => {
|
||||
return res(
|
||||
ctx.status(200),
|
||||
ctx.json({
|
||||
discount: {
|
||||
...fixtures.get("discount"),
|
||||
},
|
||||
})
|
||||
)
|
||||
}),
|
||||
|
||||
rest.delete(
|
||||
"/admin/discounts/:id/conditions/:conditionId",
|
||||
(req, res, ctx) => {
|
||||
return res(
|
||||
ctx.status(200),
|
||||
ctx.json({
|
||||
id: req.params.conditionId,
|
||||
object: "discount-condition",
|
||||
deleted: true,
|
||||
discount: fixtures.get("discount"),
|
||||
})
|
||||
)
|
||||
}
|
||||
),
|
||||
|
||||
rest.get("/admin/draft-orders/", (req, res, ctx) => {
|
||||
return res(
|
||||
ctx.status(200),
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import {
|
||||
AdminDiscountsDeleteRes,
|
||||
AdminDiscountsRes,
|
||||
AdminPostDiscountsDiscountConditions,
|
||||
AdminPostDiscountsDiscountConditionsCondition,
|
||||
AdminPostDiscountsDiscountDynamicCodesReq,
|
||||
AdminPostDiscountsDiscountReq,
|
||||
AdminPostDiscountsReq,
|
||||
AdminPostDiscountsReq
|
||||
} from "@medusajs/medusa"
|
||||
import { Response } from "@medusajs/medusa-js"
|
||||
import { useMutation, UseMutationOptions, useQueryClient } from "react-query"
|
||||
@@ -115,3 +117,51 @@ export const useAdminDeleteDynamicDiscountCode = (
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
export const useAdminDiscountCreateCondition = (
|
||||
discountId: string,
|
||||
options?: UseMutationOptions<
|
||||
Response<AdminDiscountsRes>,
|
||||
Error,
|
||||
AdminPostDiscountsDiscountConditions
|
||||
>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const queryClient = useQueryClient()
|
||||
return useMutation(
|
||||
(payload: AdminPostDiscountsDiscountConditions) =>
|
||||
client.admin.discounts.createCondition(discountId, payload),
|
||||
buildOptions(queryClient, adminDiscountKeys.detail(discountId), options)
|
||||
)
|
||||
}
|
||||
|
||||
export const useAdminDiscountUpdateCondition = (
|
||||
discountId: string,
|
||||
conditionId: string,
|
||||
options?: UseMutationOptions<
|
||||
Response<AdminDiscountsRes>,
|
||||
Error,
|
||||
AdminPostDiscountsDiscountConditionsCondition
|
||||
>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const queryClient = useQueryClient()
|
||||
return useMutation(
|
||||
(payload: AdminPostDiscountsDiscountConditionsCondition) =>
|
||||
client.admin.discounts.updateCondition(discountId, conditionId, payload),
|
||||
buildOptions(queryClient, adminDiscountKeys.detail(discountId), options)
|
||||
)
|
||||
}
|
||||
|
||||
export const useAdminDiscountRemoveCondition = (
|
||||
discountId: string,
|
||||
options?: UseMutationOptions<Response<AdminDiscountsDeleteRes>, Error, string>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const queryClient = useQueryClient()
|
||||
return useMutation(
|
||||
(conditionId: string) =>
|
||||
client.admin.discounts.deleteCondition(discountId, conditionId),
|
||||
buildOptions(queryClient, adminDiscountKeys.detail(discountId), options)
|
||||
)
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
import { DiscountConditionOperator } from "@medusajs/medusa"
|
||||
import { renderHook } from "@testing-library/react-hooks"
|
||||
import { fixtures } from "../../../../mocks/data"
|
||||
import {
|
||||
@@ -6,7 +7,10 @@ import {
|
||||
useAdminDeleteDiscount,
|
||||
useAdminDeleteDynamicDiscountCode,
|
||||
useAdminDiscountAddRegion,
|
||||
useAdminDiscountCreateCondition,
|
||||
useAdminDiscountRemoveCondition,
|
||||
useAdminDiscountRemoveRegion,
|
||||
useAdminDiscountUpdateCondition,
|
||||
useAdminUpdateDiscount,
|
||||
} from "../../../../src/"
|
||||
import { createWrapper } from "../../../utils"
|
||||
@@ -184,3 +188,68 @@ describe("useAdminDeleteDynamicDiscountCode hook", () => {
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
describe("useAdminDiscountCreateCondition hook", () => {
|
||||
test("Creates a condition from a discount", async () => {
|
||||
const id = fixtures.get("discount").id
|
||||
const conditionId = fixtures.get("discount").rule.conditions[0].id
|
||||
|
||||
const { result, waitFor } = renderHook(
|
||||
() => useAdminDiscountCreateCondition(id),
|
||||
{
|
||||
wrapper: createWrapper(),
|
||||
}
|
||||
)
|
||||
|
||||
result.current.mutate({
|
||||
operator: DiscountConditionOperator.IN,
|
||||
products: ["test-product"],
|
||||
})
|
||||
|
||||
await waitFor(() => result.current.isSuccess)
|
||||
|
||||
expect(result.current.data.response.status).toEqual(200)
|
||||
expect(result.current.data.discount).toEqual(fixtures.get("discount"))
|
||||
})
|
||||
})
|
||||
describe("useAdminDiscountUpdateCondition hook", () => {
|
||||
test("Updates condition for discount", async () => {
|
||||
const id = fixtures.get("discount").id
|
||||
const conditionId = fixtures.get("discount").rule.conditions[0].id
|
||||
|
||||
const { result, waitFor } = renderHook(
|
||||
() => useAdminDiscountUpdateCondition(id, conditionId),
|
||||
{
|
||||
wrapper: createWrapper(),
|
||||
}
|
||||
)
|
||||
|
||||
result.current.mutate({ products: ["test-product"] })
|
||||
|
||||
await waitFor(() => result.current.isSuccess)
|
||||
|
||||
expect(result.current.data.response.status).toEqual(200)
|
||||
expect(result.current.data.discount).toEqual(fixtures.get("discount"))
|
||||
})
|
||||
})
|
||||
|
||||
describe("useAdminDiscountRemoveCondition hook", () => {
|
||||
test("removes a condition from a discount", async () => {
|
||||
const id = fixtures.get("discount").id
|
||||
const conditionId = fixtures.get("discount").rule.conditions[0].id
|
||||
|
||||
const { result, waitFor } = renderHook(
|
||||
() => useAdminDiscountRemoveCondition(id),
|
||||
{
|
||||
wrapper: createWrapper(),
|
||||
}
|
||||
)
|
||||
|
||||
result.current.mutate(conditionId)
|
||||
|
||||
await waitFor(() => result.current.isSuccess)
|
||||
|
||||
expect(result.current.data.response.status).toEqual(200)
|
||||
expect(result.current.data.id).toEqual(conditionId)
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user