feat(medusa): Add endpoints specific to DiscountConditions (#1355)

This commit is contained in:
Oliver Windall Juhl authored and GitHub committed 2022-05-13 12:42:23 +02:00
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)
})
})