fix(promotion, core-flows): updating cart with removed promotion removes adjustments (#10489)

This commit is contained in:
Riqwan Thamir
2024-12-08 13:13:31 +01:00
committed by GitHub
parent 864f53011b
commit f95c4e240c
5 changed files with 62 additions and 76 deletions

View File

@@ -57,68 +57,6 @@ moduleIntegrationTestRunner({
expect(response).toEqual([])
})
it("should throw error when code in items adjustment does not exist", async () => {
await createDefaultPromotion(service, {})
const error = await service
.computeActions(["PROMOTION_TEST"], {
items: [
{
id: "item_cotton_tshirt",
quantity: 1,
subtotal: 100,
adjustments: [
{
id: "test-adjustment",
code: "DOES_NOT_EXIST",
},
],
},
{
id: "item_cotton_sweater",
quantity: 5,
subtotal: 750,
},
],
})
.catch((e) => e)
expect(error.message).toContain(
"Applied Promotion for code (DOES_NOT_EXIST) not found"
)
})
it("should throw error when code in shipping adjustment does not exist", async () => {
await createDefaultPromotion(service, {})
const error = await service
.computeActions(["PROMOTION_TEST"], {
items: [
{
id: "item_cotton_tshirt",
quantity: 1,
subtotal: 100,
},
{
id: "item_cotton_sweater",
quantity: 5,
subtotal: 750,
adjustments: [
{
id: "test-adjustment",
code: "DOES_NOT_EXIST",
},
],
},
],
})
.catch((e) => e)
expect(error.message).toContain(
"Applied Promotion for code (DOES_NOT_EXIST) not found"
)
})
})
describe("when promotion is for items and allocation is each", () => {

View File

@@ -397,6 +397,7 @@ export default class PromotionModuleService
],
},
{
take: null,
relations: [
"application_method",
"application_method.target_rules",
@@ -421,19 +422,11 @@ export default class PromotionModuleService
const appliedCodes = [...appliedShippingCodes, ...appliedItemCodes]
for (const appliedCode of appliedCodes) {
const promotion = existingPromotionsMap.get(appliedCode)
const adjustments = codeAdjustmentMap.get(appliedCode) || []
const action = appliedShippingCodes.includes(appliedCode)
? ComputedActions.REMOVE_SHIPPING_METHOD_ADJUSTMENT
: ComputedActions.REMOVE_ITEM_ADJUSTMENT
if (!promotion) {
throw new MedusaError(
MedusaError.Types.INVALID_DATA,
`Applied Promotion for code (${appliedCode}) not found`
)
}
adjustments.forEach((adjustment) =>
computedActions.push({
action,