Skip to content

feat: external tax mode#388

Merged
mvantellingen merged 2 commits into
mainfrom
feat/external-tax
May 13, 2026
Merged

feat: external tax mode#388
mvantellingen merged 2 commits into
mainfrom
feat/external-tax

Conversation

@BramKaashoek

Copy link
Copy Markdown
Member

No description provided.

@changeset-bot

changeset-bot Bot commented May 13, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f34163a

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

This PR includes changesets to release 1 package
Name Type
@labdigital/commercetools-mock Minor

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

@mvantellingen mvantellingen self-requested a review May 13, 2026 14:10
@mvantellingen mvantellingen merged commit f6eaee4 into main May 13, 2026
17 checks passed
@mvantellingen mvantellingen deleted the feat/external-tax branch May 13, 2026 14:10
BramKaashoek pushed a commit that referenced this pull request May 13, 2026
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

`main` is currently in **pre mode** so this branch has prereleases
rather than normal releases. If you want to exit prereleases, run
`changeset pre exit` on `main`.

⚠️⚠️⚠️⚠️⚠️⚠️

# Releases
## @labdigital/commercetools-mock@3.0.0-beta.4

### Minor Changes

- [#388](#388)
[`f053fb9`](f053fb9)
Thanks [@BramKaashoek](https://github.com/BramKaashoek)! - Add support
for `External` and `ExternalAmount` tax modes on carts.

    ### New behavior

- **`External` tax mode** — `LineItem`, `CustomLineItem`, and shipping
methods can now carry an `externalTaxRate`:
- `createCart` honors `LineItemDraft.externalTaxRate`,
`CustomLineItemDraft.externalTaxRate`, and
`CartDraft.externalTaxRateForShippingMethod`.
- `addLineItem`, `addCustomLineItem`, and
`setShippingMethod`/`setCustomShippingMethod` accept `externalTaxRate`.
- New update actions: `setLineItemTaxRate`, `setCustomLineItemTaxRate`,
`setShippingMethodTaxRate`.
- **`ExternalAmount` tax mode** — explicit gross amounts can be supplied
per item and at the cart level:
- New update actions: `setLineItemTaxAmount`,
`setCustomLineItemTaxAmount`, `setShippingMethodTaxAmount`,
`setCartTotalTax`.
- In this mode the cart's `taxedPrice` is whatever `setCartTotalTax`
last set; it is no longer aggregated from line items.
`taxedShippingPrice` continues to mirror `shippingInfo.taxedPrice`.
- All tax calculations now respect `cart.taxRoundingMode` (`HalfEven` /
`HalfUp` / `HalfDown`) instead of always using `Math.round`.

    ### Cart total recomputation after update actions

`CartUpdateHandler.apply` now recomputes `cart.taxedPrice` and
`cart.taxedShippingPrice` after every update batch (except in
`ExternalAmount` mode, where the cart total is authoritative via
`setCartTotalTax`).

This fixes a pre-existing latent bug: previously these fields were only
computed once during `create()` and were never refreshed after update
actions, so e.g. running `setShippingMethod` after cart creation would
leave the cart-level aggregate stale. It didn't show up before because
`LineItem.taxedPrice` was never populated in any mode, so the aggregate
had no contributors that could drift. With the new tax-mode work, line
items and custom line items now actually carry `taxedPrice`, which made
the gap observable and required fixing.

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@github-actions github-actions Bot mentioned this pull request Jun 2, 2026
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.

2 participants