diff --git a/integration-tests/api/__tests__/admin/discount.js b/integration-tests/api/__tests__/admin/discount.js index 0a10176b1c..575b1e0a0d 100644 --- a/integration-tests/api/__tests__/admin/discount.js +++ b/integration-tests/api/__tests__/admin/discount.js @@ -26,6 +26,84 @@ describe("/admin/discounts", () => { medusaProcess.kill(); }); + describe("POST /admin/discounts", () => { + beforeEach(async () => { + const manager = dbConnection.manager; + try { + await adminSeeder(dbConnection); + } catch (err) { + console.log(err); + throw err; + } + }); + + afterEach(async () => { + const manager = dbConnection.manager; + await manager.query(`DELETE FROM "discount"`); + await manager.query(`DELETE FROM "discount_rule"`); + await manager.query(`DELETE FROM "user"`); + }); + + it("creates a discount and updates it", async () => { + const api = useApi(); + + const response = await api + .post( + "/admin/discounts", + { + code: "HELLOWORLD", + rule: { + description: "test", + type: "percentage", + value: 10, + allocation: "total", + }, + usage_limit: 10, + }, + { + headers: { + Authorization: "Bearer test_token", + }, + } + ) + .catch((err) => { + console.log(err); + }); + + expect(response.status).toEqual(200); + expect(response.data.discount).toEqual( + expect.objectContaining({ + code: "HELLOWORLD", + usage_limit: 10, + }) + ); + + const updated = await api + .post( + `/admin/discounts/${response.data.discount.id}`, + { + usage_limit: 20, + }, + { + headers: { + Authorization: "Bearer test_token", + }, + } + ) + .catch((err) => { + console.log(err); + }); + + expect(updated.status).toEqual(200); + expect(updated.data.discount).toEqual( + expect.objectContaining({ + code: "HELLOWORLD", + usage_limit: 20, + }) + ); + }); + }); + describe("POST /admin/discounts/:discount_id/dynamic-codes", () => { beforeEach(async () => { const manager = dbConnection.manager; diff --git a/packages/medusa/src/api/routes/admin/discounts/create-discount.js b/packages/medusa/src/api/routes/admin/discounts/create-discount.js index b053b16728..a5494b3a3b 100644 --- a/packages/medusa/src/api/routes/admin/discounts/create-discount.js +++ b/packages/medusa/src/api/routes/admin/discounts/create-discount.js @@ -36,6 +36,9 @@ import { MedusaError, Validator } from "medusa-core-utils" * type: array * items: * type: string + * usage_limit: + * type: number + * description: Maximum times the discount can be used * metadata: * description: An optional set of key-value pairs to hold additional information. * type: object @@ -57,21 +60,21 @@ export default async (req, res) => { is_dynamic: Validator.boolean().default(false), rule: Validator.object() .keys({ - description: Validator.string().optional(), + description: Validator.string().required(), type: Validator.string().required(), value: Validator.number() .positive() .required(), allocation: Validator.string().required(), valid_for: Validator.array().items(Validator.string()), - usage_limit: Validator.number() - .positive() - .optional(), }) .required(), is_disabled: Validator.boolean().default(false), starts_at: Validator.date().optional(), ends_at: Validator.date().optional(), + usage_limit: Validator.number() + .positive() + .optional(), regions: Validator.array() .items(Validator.string()) .optional(), diff --git a/packages/medusa/src/api/routes/admin/discounts/update-discount.js b/packages/medusa/src/api/routes/admin/discounts/update-discount.js index 0679dc7e1b..f3cfecc1d3 100644 --- a/packages/medusa/src/api/routes/admin/discounts/update-discount.js +++ b/packages/medusa/src/api/routes/admin/discounts/update-discount.js @@ -64,14 +64,14 @@ export default async (req, res) => { value: Validator.number().required(), allocation: Validator.string().required(), valid_for: Validator.array().items(Validator.string()), - usage_limit: Validator.number() - .positive() - .optional(), }) .optional(), is_disabled: Validator.boolean().optional(), starts_at: Validator.date().optional(), ends_at: Validator.date().optional(), + usage_limit: Validator.number() + .positive() + .optional(), regions: Validator.array() .items(Validator.string()) .optional(),