diff --git a/integration-tests/api/__tests__/admin/discount.js b/integration-tests/api/__tests__/admin/discount.js index 21e43264ab..bb194bf895 100644 --- a/integration-tests/api/__tests__/admin/discount.js +++ b/integration-tests/api/__tests__/admin/discount.js @@ -640,6 +640,7 @@ describe("/admin/discounts", () => { conditions: [ { id: condsToUpdate.id, + operator: "not_in", products: [product.id, anotherProduct.id], }, ], @@ -656,10 +657,10 @@ describe("/admin/discounts", () => { }) expect(updated.status).toEqual(200) - expect(updated.data.discount.rule.conditions).toEqual([ + expect(updated.data.discount.rule.conditions).toEqual(expect.arrayContaining([ expect.objectContaining({ type: "products", - operator: "in", + operator: "not_in", products: expect.arrayContaining([ expect.objectContaining({ id: product.id, @@ -673,7 +674,7 @@ describe("/admin/discounts", () => { type: "product_types", operator: "not_in", }), - ]) + ])) }) it("fails to add condition on rule with existing comb. of type and operator", async () => { diff --git a/packages/medusa/src/services/discount-condition.ts b/packages/medusa/src/services/discount-condition.ts index e91707b994..49d2eab603 100644 --- a/packages/medusa/src/services/discount-condition.ts +++ b/packages/medusa/src/services/discount-condition.ts @@ -122,6 +122,13 @@ class DiscountConditionService extends BaseService { manager.getCustomRepository(this.discountConditionRepository_) if (data.id) { + const resolvedCondition = await this.retrieve(data.id) + + if (data.operator && data.operator !== resolvedCondition.operator) { + resolvedCondition.operator = data.operator + await discountConditionRepo.save(resolvedCondition) + } + return await discountConditionRepo.addConditionResources( data.id, resolvedConditionType.resource_ids,