diff --git a/packages/medusa/src/api/routes/admin/discounts/__tests__/list-discounts.js b/packages/medusa/src/api/routes/admin/discounts/__tests__/list-discounts.js index 9c9198f38a..643a9ae054 100644 --- a/packages/medusa/src/api/routes/admin/discounts/__tests__/list-discounts.js +++ b/packages/medusa/src/api/routes/admin/discounts/__tests__/list-discounts.js @@ -44,7 +44,7 @@ describe("GET /admin/discounts", () => { jest.clearAllMocks() subject = await request( "GET", - `/admin/discounts?q=OLI&limit=40&offset=20&is_dynamic=false`, + `/admin/discounts?q=OLI&limit=40&offset=20&is_dynamic=false&is_disabled=false`, { adminSession: { jwt: { @@ -62,7 +62,7 @@ describe("GET /admin/discounts", () => { it("calls service retrieve with config", () => { expect(DiscountServiceMock.listAndCount).toHaveBeenCalledTimes(1) expect(DiscountServiceMock.listAndCount).toHaveBeenCalledWith( - { q: "OLI", is_dynamic: false }, + { q: "OLI", is_dynamic: false, is_disabled: false }, { select: defaultFields, relations: defaultRelations, @@ -73,4 +73,70 @@ describe("GET /admin/discounts", () => { ) }) }) + + describe("successful retrieval of dynamic discounts", () => { + let subject + + beforeAll(async () => { + jest.clearAllMocks() + subject = await request("GET", `/admin/discounts?is_dynamic=true`, { + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + }) + }) + + it("returns 200", () => { + expect(subject.status).toEqual(200) + }) + + it("calls service retrieve with corresponding config", () => { + expect(DiscountServiceMock.listAndCount).toHaveBeenCalledTimes(1) + expect(DiscountServiceMock.listAndCount).toHaveBeenCalledWith( + { is_dynamic: true }, + { + select: defaultFields, + relations: defaultRelations, + skip: 0, + take: 20, + order: { created_at: "DESC" }, + } + ) + }) + }) + + describe("successful retrieval of disabled discounts", () => { + let subject + + beforeAll(async () => { + jest.clearAllMocks() + subject = await request("GET", `/admin/discounts?is_disabled=true`, { + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + }) + }) + + it("returns 200", () => { + expect(subject.status).toEqual(200) + }) + + it("calls service retrieve with corresponding config", () => { + expect(DiscountServiceMock.listAndCount).toHaveBeenCalledTimes(1) + expect(DiscountServiceMock.listAndCount).toHaveBeenCalledWith( + { is_disabled: true }, + { + select: defaultFields, + relations: defaultRelations, + skip: 0, + take: 20, + order: { created_at: "DESC" }, + } + ) + }) + }) }) diff --git a/packages/medusa/src/api/routes/admin/discounts/list-discounts.js b/packages/medusa/src/api/routes/admin/discounts/list-discounts.js index 1790df836e..bf4b982fed 100644 --- a/packages/medusa/src/api/routes/admin/discounts/list-discounts.js +++ b/packages/medusa/src/api/routes/admin/discounts/list-discounts.js @@ -34,6 +34,10 @@ export default async (req, res) => { selector.is_dynamic = req.query.is_dynamic === "true" } + if ("is_disabled" in req.query) { + selector.is_disabled = req.query.is_disabled === "true" + } + const listConfig = { select: defaultFields, relations: defaultRelations, diff --git a/packages/medusa/src/api/routes/admin/products/create-product.js b/packages/medusa/src/api/routes/admin/products/create-product.js index 57d5024394..0d9b928691 100644 --- a/packages/medusa/src/api/routes/admin/products/create-product.js +++ b/packages/medusa/src/api/routes/admin/products/create-product.js @@ -222,10 +222,18 @@ export default async (req, res) => { inventory_quantity: Validator.number().default(0), allow_backorder: Validator.boolean().optional(), manage_inventory: Validator.boolean().optional(), - weight: Validator.number().optional(), - length: Validator.number().optional(), - height: Validator.number().optional(), - width: Validator.number().optional(), + weight: Validator.number() + .allow(null) + .optional(), + length: Validator.number() + .allow(null) + .optional(), + height: Validator.number() + .allow(null) + .optional(), + width: Validator.number() + .allow(null) + .optional(), origin_country: Validator.string() .optional() .allow("") @@ -259,10 +267,18 @@ export default async (req, res) => { }) .default([]), }), - weight: Validator.number().optional(), - length: Validator.number().optional(), - height: Validator.number().optional(), - width: Validator.number().optional(), + weight: Validator.number() + .allow(null) + .optional(), + length: Validator.number() + .allow(null) + .optional(), + height: Validator.number() + .allow(null) + .optional(), + width: Validator.number() + .allow(null) + .optional(), hs_code: Validator.string() .optional() .allow(""), diff --git a/packages/medusa/src/api/routes/admin/products/create-variant.js b/packages/medusa/src/api/routes/admin/products/create-variant.js index 804f40ac7d..a45722cd0c 100644 --- a/packages/medusa/src/api/routes/admin/products/create-variant.js +++ b/packages/medusa/src/api/routes/admin/products/create-variant.js @@ -115,10 +115,18 @@ export default async (req, res) => { inventory_quantity: Validator.number().default(0), allow_backorder: Validator.boolean().optional(), manage_inventory: Validator.boolean().optional(), - weight: Validator.number().optional(), - length: Validator.number().optional(), - height: Validator.number().optional(), - width: Validator.number().optional(), + weight: Validator.number() + .allow(null) + .optional(), + length: Validator.number() + .allow(null) + .optional(), + height: Validator.number() + .allow(null) + .optional(), + width: Validator.number() + .allow(null) + .optional(), origin_country: Validator.string().allow(""), mid_code: Validator.string().allow(""), material: Validator.string().allow(""), @@ -127,7 +135,7 @@ export default async (req, res) => { .items( Validator.object() .keys({ - region_id: Validator.string(), + region_id: Validator.string().empty(null), currency_code: Validator.string().required(), amount: Validator.number() .integer() diff --git a/packages/medusa/src/api/routes/admin/products/update-product.js b/packages/medusa/src/api/routes/admin/products/update-product.js index 50695cb28e..f11982f3e1 100644 --- a/packages/medusa/src/api/routes/admin/products/update-product.js +++ b/packages/medusa/src/api/routes/admin/products/update-product.js @@ -210,11 +210,20 @@ export default async (req, res) => { }) .optional(), handle: Validator.string().optional(), - weight: Validator.number().optional(), - length: Validator.number().optional(), - height: Validator.number().optional(), - width: Validator.number().optional(), + weight: Validator.number() + .allow(null) + .optional(), + length: Validator.number() + .allow(null) + .optional(), + height: Validator.number() + .allow(null) + .optional(), + width: Validator.number() + .allow(null) + .optional(), origin_country: Validator.string().allow(null, ""), + hs_code: Validator.string().allow(null, ""), mid_code: Validator.string().allow(null, ""), material: Validator.string().allow(null, ""), images: Validator.array() @@ -250,10 +259,18 @@ export default async (req, res) => { inventory_quantity: Validator.number().allow(null), allow_backorder: Validator.boolean().allow(null), manage_inventory: Validator.boolean().allow(null), - weight: Validator.number().optional(), - length: Validator.number().optional(), - height: Validator.number().optional(), - width: Validator.number().optional(), + weight: Validator.number() + .allow(null) + .optional(), + length: Validator.number() + .allow(null) + .optional(), + height: Validator.number() + .allow(null) + .optional(), + width: Validator.number() + .allow(null) + .optional(), hs_code: Validator.string() .optional() .allow(null, ""), diff --git a/packages/medusa/src/api/routes/admin/products/update-variant.js b/packages/medusa/src/api/routes/admin/products/update-variant.js index d7973a6e73..1782ab17be 100644 --- a/packages/medusa/src/api/routes/admin/products/update-variant.js +++ b/packages/medusa/src/api/routes/admin/products/update-variant.js @@ -114,7 +114,7 @@ export default async (req, res) => { prices: Validator.array().items( Validator.object() .keys({ - region_id: Validator.string(), + region_id: Validator.string().empty(null), currency_code: Validator.string(), amount: Validator.number() .integer() @@ -133,10 +133,18 @@ export default async (req, res) => { inventory_quantity: Validator.number().optional(), allow_backorder: Validator.boolean().optional(), manage_inventory: Validator.boolean().optional(), - weight: Validator.number().optional(), - length: Validator.number().optional(), - height: Validator.number().optional(), - width: Validator.number().optional(), + weight: Validator.number() + .allow(null) + .optional(), + length: Validator.number() + .allow(null) + .optional(), + height: Validator.number() + .allow(null) + .optional(), + width: Validator.number() + .allow(null) + .optional(), hs_code: Validator.string() .optional() .allow(null, ""),