fix(promotion): validate rules accurately when attribute is scoped by context (#8655)

This commit is contained in:
Riqwan Thamir
2024-08-19 15:38:42 +02:00
committed by GitHub
parent a66bd3bd6b
commit 4791d1d775
6 changed files with 66 additions and 9 deletions
@@ -36,7 +36,13 @@ export function getComputedActionsForBuyGet(
const validQuantity = MathBN.sum(
...itemsContext
.filter((item) => areRulesValidForContext(buyRules, item))
.filter((item) =>
areRulesValidForContext(
buyRules,
item,
ApplicationMethodTargetType.ITEMS
)
)
.map((item) => item.quantity)
)
@@ -49,7 +55,13 @@ export function getComputedActionsForBuyGet(
}
const validItemsForTargetRules = itemsContext
.filter((item) => areRulesValidForContext(targetRules, item))
.filter((item) =>
areRulesValidForContext(
targetRules,
item,
ApplicationMethodTargetType.ITEMS
)
)
.filter((item) => isPresent(item.subtotal) && isPresent(item.quantity))
.sort((a, b) => {
const aPrice = MathBN.div(a.subtotal, a.quantity)
@@ -5,6 +5,7 @@ import {
} from "@medusajs/types"
import {
ApplicationMethodAllocation,
ApplicationMethodTargetType,
ComputedActions,
MathBN,
MedusaError,
@@ -172,7 +173,8 @@ function getValidItemsForPromotion(
const isQuantityPresent = "quantity" in item
const isPromotionApplicableToItem = areRulesValidForContext(
promotion?.application_method?.target_rules!,
item
item,
ApplicationMethodTargetType.ITEMS
)
return (
@@ -28,7 +28,8 @@ export function getComputedActionsForShippingMethods(
for (const shippingMethodContext of shippingMethodApplicationContext) {
const isPromotionApplicableToItem = areRulesValidForContext(
promotion.application_method?.target_rules!,
shippingMethodContext
shippingMethodContext,
ApplicationMethodTargetType.SHIPPING_METHODS
)
if (!isPromotionApplicableToItem) {