Skip to content

Conversation

@WazZro
Copy link

@WazZro WazZro commented Nov 18, 2025

Summary

What — What changes are introduced in this PR?

  • Introduced a new rule attribute for product variants in the promotions system, allowing for multiselect options.
  • Updated the API route to handle product_variant, modifying the response structure to include SKU in the label when applicable.
  • Adjusted rule query configurations to accommodate the new product_variant attribute.

Why — Why are these changes relevant or necessary?

This change improves the flexibility of promotions by allowing product variants to be used as criteria.

Testing — How have these changes been tested, or how can the reviewer test the feature?

Added test to http tests. Not sure if it is enought


Checklist

Please ensure the following before requesting a review:

  • I have added a changeset for this PR
    • Every non-breaking change should be marked as a patch
    • To add a changeset, run yarn changeset and follow the prompts
  • The changes are covered by relevant tests
  • I have verified the code works as intended locally
  • I have linked the related issue(s) if applicable

Note

Adds product_variant as a promotions rule attribute and updates value-options API to return variant labels including SKU.

  • Promotions (admin API):
    • Add product_variant to items target rule attributes in rule-attributes-map.
    • Define product_variant query config in rule-query-configuration (entryPoint: product_variant, valueAttr: id).
    • Update rule value-options route to handle product_variant:
      • Fetch title, sku, and id.
      • Format labels as "<title> (SKU: <sku>)" when available.
  • Tests:
    • Extend admin promotions tests to include product_variant attribute and validate value options for variants across products.
  • Changeset:
    • Patch releases for integration-tests-http and @medusajs/medusa.

Written by Cursor Bugbot for commit eb915df. This will update automatically on new commits. Configure here.

@WazZro WazZro requested a review from a team as a code owner November 18, 2025 23:39
@changeset-bot
Copy link

changeset-bot bot commented Nov 18, 2025

🦋 Changeset detected

Latest commit: eb915df

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 74 packages
Name Type
integration-tests-http Patch
@medusajs/medusa Patch
@medusajs/test-utils Patch
@medusajs/medusa-oas-cli Patch
@medusajs/analytics Patch
@medusajs/api-key Patch
@medusajs/auth Patch
@medusajs/caching Patch
@medusajs/cart Patch
@medusajs/currency Patch
@medusajs/customer Patch
@medusajs/file Patch
@medusajs/fulfillment Patch
@medusajs/index Patch
@medusajs/inventory Patch
@medusajs/link-modules Patch
@medusajs/locking Patch
@medusajs/notification Patch
@medusajs/order Patch
@medusajs/payment Patch
@medusajs/pricing Patch
@medusajs/product Patch
@medusajs/promotion Patch
@medusajs/region Patch
@medusajs/sales-channel Patch
@medusajs/settings Patch
@medusajs/stock-location Patch
@medusajs/store Patch
@medusajs/tax Patch
@medusajs/user Patch
@medusajs/workflow-engine-inmemory Patch
@medusajs/workflow-engine-redis Patch
@medusajs/draft-order Patch
@medusajs/oas-github-ci Patch
@medusajs/cache-inmemory Patch
@medusajs/cache-redis Patch
@medusajs/event-bus-local Patch
@medusajs/event-bus-redis Patch
@medusajs/analytics-local Patch
@medusajs/analytics-posthog Patch
@medusajs/auth-emailpass Patch
@medusajs/auth-github Patch
@medusajs/auth-google Patch
@medusajs/caching-redis Patch
@medusajs/file-local Patch
@medusajs/file-s3 Patch
@medusajs/fulfillment-manual Patch
@medusajs/locking-postgres Patch
@medusajs/locking-redis Patch
@medusajs/notification-local Patch
@medusajs/notification-sendgrid Patch
@medusajs/payment-stripe Patch
@medusajs/core-flows Patch
@medusajs/framework Patch
@medusajs/js-sdk Patch
@medusajs/modules-sdk Patch
@medusajs/orchestration Patch
@medusajs/types Patch
@medusajs/utils Patch
@medusajs/workflows-sdk Patch
@medusajs/cli Patch
@medusajs/deps Patch
@medusajs/telemetry Patch
@medusajs/admin-bundler Patch
@medusajs/admin-sdk Patch
@medusajs/admin-shared Patch
@medusajs/admin-vite-plugin Patch
@medusajs/dashboard Patch
@medusajs/icons Patch
@medusajs/toolbox Patch
@medusajs/ui-preset Patch
create-medusa-app Patch
medusa-dev-cli Patch
@medusajs/ui Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel
Copy link

vercel bot commented Nov 18, 2025

@WazZro is attempting to deploy a commit to the medusajs Team on Vercel.

A member of the Team first needs to authorize it.

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR is being reviewed by Cursor Bugbot

Details

Your team is on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle for each member of your team.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

required: false,
field_type: "multiselect",
operators: Object.values(operatorsMap),
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Variant ID Path Mismatch

The product_variant attribute uses value: "items.variant.id" but the test expects "items.variant_id". Since variant_id is a direct field on cart items (not a nested relation), the path should be "items.variant_id" to match the API response structure and the test expectations.

Fix in Cursor Fix in Web

required: false,
field_type: "multiselect",
operators: Object.values(operatorsMap),
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Align Data Paths for API and Rule Evaluation

The product_variant attribute uses value: "items.variant.id" but the test expects "items.variant_id". Since variant_id is a direct field on cart items (not a nested relation), the path should be "items.variant_id" to match the API response structure and enable proper rule evaluation.

Fix in Cursor Fix in Web

- Introduced a new rule attribute for product variants in the promotions system, allowing for multiselect options.
- Updated the API route to handle product_variant, modifying the response structure to include SKU in the label when applicable.
- Adjusted rule query configurations to accommodate the new product_variant attribute.
- Enhanced integration tests to validate the new functionality.

This change improves the flexibility of promotions by allowing product variants to be used as criteria.
@WazZro WazZro force-pushed the feat/add-promotions-sku branch from 6255a9b to eb915df Compare November 20, 2025 08:54
} else {
label = title
}
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Ambiguous product variant labels in response

The generated label for product variants includes only the variant title and SKU. This results in indistinguishable options when multiple products share generic variant names (e.g., "Small"). Users cannot differentiate which product a variant belongs to without the product title in the label.

Fix in Cursor Fix in Web

} else {
label = title
}
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Ambiguous product variant labels in response

The generated label for product variants includes only the variant title and SKU. This results in indistinguishable options when multiple products share generic variant names (e.g., "Small" or "Red") or when SKUs are similar. Users cannot differentiate which product a variant belongs to without the product title explicitly included in the label.

Fix in Cursor Fix in Web

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant