---
id: TST-COM-FUL-023
title: Same cart grants
kind: api-lifecycle
product_area: commerce
module: fulfillment
revision: 1
status: draft
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
repository: services-commerce
files:
  - modules/fulfillment/tests/e2e/same-cart-grants.e2e.spec.js
implements:
  - ATS-COM-FUL-002-13
  - ATS-COM-FUL-003-01
  - ATS-COM-FUL-003-02
  - ATS-COM-FUL-003-03
  - ATS-COM-FUL-003-06
  - ATS-COM-FUL-004-08
  - FAS-COM-FUL-01-02
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 5
isolation: >-
  Run-created workspace identifiers and fixture records in the prepared test database; concurrency
  cases own their extra connections.
evidence:
  - repository: services-commerce
    path: modules/fulfillment/tests/e2e/same-cart-grants.e2e.spec.js
    test_titles:
      - >-
        previews the T-shirt at the Member cell, granted provisionally by the membership item, and
        the membership at standard
      - >-
        places the order with the grant on the T-shirt line and the membership line named as what
        granted it
      - >-
        writes the T-shirt’s obligation with the prerequisite on the membership line and
        domain_prerequisite on its gate; the membership’s without
      - >-
        prices the T-shirt at standard beside a product whose type declares qualifies_same_order:
        false
      - >-
        prices the T-shirt at standard beside the membership whose own line says
        qualifies_same_order: false (the contract’s policy, read from the item payload until 0.3.0
        publishes)
      - >-
        refuses the placement price_changed with the member and the standard price, never honouring
        a grant that disappeared (05 §4)
      - 'previews and places the T-shirt at standard afterwards, with no grant and no prerequisite'
      - >-
        opens the membership’s gate and keeps the T-shirt’s closed prerequisite_not_met while the
        membership is not delivered
      - >-
        delivers the membership, meets the T-shirt’s prerequisite with order.prerequisite_met on the
        history, and opens its gate
      - delivers the T-shirt in turn
      - >-
        blocks the T-shirt prerequisite_failed when the membership fails for good, with the block on
        the history and the exception raised for staff (05 §4)
      - 'leaves the T-shirt line priced as it was: nothing reprices a placed line (R-04)'
    scenario_anchors:
      - >-
        services-commerce:modules/fulfillment/tests/e2e/same-cart-grants.e2e.spec.js#delivers the
        membership, meets the T-shirt’s prerequisite with order.prerequisite_met on the history, and
        opens its gate
      - >-
        services-commerce:modules/fulfillment/tests/e2e/same-cart-grants.e2e.spec.js#writes the
        T-shirt’s obligation with the prerequisite on the membership line and domain_prerequisite on
        its gate; the membership’s without
      - >-
        services-commerce:modules/fulfillment/tests/e2e/same-cart-grants.e2e.spec.js#opens the
        membership’s gate and keeps the T-shirt’s closed prerequisite_not_met while the membership
        is not delivered
      - >-
        services-commerce:modules/fulfillment/tests/e2e/same-cart-grants.e2e.spec.js#blocks the
        T-shirt prerequisite_failed when the membership fails for good, with the block on the
        history and the exception raised for staff (05 §4)
      - >-
        services-commerce:modules/fulfillment/tests/e2e/same-cart-grants.e2e.spec.js#leaves the
        T-shirt line priced as it was: nothing reprices a placed line (R-04)
      - 'services-commerce:modules/fulfillment/tests/e2e/same-cart-grants.e2e.spec.js'
---

# Same cart grants

## Verification Boundary

This suite calls the composed local HTTP handler over the prepared database. It checks same cart grants through request contracts and the enforcing security boundary.

## What This Suite Proves

The bound scenarios identify the assertions this suite contributes. Source anchors retain the exact test cases; where a capability scenario has several contributing suites, a single binding does not imply that every branch runs here.

## What It Does Not Prove

Local handler execution does not establish deployed routing, queue delivery or browser behavior. It also supplies no latest result until a qualification run records one.

## Real Dependencies and Test Doubles

The database and imported Commerce persistence services are real. Fixtures create the records owned by this run. Signed local security contexts and the composed handler exercise the request boundary. Financial facts are supplied by a local fixture provider. Queue publication uses the suite’s recording or scripted publisher.

## Must Not Be Doubled

Keep the composed handler, permission enforcement, request validation and database writes real when claiming this local API coverage. Scripted financial, queue or carrier outcomes must remain visibly separate from deployed integration evidence.
