---
id: ATS-COM-CAT-008
scope: CAP-COM-CAT-008
product_area: commerce
module: catalog
revision: 1
status: proposed
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-COM-CAT-008-01
    title: Visibility removes inactive or unavailable products
    level: unit
    proves:
      - BR-CAP-COM-CAT-008-01
    preconditions: 'Products are retired, outside sale dates or hidden from portal display'
    steps: Evaluate storefront visibility
    expected: Each exclusion returns its reason
    negative: false
    data_needs: none
    bound_to:
      - >-
        services-commerce:modules/catalog/tests/unit/storefront/storefront-visibility.spec.js#removes
        a retired or inactive product
      - >-
        services-commerce:modules/catalog/tests/unit/storefront/storefront-visibility.spec.js#removes
        a product not yet on sale, and one whose sale has ended (the end
        exclusive)
      - >-
        services-commerce:modules/catalog/tests/unit/storefront/storefront-visibility.spec.js#removes
        a product hidden from the portal
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/unit/storefront/storefront-visibility.spec.js#removes
      a retired or inactive product
  - id: ATS-COM-CAT-008-02
    title: Eligibility changes visibility after authentication
    level: api
    proves:
      - BR-CAP-COM-CAT-008-02
    preconditions: The dinner requires membership eligibility
    steps: Browse anonymously and as eligible and ineligible contacts
    expected: >-
      Anonymous browsing retains a warning, eligible browsing retains the item
      and ineligible browsing excludes it
    negative: false
    data_needs: Fixture eligibility
    bound_to:
      - >-
        services-commerce:modules/catalog/tests/integration/services/storefront/storefront-listings.integration.spec.js#is
        not evaluated for eligibility: a bound product is shown, flagged that
        signing in may change its availability
      - >-
        services-commerce:modules/catalog/tests/integration/services/storefront/storefront-listings.integration.spec.js#keeps
        the dinner for a member the binding qualifies
      - >-
        services-commerce:modules/catalog/tests/integration/services/storefront/storefront-listings.integration.spec.js#removes
        the dinner for a stranger the binding refuses (rule 4)
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/integration/services/storefront/storefront-listings.integration.spec.js#is
      not evaluated for eligibility: a bound product is shown, flagged that
      signing in may change its availability
  - id: ATS-COM-CAT-008-03
    title: Public and member browsing use different price presentations
    level: api
    proves:
      - BR-CAP-COM-CAT-008-03
      - BR-CAP-COM-CAT-008-04
      - AS-JNY-COM-CAT-003-01
    preconditions: Member pricing is marked for public display
    steps: Read as visitor and member
    expected: >-
      The visitor sees Standard 25 dollars and Member 20 dollars with a notice;
      the member receives 20-dollar pricing
    negative: false
    data_needs: Priced products
    bound_to:
      - >-
        services-commerce:modules/catalog/tests/e2e/storefront.e2e.spec.js#shows
        the audiences marked for public display beside the Standard price (D10):
        the Members price 2000, with its audience
      - >-
        services-commerce:modules/catalog/tests/e2e/storefront.e2e.spec.js#prices
        a portal member as themselves (the recorded member: the member price,
        nothing signing in could change)
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/e2e/storefront.e2e.spec.js#shows
      the audiences marked for public display beside the Standard price (D10):
      the Members price 2000, with its audience
  - id: ATS-COM-CAT-008-04
    title: Remaining display restores the shelf quantity
    level: unit
    proves:
      - BR-CAP-COM-CAT-008-07
    preconditions: The listing enables counts and has three units on hand
    steps: Request availability presentation
    expected: The response reports three remaining alongside the availability word
    negative: false
    data_needs: none
    bound_to:
      - >-
        services-commerce:modules/catalog/tests/unit/storefront/storefront-availability.spec.js#shows
        the units on hand when the listing shows its remaining count
      - >-
        services-commerce:modules/catalog/tests/unit/storefront/storefront-availability.spec.js#shows
        no count when the listing does not show its remaining count
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/unit/storefront/storefront-availability.spec.js#shows
      the units on hand when the listing shows its remaining count
  - id: ATS-COM-CAT-008-05
    title: Closed stores and excluded pages return appropriate absence
    level: api
    proves:
      - BR-CAP-COM-CAT-008-08
      - AS-JNY-COM-CAT-003-02
    preconditions: A closed store and draft listing exist
    steps: 'Read the closed store, an unknown store and the draft page'
    expected: The list is empty and both unknown or excluded pages are not found
    negative: true
    data_needs: none
    bound_to:
      - >-
        services-commerce:modules/catalog/tests/e2e/storefront.e2e.spec.js#answers
        an empty page of the closed store, 404 for an unknown store, and refuses
        a bad query 400
      - >-
        services-commerce:modules/catalog/tests/integration/services/storefront/storefront-listings.integration.spec.js#opens
        an unlisted product by its page, and is answered 404 for a draft and for
        a product another store does not sell
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/e2e/storefront.e2e.spec.js#answers
      an empty page of the closed store, 404 for an unknown store, and refuses a
      bad query 400
  - id: ATS-COM-CAT-008-06
    title: Public browsing isolates the addressed workspace
    level: api
    proves:
      - BR-CAP-COM-CAT-008-10
    preconditions: Fixtures provide two workspaces and an unavailable workspace
    steps: 'Read without context, with signed context and at an unavailable workspace'
    expected: >-
      Public reading succeeds independently of signed context, and unavailable
      workspace access fails
    negative: true
    data_needs: none
    bound_to:
      - >-
        services-commerce:modules/catalog/tests/e2e/catalog-security.e2e.spec.js#is
        served with no security context, acting in the path’s tenant alone
      - >-
        services-commerce:modules/catalog/tests/e2e/catalog-security.e2e.spec.js#is
        refused by the tenant access gate in a tenant Platform has no row for
        (403 TenantUnavailable)
      - >-
        services-commerce:modules/catalog/tests/e2e/catalog-security.e2e.spec.js#ignores
        a signed context it is handed: no diagnosis, the public prices
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/e2e/catalog-security.e2e.spec.js#is
      served with no security context, acting in the path’s tenant alone
evidence:
  - 'Pinned service inputs: test sources in scenario bindings'
  - 'Pinned console inputs: console sources in scenario bindings'
---

# Present the store’s available products: Acceptance Test Set

## Coverage

| Rule | Proof Scenario or Gap |
|---|---|
| `BR-CAP-COM-CAT-008-01` | `ATS-COM-CAT-008-01` |
| `BR-CAP-COM-CAT-008-02` | `ATS-COM-CAT-008-02` |
| `BR-CAP-COM-CAT-008-03` | `ATS-COM-CAT-008-03` |
| `BR-CAP-COM-CAT-008-04` | `ATS-COM-CAT-008-03` |
| `BR-CAP-COM-CAT-008-07` | `ATS-COM-CAT-008-04` |
| `BR-CAP-COM-CAT-008-08` | `ATS-COM-CAT-008-05` |
| `BR-CAP-COM-CAT-008-10` | `ATS-COM-CAT-008-06` |
