---
id: JNY-COM-CAT-003
title: A visitor browses the public store offering
feature: FEAT-COM-CAT-02
product_area: commerce
module: catalog
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: observed
supersedes: []
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
actor: ACT-COM-006
goal: Inspect publicly available products and prices before signing in.
capabilities:
  - CAP-COM-CAT-008
  - CAP-COM-CAT-013
  - CAP-COM-CAT-006
screens: []
steps:
  - 'n': 1
    surface: listPublicStorefrontListings
    action: Browse Bookstore without authenticating
    capability: CAP-COM-CAT-008
    expected: >-
      The public list contains selling published items in configured
      merchandising order
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/e2e/storefront.e2e.spec.js#answers
      200 with the selling, published listings in merchandiser order (featured
      first), the count, no cursor and no diagnosis
  - 'n': 2
    surface: getPublicStorefrontListing
    action: Inspect the guide’s individual page
    capability: CAP-COM-CAT-008
    expected: >-
      The page response includes Standard and public Member prices with a
      sign-in notice
    provenance: test
    source: >-
      services-commerce:modules/catalog/tests/e2e/storefront.e2e.spec.js#shows
      the standard price with the member price beside it, what signing in may
      change, and availability in words
  - 'n': 3
    surface: createPublicPriceQuote
    action: Request public prices for the guide and a draft product
    capability: CAP-COM-CAT-013
    expected: >-
      The guide receives Standard pricing and the draft fails publication
      validation
    provenance: test
    source: >-
      services-commerce:modules/pricing/tests/e2e/price-quote-public-sale.e2e.spec.js#refuses
      a draft product to an anonymous caller: 400 product_not_published, naming
      the store
alternates:
  - from_step: 2
    condition: The visitor requests an unlisted item’s individual address
    path: Direct-page access and public quoting succeed
    outcome: The item remains reachable outside the public list
    provenance: test
    source: >-
      services-commerce:modules/pricing/tests/e2e/price-quote-public-sale.e2e.spec.js#prices
      an unlisted product, which the product page opens by its link
  - from_step: 1
    condition: The store is inactive
    path: Browsing returns an empty item collection
    outcome: No store items are returned
    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
failures:
  - from_step: 3
    condition: Publication exists without admitted assortment membership
    path: The price fails validation as not in the store’s assortment
    outcome: The visitor does not permit buy it in this store
    provenance: test
    source: >-
      services-commerce:modules/pricing/tests/e2e/price-quote-public-sale.e2e.spec.js#refuses
      a published product outside the store’s category assortment: 400
      product_not_in_store_assortment, naming the store
rules_in_play:
  - BR-CAP-COM-CAT-008-01
  - BR-CAP-COM-CAT-008-03
  - BR-CAP-COM-CAT-008-10
  - BR-CAP-COM-CAT-013-07
  - BR-CAP-COM-CAT-013-08
  - BR-CAP-COM-CAT-006-02
  - BR-CAP-COM-CAT-006-03
assertions:
  - id: AS-JNY-COM-CAT-003-01
    statement: >-
      Public pricing includes only selected public audiences alongside Standard
      and the sign-in notice.
    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: AS-JNY-COM-CAT-003-02
    statement: Draft listing state excludes both public pages and shelf presentation.
    provenance: test
    source: >-
      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
  - id: AS-JNY-COM-CAT-003-03
    statement: >-
      Public-sale guards reject draft and excluded products while authorized
      staff receive their quote exemption.
    provenance: test
    source: >-
      services-commerce:modules/pricing/tests/e2e/price-quote-public-sale.e2e.spec.js#prices
      the draft and the out-of-assortment product for staff holding
      commerce.orders.create: Standard 6000 and 15000
e2e_policy: optional
e2e_reason: >-
  No portal screen exists while Andrew retains portal work; the public behaviour
  is proved at the API, and a browser test belongs to the portal build.
evidence:
  - 'Pinned service inputs: storefront and public quote end-to-end tests'
proved_by: []
---

# A visitor browses the public store offering

## Story

The visitor opens the store without authentication and receives the public assortment. They inspect a product page with Standard and selected public audience prices. A sign-in notice explains that their own qualification may change the result. Requests for draft or excluded products fail the public-sale checks. Direct-page access to an unlisted item follows its separate visibility treatment.
