Aller au contenu

709 cases · 487 automated · 222 manual

CaseAreaTitleKindCoverage
AC-893-01catalogue
P29.1 Commerce mode per workspace: English safety net (P23.0) shows zero diff for a workspace with commerce off.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Commerce mode per workspace (P29.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/commerce-mode.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-893

Expected English safety net (P23.0) shows zero diff for a workspace with commerce off.

OMNIZONE-893 · P29.1

Happy pathAutomated
AC-893-02catalogue
P29.1 Commerce mode per workspace: Turning commerce on for spacecraft shows the commerce tabs; turning off hides them with…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Commerce mode per workspace (P29.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/commerce-mode.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-893

Expected Turning commerce on for spacecraft shows the commerce tabs; turning off hides them with data intact.

OMNIZONE-893 · P29.1

Happy pathAutomated
AC-893-03catalogue
P29.1 Commerce mode per workspace: Role matrix + plan gate tests (403 plan_required when the plan lacks the group).

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Commerce mode per workspace (P29.1) on the seeded data
  3. Try the refused path described in the expected result (wrong role, other tenant, invalid input or missing setup)
  4. Run node --import tsx --test test/commerce-mode.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-893

Expected Role matrix + plan gate tests (403 plan_required when the plan lacks the group).

OMNIZONE-893 · P29.1

NegativeAutomated
AC-893-04catalogue
P29.1 Commerce mode per workspace: Side table org_commerce_settings (org_settings is at the 100-column cap): enabled, enabl…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Commerce mode per workspace (P29.1) on the seeded data
  3. Repeat it at the edge the expected result names (rerun, Arabic/RTL, mobile width, limit or fallback)
  4. Run node --import tsx --test test/commerce-mode.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-893

Expected Side table org_commerce_settings (org_settings is at the 100-column cap): enabled, enabled_at, default_store_channel_id. Off for every existing workspace (backfill explicit rows with enabled=0).

OMNIZONE-893 · P29.1

Edge caseAutomated
AC-893-05catalogue
P29.1 Commerce mode per workspace: New permission group commerce in shared/permissions.ts (pages: store, promotions, shippi…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Commerce mode per workspace (P29.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/commerce-mode.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-893

Expected New permission group commerce in shared/permissions.ts (pages: store, promotions, shipping, paiements-online, online orders views) and plan entitlement in billing_plans.module_group_ids_json + BILLING_…

OMNIZONE-893 · P29.1

Happy pathAutomated
AC-893-06catalogue
P29.1 Commerce mode per workspace: Settings → Modules: 'Online store (e-commerce)' toggle, gated by plan; turning it off hi…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Commerce mode per workspace (P29.1) on the seeded data
  3. Try the refused path described in the expected result (wrong role, other tenant, invalid input or missing setup)
  4. Run node --import tsx --test test/commerce-mode.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-893

Expected Settings → Modules: 'Online store (e-commerce)' toggle, gated by plan; turning it off hides commerce UI but never deletes data.

OMNIZONE-893 · P29.1

NegativeAutomated
AC-893-07catalogue
P29.1 Commerce mode per workspace: Articles form/detail: when commerce is off, keep today's simple article screens exactly (no ne…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Commerce mode per workspace (P29.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/commerce-mode.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-893

Expected Articles form/detail: when commerce is off, keep today's simple article screens exactly (no new tabs/fields shown). When on, show the commerce tabs from #704/#744 (SEO, categories, attributes, media, channe…

OMNIZONE-893 · P29.1

Happy pathAutomated
AC-893-08catalogue
P29.1 Commerce mode per workspace: Expose commerceEnabled in bootstrap; one helper isCommerceEnabled(org) server + client.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Commerce mode per workspace (P29.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/commerce-mode.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-893

Expected Expose commerceEnabled in bootstrap; one helper isCommerceEnabled(org) server + client.

OMNIZONE-893 · P29.1

Happy pathAutomated
AC-894-01comptes
P30.1 Client address book: Existing factures/PDFs unchanged (safety net); a client with 3 addresses can pick any on…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Client address book (P30.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/shop-comptes.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-894

Expected Existing factures/PDFs unchanged (safety net); a client with 3 addresses can pick any on a commande client.

OMNIZONE-894 · P30.1

Happy pathAutomated
AC-894-02comptes
P30.1 Client address book: Table client_addresses: label, kind (billing/shipping/both), contact_name, company, phon…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Client address book (P30.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/shop-comptes.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-894

Expected Table client_addresses: label, kind (billing/shipping/both), contact_name, company, phone, email, line1, line2, city, region, postal_code, country_code, lat/lng, is_default_billing, is_default_shippin…

OMNIZONE-894 · P30.1

Happy pathAutomated
AC-894-03comptes
P30.1 Client address book: Backfill: each client's existing address text becomes one default billing+shipping addre…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Client address book (P30.1) on the seeded data
  3. Repeat it at the edge the expected result names (rerun, Arabic/RTL, mobile width, limit or fallback)
  4. Run node --import tsx --test test/shop-comptes.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-894

Expected Backfill: each client's existing address text becomes one default billing+shipping address (parsed best-effort, raw kept in line1) — clients.address column kept and mirrored from the default billing a…

OMNIZONE-894 · P30.1

Edge caseAutomated
AC-894-04comptes
P30.1 Client address book: Client detail → Addresses tab; client picker in documents can choose bill-to / ship-to a…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Client address book (P30.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/shop-comptes.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-894

Expected Client detail → Addresses tab; client picker in documents can choose bill-to / ship-to address; public API /v1/clients includes addresses (additive).

OMNIZONE-894 · P30.1

Happy pathAutomated
AC-894-05comptes
P30.1 Client address book: Country list and address format per country come from jurisdiction data, not code.

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Client address book (P30.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/shop-comptes.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-894

Expected Country list and address format per country come from jurisdiction data, not code.

OMNIZONE-894 · P30.1

Happy pathAutomated
AC-895-01channels
P29.2 Online store = a sales channel: A store channel appears in Channels with kind own_store; listing/publish/margin reports…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Online store = a sales channel (P29.2) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/commerce-store.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-895

Expected A store channel appears in Channels with kind own_store; listing/publish/margin reports work unchanged for it.

OMNIZONE-895 · P29.2

Happy pathAutomated
AC-895-02channels
P29.2 Online store = a sales channel: No new orders/listings tables were created — reuse sales_channels, channel_listings, cha…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Online store = a sales channel (P29.2) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/commerce-store.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-895

Expected No new orders/listings tables were created — reuse sales_channels, channel_listings, channel_orders.

OMNIZONE-895 · P29.2

Happy pathAutomated
AC-895-03channels
P29.2 Online store = a sales channel: Adapter contrat tests (#707) pass for the omnizone adapter.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Online store = a sales channel (P29.2) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/commerce-store.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-895

Expected Adapter contrat tests (#707) pass for the omnizone adapter.

OMNIZONE-895 · P29.2

Happy pathAutomated
AC-895-04channels
P29.2 Online store = a sales channel: Add platform omnizone to the channel adapter registry (functions/_lib/channels) as a loc…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Online store = a sales channel (P29.2) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/commerce-store.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-895

Expected Add platform omnizone to the channel adapter registry (functions/_lib/channels) as a local adapter: publish = mark channel_listings published; pull/import = no-op; orders arrive from checkout (P32.3)

OMNIZONE-895 · P29.2

Happy pathAutomated
AC-895-05channels
P29.2 Online store = a sales channel: Side table store_settings (1:1 with sales_channels where platform='omnizone'): store nam…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Online store = a sales channel (P29.2) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/commerce-store.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-895

Expected Side table store_settings (1:1 with sales_channels where platform='omnizone'): store name, default language, enabled languages, default + enabled currencies, prices include impôt flag, stock emplacement(s)

OMNIZONE-895 · P29.2

Happy pathAutomated
AC-895-06channels
P29.2 Online store = a sales channel: Channels page: 'Create online store' (only when commerce mode is on); a workspace may ha…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Online store = a sales channel (P29.2) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/commerce-store.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-895

Expected Channels page: 'Create online store' (only when commerce mode is on); a workspace may have more than one store (e.g. brands or countries). Store settings screen reuses settings form patterns.

OMNIZONE-895 · P29.2

Happy pathAutomated
AC-895-07channels
P29.2 Online store = a sales channel: Seeder: new workspaces get no store; spacecraft seed gets one in P37.5.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Online store = a sales channel (P29.2) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/commerce-store.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-895

Expected Seeder: new workspaces get no store; spacecraft seed gets one in P37.5.

OMNIZONE-895 · P29.2

Happy pathAutomated
AC-896-01storefront
P29.3 Category tree management: Tree of 3+ levels manageable; moving a parent moves its subtree; deleting a category wit…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Category tree management (P29.3) on the seeded data
  3. Carry out the flow the expected result describes
  4. Vérifier the expected result and attach the evidence to OMNIZONE-896

Expected Tree of 3+ levels manageable; moving a parent moves its subtree; deleting a category with articles asks to reassign.

OMNIZONE-896 · P29.3

Happy pathManual
AC-896-02storefront
P29.3 Category tree management: Export/import of categories round-trips (used by P36.8).

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Category tree management (P29.3) on the seeded data
  3. Carry out the flow the expected result describes
  4. Vérifier the expected result and attach the evidence to OMNIZONE-896

Expected Export/import of categories round-trips (used by P36.8).

OMNIZONE-896 · P29.3

Happy pathManual
AC-896-03storefront
P29.3 Category tree management: Extend existing article_categories (0328): description_html, image_file_id, banner_file_id,…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Category tree management (P29.3) on the seeded data
  3. Carry out the flow the expected result describes
  4. Vérifier the expected result and attach the evidence to OMNIZONE-896

Expected Extend existing article_categories (0328): description_html, image_file_id, banner_file_id, meta_title, meta_description, is_featured, show_in_menu, name_i18n/description_i18n per P27.5 convention. No se…

OMNIZONE-896 · P29.3

Happy pathManual
AC-896-04storefront
P29.3 Category tree management: Articles → Categories page: tree with drag reorder/re-parent, create/edit drawer, active to…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Category tree management (P29.3) on the seeded data
  3. Carry out the flow the expected result describes
  4. Vérifier the expected result and attach the evidence to OMNIZONE-896

Expected Articles → Categories page: tree with drag reorder/re-parent, create/edit drawer, active toggle, article counts; CRUD API /api/article-categories with keyset listing.

OMNIZONE-896 · P29.3

Happy pathManual
AC-896-05storefront
P29.3 Category tree management: Article form: multi-select categories with primary flag (article_category_links); Articles listin…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Category tree management (P29.3) on the seeded data
  3. Carry out the flow the expected result describes
  4. Vérifier the expected result and attach the evidence to OMNIZONE-896

Expected Article form: multi-select categories with primary flag (article_category_links); Articles listing filter by category (incl. descendants); bulk assign/remove categories from bulk actions.

OMNIZONE-896 · P29.3

Happy pathManual
AC-896-06storefront
P29.3 Category tree management: Channel imports (#708, #709) map platform categories into this tree (no duplicates by sl…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Category tree management (P29.3) on the seeded data
  3. Repeat it at the edge the expected result names (rerun, Arabic/RTL, mobile width, limit or fallback)
  4. Vérifier the expected result and attach the evidence to OMNIZONE-896

Expected Channel imports (#708, #709) map platform categories into this tree (no duplicates by slug/path).

OMNIZONE-896 · P29.3

Edge caseManual
AC-897-01catalogue
P29.4 Brands and tags as managed lookups (no free text): Existing articles show the same brand/tag text as before (parity vérifier); filters by brand/t…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Brands and tags as managed lookups (no free text) (P29.4) on the seeded data
  3. Carry out the flow the expected result describes
  4. Vérifier the expected result and attach the evidence to OMNIZONE-897

Expected Existing articles show the same brand/tag text as before (parity vérifier); filters by brand/tag work in Articles listing.

OMNIZONE-897 · P29.4

Happy pathManual
AC-897-02catalogue
P29.4 Brands and tags as managed lookups (no free text): Table brands (name, slug, logo_file_id, description_html, website, meta fields, name_i18…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Brands and tags as managed lookups (no free text) (P29.4) on the seeded data
  3. Repeat it at the edge the expected result names (rerun, Arabic/RTL, mobile width, limit or fallback)
  4. Vérifier the expected result and attach the evidence to OMNIZONE-897

Expected Table brands (name, slug, logo_file_id, description_html, website, meta fields, name_i18n, active); articles.brand_id; backfill: create one brand per distinct existing articles.brand text per workspace and…

OMNIZONE-897 · P29.4

Edge caseManual
AC-897-03catalogue
P29.4 Brands and tags as managed lookups (no free text): Tags lookup article_tags + links, backfilled from articles.tags_json.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Brands and tags as managed lookups (no free text) (P29.4) on the seeded data
  3. Carry out the flow the expected result describes
  4. Vérifier the expected result and attach the evidence to OMNIZONE-897

Expected Tags lookup article_tags + links, backfilled from articles.tags_json.

OMNIZONE-897 · P29.4

Happy pathManual
AC-897-04catalogue
P29.4 Brands and tags as managed lookups (no free text): Settings → Catalogs gets Brands and Tags kinds (reuse catalogs/[kind] pattern); article for…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Brands and tags as managed lookups (no free text) (P29.4) on the seeded data
  3. Carry out the flow the expected result describes
  4. Vérifier the expected result and attach the evidence to OMNIZONE-897

Expected Settings → Catalogs gets Brands and Tags kinds (reuse catalogs/[kind] pattern); article form uses pickers with inline create.

OMNIZONE-897 · P29.4

Happy pathManual
AC-898-01catalogue
P29.5 Variant matrix: Creating 3×4 colour/size matrix produces 12 articles with correct attributes, unique SKUs,…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Variant matrix (P29.5) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/variant-matrix.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-898

Expected Creating 3×4 colour/size matrix produces 12 articles with correct attributes, unique SKUs, and no stock or comptabilisation change on the parent.

OMNIZONE-898 · P29.5

Happy pathAutomated
AC-898-02catalogue
P29.5 Variant matrix: Woo/Shopify variation import (#708/#746) lands in the same structure.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Variant matrix (P29.5) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/variant-matrix.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-898

Expected Woo/Shopify variation import (#708/#746) lands in the same structure.

OMNIZONE-898 · P29.5

Happy pathAutomated
AC-898-03catalogue
P29.5 Variant matrix: Build on the #641 model (variant = real article with parent_article_id + variant_label). No se…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Variant matrix (P29.5) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/variant-matrix.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-898

Expected Build on the #641 model (variant = real article with parent_article_id + variant_label). No second variant system.

OMNIZONE-898 · P29.5

Happy pathAutomated
AC-898-04catalogue
P29.5 Variant matrix: On a parent article: pick variant-axis attributes (article_attributes.is_variant_axis) and val…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Variant matrix (P29.5) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/variant-matrix.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-898

Expected On a parent article: pick variant-axis attributes (article_attributes.is_variant_axis) and values → preview the cartesian matrix → create missing variants with generated SKU pattern (setting), inherit field…

OMNIZONE-898 · P29.5

Happy pathAutomated
AC-898-05catalogue
P29.5 Variant matrix: Variants grid: inline edit SKU, code-barres, price/compare-at, cost, weight, stock (via exis…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Variant matrix (P29.5) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/variant-matrix.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-898

Expected Variants grid: inline edit SKU, code-barres, price/compare-at, cost, weight, stock (via existing ajustement engine), active, image; disable combinations; add a value later creates only the new combination…

OMNIZONE-898 · P29.5

Happy pathAutomated
AC-898-06catalogue
P29.5 Variant matrix: variant_label derived from attribute values and kept in sync; POS variant picker (#641)…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Variant matrix (P29.5) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/variant-matrix.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-898

Expected variant_label derived from attribute values and kept in sync; POS variant picker (#641) and channel imports keep working.

OMNIZONE-898 · P29.5

Happy pathAutomated
AC-899-01catalogue
P29.7 Rich product content: XSS payloads in descriptions are stripped (tests); imported Woo/Shopify HTML renders saf…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Rich product content (P29.7) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/rich-product-content.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-899

Expected XSS payloads in descriptions are stripped (tests); imported Woo/Shopify HTML renders safely.

OMNIZONE-899 · P29.7

Happy pathAutomated
AC-899-02catalogue
P29.7 Rich product content: Rich-text editor for long_description (headings, lists, tables, links, images from article…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Rich product content (P29.7) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/rich-product-content.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-899

Expected Rich-text editor for long_description (headings, lists, tables, links, images from article media, embeds allow-list) stored as sanitized HTML; one shared sanitizer (server is authoritative; same allow-li…

OMNIZONE-899 · P29.7

Happy pathAutomated
AC-899-03catalogue
P29.7 Rich product content: Specifications block generated from attribute values (grouped, with units) plus free row…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Rich product content (P29.7) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/rich-product-content.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-899

Expected Specifications block generated from attribute values (grouped, with units) plus free rows; used by storefront and PDFs.

OMNIZONE-899 · P29.7

Happy pathAutomated
AC-899-04catalogue
P29.7 Rich product content: Short description stays plain text with length guidance; both translatable (P29.9).

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Rich product content (P29.7) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/rich-product-content.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-899

Expected Short description stays plain text with length guidance; both translatable (P29.9).

OMNIZONE-899 · P29.7

Happy pathAutomated
AC-900-01shipping
P30.2 Ship-to on sales documents: Converting devis→SO→facture keeps the same ship-to; English PDF baselines unchanged for…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Ship-to on sales documents (P30.2) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/document-print.test.ts
  5. Run node --import tsx --test test/document-ship-to.test.ts
  6. Vérifier the expected result and attach the evidence to OMNIZONE-900

Expected Converting devis→SO→facture keeps the same ship-to; English PDF baselines unchanged for documents without ship-to.

OMNIZONE-900 · P30.2

Happy pathAutomated
AC-900-02shipping
P30.2 Ship-to on sales documents: Add bill_to_address_json and ship_to_address_json snapshots (plus ship_to_address_id) to…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Ship-to on sales documents (P30.2) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/document-print.test.ts
  5. Run node --import tsx --test test/document-ship-to.test.ts
  6. Vérifier the expected result and attach the evidence to OMNIZONE-900

Expected Add bill_to_address_json and ship_to_address_json snapshots (plus ship_to_address_id) to sales_quotes, sales_orders, factures; carried through devis→order→facture conversion and channel order import.

OMNIZONE-900 · P30.2

Happy pathAutomated
AC-900-03shipping
P30.2 Ship-to on sales documents: Pick lists / packing slips / livraison documents print ship-to; livraison trips (field ops…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Ship-to on sales documents (P30.2) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/document-print.test.ts
  5. Run node --import tsx --test test/document-ship-to.test.ts
  6. Vérifier the expected result and attach the evidence to OMNIZONE-900

Expected Pick lists / packing slips / livraison documents print ship-to; livraison trips (field ops) use ship-to as the stop address.

OMNIZONE-900 · P30.2

Happy pathAutomated
AC-900-04shipping
P30.2 Ship-to on sales documents: PDF templates show ship-to only when it differs from bill-to (no change for existing doc…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Ship-to on sales documents (P30.2) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/document-print.test.ts
  5. Run node --import tsx --test test/document-ship-to.test.ts
  6. Vérifier the expected result and attach the evidence to OMNIZONE-900

Expected PDF templates show ship-to only when it differs from bill-to (no change for existing documents).

OMNIZONE-900 · P30.2

Happy pathAutomated
AC-901-01promotions
P31.2 Promotions and coupons: Migration additive/idempotent; schema validation rejects impossible conditions.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Promotions and coupons (P31.2) on the seeded data
  3. Try the refused path described in the expected result (wrong role, other tenant, invalid input or missing setup)
  4. Run node --import tsx --test test/promotions-schema.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-901

Expected Migration additive/idempotent; schema validation rejects impossible conditions.

OMNIZONE-901 · P31.2

NegativeAutomated
AC-901-02promotions
P31.2 Promotions and coupons: Tables promotions (name, kind automatic/code, reward: percent, fixed amount, prix forfaitaire…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Promotions and coupons (P31.2) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/promotions-schema.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-901

Expected Tables promotions (name, kind automatic/code, reward: percent, fixed amount, prix forfaitaire, free shipping, buy X get Y, tiered spend; conditions JSON validated by a shared schema: min sous-total/qty, article…

OMNIZONE-901 · P31.2

Happy pathAutomated
AC-901-03promotions
P31.2 Promotions and coupons: Names avoid collision with billing_coupons (platform SaaS) — document the difference in…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Promotions and coupons (P31.2) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/promotions-schema.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-901

Expected Names avoid collision with billing_coupons (platform SaaS) — document the difference in docs/COUPONS.md.

OMNIZONE-901 · P31.2

Happy pathAutomated
AC-901-04promotions
P31.2 Promotions and coupons: Backup schema + promote updated.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Promotions and coupons (P31.2) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/promotions-schema.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-901

Expected Backup schema + promote updated.

OMNIZONE-901 · P31.2

Happy pathAutomated
AC-902-01pricing
P31.8 Cross-sell, up-sell, related and frequently-bought-together: Manual links override automatic; FBT job runs within D1 limits on a 100k-line dataset.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Cross-sell, up-sell, related and frequently-bought-together (P31.8) on the seeded data
  3. Repeat it at the edge the expected result names (rerun, Arabic/RTL, mobile width, limit or fallback)
  4. Run node --import tsx --test test/article-recommendations.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-902

Expected Manual links override automatic; FBT job runs within D1 limits on a 100k-line dataset.

OMNIZONE-902 · P31.8

Edge caseAutomated
AC-902-02pricing
P31.8 Cross-sell, up-sell, related and frequently-bought-together: Article detail → Linked products: manage article_links kinds related, upsell, cross_sell, acce…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Cross-sell, up-sell, related and frequently-bought-together (P31.8) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/article-recommendations.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-902

Expected Article detail → Linked products: manage article_links kinds related, upsell, cross_sell, accessory (table exists from #745) with ordering.

OMNIZONE-902 · P31.8

Happy pathAutomated
AC-902-03pricing
P31.8 Cross-sell, up-sell, related and frequently-bought-together: Automatic fill rules per store (same category, same brand) when no manual links.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Cross-sell, up-sell, related and frequently-bought-together (P31.8) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/article-recommendations.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-902

Expected Automatic fill rules per store (same category, same brand) when no manual links.

OMNIZONE-902 · P31.8

Happy pathAutomated
AC-902-04pricing
P31.8 Cross-sell, up-sell, related and frequently-bought-together: Nightly job computes frequently-bought-together from invoiced sales lines (set-based, bo…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Cross-sell, up-sell, related and frequently-bought-together (P31.8) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/article-recommendations.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-902

Expected Nightly job computes frequently-bought-together from invoiced sales lines (set-based, bounded), stored as kind fbt with score.

OMNIZONE-902 · P31.8

Happy pathAutomated
AC-902-05pricing
P31.8 Cross-sell, up-sell, related and frequently-bought-together: Storefront API returns them per context (product page, cart).

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Cross-sell, up-sell, related and frequently-bought-together (P31.8) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/article-recommendations.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-902

Expected Storefront API returns them per context (product page, cart).

OMNIZONE-902 · P31.8

Happy pathAutomated
AC-903-01catalogue
P29.6 Product media: Product with 6 images + 1 uploaded video + 1 YouTube link renders in article detail; varian…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Product media (P29.6) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/product-media.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-903

Expected Product with 6 images + 1 uploaded video + 1 YouTube link renders in article detail; variant switch shows its images.

OMNIZONE-903 · P29.6

Happy pathAutomated
AC-903-02catalogue
P29.6 Product media: Channel image import (import-channel-images.ts) still works.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Product media (P29.6) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/product-media.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-903

Expected Channel image import (import-channel-images.ts) still works.

OMNIZONE-903 · P29.6

Happy pathAutomated
AC-903-03catalogue
P29.6 Product media: Extend article_images (0310) rather than a new table: media_kind (image / video / external_…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Product media (P29.6) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/product-media.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-903

Expected Extend article_images (0310) rather than a new table: media_kind (image / video / external_video), external_url (YouTube/Vimeo), poster_file_id, duration_s, variant_article_id (assign image to variant), alt…

OMNIZONE-903 · P29.6

Happy pathAutomated
AC-903-04catalogue
P29.6 Product media: Upload limits and accepted types are settings; storage counts against plan storage (bill…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Product media (P29.6) on the seeded data
  3. Repeat it at the edge the expected result names (rerun, Arabic/RTL, mobile width, limit or fallback)
  4. Run node --import tsx --test test/product-media.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-903

Expected Upload limits and accepted types are settings; storage counts against plan storage (billing-plan-limits).

OMNIZONE-903 · P29.6

Edge caseAutomated
AC-903-05catalogue
P29.6 Product media: Image derivatives via Cloudflare Image Resizing URLs (width set from a settings list, We…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Product media (P29.6) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/product-media.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-903

Expected Image derivatives via Cloudflare Image Resizing URLs (width set from a settings list, WebP/AVIF), used by back office thumbnails, POS tiles (#710) and the storefront.

OMNIZONE-903 · P29.6

Happy pathAutomated
AC-903-06catalogue
P29.6 Product media: Article media panel: drag reorder, set primary, assign to variants, add video by upload or…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Product media (P29.6) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/product-media.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-903

Expected Article media panel: drag reorder, set primary, assign to variants, add video by upload or URL with preview.

OMNIZONE-903 · P29.6

Happy pathAutomated
AC-904-01catalogue
P29.8 Slugs and redirects: Renaming a product keeps the old URL working via 301; duplicate slugs are rejected with…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Slugs and redirects (P29.8) on the seeded data
  3. Try the refused path described in the expected result (wrong role, other tenant, invalid input or missing setup)
  4. Run node --import tsx --test test/commerce-slugs.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-904

Expected Renaming a product keeps the old URL working via 301; duplicate slugs are rejected with a clear error.

OMNIZONE-904 · P29.8

NegativeAutomated
AC-904-02catalogue
P29.8 Slugs and redirects: One slug service for articles, categories, brands and CMS pages (P35.4): unique per (org, s…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Slugs and redirects (P29.8) on the seeded data
  3. Repeat it at the edge the expected result names (rerun, Arabic/RTL, mobile width, limit or fallback)
  4. Run node --import tsx --test test/commerce-slugs.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-904

Expected One slug service for articles, categories, brands and CMS pages (P35.4): unique per (org, store, entity kind, language); auto-generate from name (Unicode-safe, Arabic kept or transliterated per store set…

OMNIZONE-904 · P29.8

Edge caseAutomated
AC-904-03catalogue
P29.8 Slugs and redirects: Table commerce_redirects (from_path, to_path, status 301/302, hits); changing a slug wri…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Slugs and redirects (P29.8) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/commerce-slugs.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-904

Expected Table commerce_redirects (from_path, to_path, status 301/302, hits); changing a slug writes a redirect automatically; manual redirects UI under store settings.

OMNIZONE-904 · P29.8

Happy pathAutomated
AC-904-04catalogue
P29.8 Slugs and redirects: Backfill slugs for existing articles/categories (articles.slug from #745 is reused, not replac…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Slugs and redirects (P29.8) on the seeded data
  3. Repeat it at the edge the expected result names (rerun, Arabic/RTL, mobile width, limit or fallback)
  4. Run node --import tsx --test test/commerce-slugs.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-904

Expected Backfill slugs for existing articles/categories (articles.slug from #745 is reused, not replaced).

OMNIZONE-904 · P29.8

Edge caseAutomated
AC-905-01language
P29.9 Translations for catalogue content: An article with EN/FR/AR content shows the right language in article detail, export and API; n…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Translations for catalogue content (P29.9) on the seeded data
  3. Repeat it at the edge the expected result names (rerun, Arabic/RTL, mobile width, limit or fallback)
  4. Run node --import tsx --test test/catalogue-translations.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-905

Expected An article with EN/FR/AR content shows the right language in article detail, export and API; no data lost from translations_json (migration test).

OMNIZONE-905 · P29.9

Edge caseAutomated
AC-905-02language
P29.9 Translations for catalogue content: Move what #745 stored in articles.translations_json into the P27.5 columns (name_i18n, shor…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Translations for catalogue content (P29.9) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/catalogue-translations.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-905

Expected Move what #745 stored in articles.translations_json into the P27.5 columns (name_i18n, short/long description_i18n, meta_title_i18n, meta_description_i18n, slug per language via P29.8); keep translations…

OMNIZONE-905 · P29.9

Happy pathAutomated
AC-905-03language
P29.9 Translations for catalogue content: Language tabs on article, category and brand forms (enabled store languages only); 'Transla…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Translations for catalogue content (P29.9) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/catalogue-translations.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-905

Expected Language tabs on article, category and brand forms (enabled store languages only); 'Translate with AI' uses the P23.13 translation function when available.

OMNIZONE-905 · P29.9

Happy pathAutomated
AC-905-04language
P29.9 Translations for catalogue content: Channel imports fill translations (#830 contrat).

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Translations for catalogue content (P29.9) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/catalogue-translations.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-905

Expected Channel imports fill translations (#830 contrat).

OMNIZONE-905 · P29.9

Happy pathAutomated
AC-906-01comptes
P30.3 Shop client comptes: Brute-force and enumeration protections tested; an compte cannot read another compte's…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Shop client comptes (P30.3) on the seeded data
  3. Try the refused path described in the expected result (wrong role, other tenant, invalid input or missing setup)
  4. Run node --import tsx --test test/shop-comptes.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-906

Expected Brute-force and enumeration protections tested; an compte cannot read another compte's orders (tests).

OMNIZONE-906 · P30.3

NegativeAutomated
AC-906-02comptes
P30.3 Shop client comptes: Table shop_comptes (store channel, email, password_hash via existing auth helpers, emai…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Shop client comptes (P30.3) on the seeded data
  3. Try the refused path described in the expected result (wrong role, other tenant, invalid input or missing setup)
  4. Run node --import tsx --test test/shop-comptes.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-906

Expected Table shop_comptes (store channel, email, password_hash via existing auth helpers, email_verified_at, client_id, locale, marketing_consent + timestamp, status) and shop_sessions; never mixed with sta…

OMNIZONE-906 · P30.3

NegativeAutomated
AC-906-03comptes
P30.3 Shop client comptes: Login by password or email one-time code (reuse loyalty-portal OTP/token code paths and…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Shop client comptes (P30.3) on the seeded data
  3. Repeat it at the edge the expected result names (rerun, Arabic/RTL, mobile width, limit or fallback)
  4. Run node --import tsx --test test/shop-comptes.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-906

Expected Login by password or email one-time code (reuse loyalty-portal OTP/token code paths and rate limits, Turnstile on sign-up); password reset; email verification; lockout.

OMNIZONE-906 · P30.3

Edge caseAutomated
AC-906-04comptes
P30.3 Shop client comptes: Compte ↔ client link: one client per compte (created on first order or sign-up per sto…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Shop client comptes (P30.3) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/shop-comptes.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-906

Expected Compte ↔ client link: one client per compte (created on first order or sign-up per store setting).

OMNIZONE-906 · P30.3

Happy pathAutomated
AC-906-05comptes
P30.3 Shop client comptes: Storefront API endpoints for compte (used by P35.9).

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Shop client comptes (P30.3) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/shop-comptes.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-906

Expected Storefront API endpoints for compte (used by P35.9).

OMNIZONE-906 · P30.3

Happy pathAutomated
AC-907-01pricing
P31.1 Store prices: Golden tests in cents for each precedence step, TVA-inclusive lists not taxed twice (reg…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Store prices (P31.1) on the seeded data
  3. Repeat it at the edge the expected result names (rerun, Arabic/RTL, mobile width, limit or fallback)
  4. Run node --import tsx --test test/store-locales.test.ts
  5. Run node --import tsx --test test/store-prices.test.ts
  6. Vérifier the expected result and attach the evidence to OMNIZONE-907

Expected Golden tests in cents for each precedence step, TVA-inclusive lists not taxed twice (regression of #343).

OMNIZONE-907 · P31.1

Edge caseAutomated
AC-907-02pricing
P31.1 Store prices: One function resolveStorePrices(store, client, articles) on top of existing resolvePrices…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Store prices (P31.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/store-locales.test.ts
  5. Run node --import tsx --test test/store-prices.test.ts
  6. Vérifier the expected result and attach the evidence to OMNIZONE-907

Expected One function resolveStorePrices(store, client, articles) on top of existing resolvePrices: store channel liste de prix → client group liste de prix → per-listing override → sale_price window → compare_at;…

OMNIZONE-907 · P31.1

Happy pathAutomated
AC-907-03pricing
P31.1 Store prices: Impôt-inclusive/exclusive display per store using the existing TVA resolver; rounding rule…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Store prices (P31.1) on the seeded data
  3. Repeat it at the edge the expected result names (rerun, Arabic/RTL, mobile width, limit or fallback)
  4. Run node --import tsx --test test/store-locales.test.ts
  5. Run node --import tsx --test test/store-prices.test.ts
  6. Vérifier the expected result and attach the evidence to OMNIZONE-907

Expected Impôt-inclusive/exclusive display per store using the existing TVA resolver; rounding rules per devise.

OMNIZONE-907 · P31.1

Edge caseAutomated
AC-907-04pricing
P31.1 Store prices: Presentment devise: convert with exchange_rates for display; orders are charged in the…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Store prices (P31.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/store-locales.test.ts
  5. Run node --import tsx --test test/store-prices.test.ts
  6. Vérifier the expected result and attach the evidence to OMNIZONE-907

Expected Presentment devise: convert with exchange_rates for display; orders are charged in the store's devise(ies) configured in store settings.

OMNIZONE-907 · P31.1

Happy pathAutomated
AC-908-01catalogue
P31.9 Bundles and kits: Selling 2 bundles of (1×A + 2×B) moves 2×A and 4×B; COGS correct; stock↔G/L écart…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Bundles and kits (P31.9) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/article-bundles.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-908

Expected Selling 2 bundles of (1×A + 2×B) moves 2×A and 4×B; COGS correct; stock↔G/L écart zero.

OMNIZONE-908 · P31.9

Happy pathAutomated
AC-908-02catalogue
P31.9 Bundles and kits: catalog_product_type bundle/grouped (exists): components stored as article_links kind bundl…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Bundles and kits (P31.9) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/article-bundles.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-908

Expected catalog_product_type bundle/grouped (exists): components stored as article_links kind bundle_component with qty_milli; price fixed or sum-of-components minus %, set on the bundle.

OMNIZONE-908 · P31.9

Happy pathAutomated
AC-908-03catalogue
P31.9 Bundles and kits: Availability = min over components; on livraison/POS sale, stock moves are comptabilisé for com…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Bundles and kits (P31.9) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/article-bundles.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-908

Expected Availability = min over components; on livraison/POS sale, stock moves are comptabilisé for components through the existing stock engine (bundle holds no stock); chiffre d'affaires répartition across components configur…

OMNIZONE-908 · P31.9

Happy pathAutomated
AC-908-04catalogue
P31.9 Bundles and kits: Grouped products = a parent page listing child articles each added separately.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Bundles and kits (P31.9) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/article-bundles.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-908

Expected Grouped products = a parent page listing child articles each added separately.

OMNIZONE-908 · P31.9

Happy pathAutomated
AC-909-01paiements
P33.1 Paiement provider framework: Mock provider passes contrat tests incl. duplicate and out-of-order webhooks.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Paiement provider framework (P33.1) on the seeded data
  3. Repeat it at the edge the expected result names (rerun, Arabic/RTL, mobile width, limit or fallback)
  4. Run node --import tsx --test test/paiement-providers.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-909

Expected Mock provider passes contrat tests incl. duplicate and out-of-order webhooks.

OMNIZONE-909 · P33.1

Edge caseAutomated
AC-909-02paiements
P33.1 Paiement provider framework: Tables store_paiement_methods (store, provider, display name/i18n, credentials_ref via cr…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Paiement provider framework (P33.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/paiement-providers.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-909

Expected Tables store_paiement_methods (store, provider, display name/i18n, credentials_ref via credential-crypto, mode test/live, countries, currencies, min/max amount, fee rules, sort, active) and paiement_tra…

OMNIZONE-909 · P33.1

Happy pathAutomated
AC-909-03paiements
P33.1 Paiement provider framework: Adapter contrat (createPayment → redirect/embedded, handleReturn, handleWebhook with si…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Paiement provider framework (P33.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/paiement-providers.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-909

Expected Adapter contrat (createPayment → redirect/embedded, handleReturn, handleWebhook with signature verification, capture, remboursement, void) + mock provider + contrat tests, mirroring the channel adapter pat…

OMNIZONE-909 · P33.1

Happy pathAutomated
AC-909-04paiements
P33.1 Paiement provider framework: Webhook endpoint per provider, idempotent by provider event id.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Paiement provider framework (P33.1) on the seeded data
  3. Repeat it at the edge the expected result names (rerun, Arabic/RTL, mobile width, limit or fallback)
  4. Run node --import tsx --test test/paiement-providers.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-909

Expected Webhook endpoint per provider, idempotent by provider event id.

OMNIZONE-909 · P33.1

Edge caseAutomated
AC-910-01shipping
P34.1 Shipping zones, methods and rates: Lebanon (by city), GCC and rest-of-world example zones configurable without code.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Shipping zones, methods and rates (P34.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/shipping-rates.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-910

Expected Lebanon (by city), GCC and rest-of-world example zones configurable without code.

OMNIZONE-910 · P34.1

Happy pathAutomated
AC-910-02shipping
P34.1 Shipping zones, methods and rates: Tables shipping_zones (countries, regions, cities, postal patterns), shipping_methods (s…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Shipping zones, methods and rates (P34.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/shipping-rates.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-910

Expected Tables shipping_zones (countries, regions, cities, postal patterns), shipping_methods (store, zone, kind: flat / weight table / sous-total table / free over threshold / local pickup / own fleet / carrie…

OMNIZONE-910 · P34.1

Happy pathAutomated
AC-910-03shipping
P34.1 Shipping zones, methods and rates: Shipping classes become a lookup (articles.shipping_class backfilled) with per-class surcha…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Shipping zones, methods and rates (P34.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/shipping-rates.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-910

Expected Shipping classes become a lookup (articles.shipping_class backfilled) with per-class surcharges.

OMNIZONE-910 · P34.1

Happy pathAutomated
AC-910-04shipping
P34.1 Shipping zones, methods and rates: Settings → Store → Shipping screen.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Shipping zones, methods and rates (P34.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/shipping-rates.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-910

Expected Settings → Store → Shipping screen.

OMNIZONE-910 · P34.1

Happy pathAutomated
AC-911-01shipping
P34.3 Shipments: Partial expédition of 2 of 3 lines leaves the order partially delivered; stock moves only…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Shipments (P34.3) on the seeded data
  3. Repeat it at the edge the expected result names (rerun, Arabic/RTL, mobile width, limit or fallback)
  4. Run node --import tsx --test test/shipments.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-911

Expected Partial expédition of 2 of 3 lines leaves the order partially delivered; stock moves only once.

OMNIZONE-911 · P34.3

Edge caseAutomated
AC-911-02shipping
P34.3 Shipments: Table shipments (commande client, carrier, service, tracking_no, label_file_id, status, cost…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Shipments (P34.3) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/shipments.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-911

Expected Table shipments (commande client, carrier, service, tracking_no, label_file_id, status, cost_cents, shipped_at, delivered_at) linked to WMS pick_packages when WMS is used, or created by quick-ship for wor…

OMNIZONE-911 · P34.3

Happy pathAutomated
AC-911-03shipping
P34.3 Shipments: Dispatching a liste de prélèvement (dispatchPickList) creates/updates shipments; livraison posts via…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Shipments (P34.3) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/shipments.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-911

Expected Dispatching a liste de prélèvement (dispatchPickList) creates/updates shipments; livraison posts via the existing livraison flow and applySalesOrderDeliveryRollup — no second stock path.

OMNIZONE-911 · P34.3

Happy pathAutomated
AC-911-04shipping
P34.3 Shipments: Shipments panel on commande client detail; shipments listing.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Shipments (P34.3) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/shipments.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-911

Expected Shipments panel on commande client detail; shipments listing.

OMNIZONE-911 · P34.3

Happy pathAutomated
AC-912-01domains
P35.1 Store hosting and domains: A store is reachable on its free domain and on a custom domain with valid SSL; the works…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Store hosting and domains (P35.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/store-hosting.test.ts
  5. Run node --import tsx --test test/store-public-link.test.ts
  6. Vérifier the expected result and attach the evidence to OMNIZONE-912

Expected A store is reachable on its free domain and on a custom domain with valid SSL; the workspace app host is unaffected.

OMNIZONE-912 · P35.1

Happy pathAutomated
AC-912-02domains
P35.1 Store hosting and domains: Store host resolution in the Worker: platform setting for the store apex (not code) give…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Store hosting and domains (P35.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/store-hosting.test.ts
  5. Run node --import tsx --test test/store-public-link.test.ts
  6. Vérifier the expected result and attach the evidence to OMNIZONE-912

Expected Store host resolution in the Worker: platform setting for the store apex (not code) gives each store a free {store-slug}.{store-apex}; custom domains via Cloudflare for SaaS custom hostnames (DNS veri…

OMNIZONE-912 · P35.1

Happy pathAutomated
AC-912-03domains
P35.1 Store hosting and domains: Never collides with workspace hosts ({slug}.omnizone.app) or admin; follow omnizone-work…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Store hosting and domains (P35.1) on the seeded data
  3. Try the refused path described in the expected result (wrong role, other tenant, invalid input or missing setup)
  4. Run node --import tsx --test test/store-hosting.test.ts
  5. Run node --import tsx --test test/store-public-link.test.ts
  6. Vérifier the expected result and attach the evidence to OMNIZONE-912

Expected Never collides with workspace hosts ({slug}.omnizone.app) or admin; follow omnizone-workspace-domains.mdc (wildcard, no per-slug mass attach).

OMNIZONE-912 · P35.1

NegativeAutomated
AC-912-04domains
P35.1 Store hosting and domains: Store status: brouillon (password page), live, maintenance.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Store hosting and domains (P35.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/store-hosting.test.ts
  5. Run node --import tsx --test test/store-public-link.test.ts
  6. Vérifier the expected result and attach the evidence to OMNIZONE-912

Expected Store status: brouillon (password page), live, maintenance.

OMNIZONE-912 · P35.1

Happy pathAutomated
AC-913-01catalogue
P29.10 Catalogue readiness: Publishing 500 articles in bulk is set-based (no N+1); unpublished articles never appear in th…

Steps

  1. Open the Orionbelt store as a guest or one of the demo shopper personas (new, returning, vip, wholesale, international)
  2. Open Catalogue readiness (P29.10) on the seeded data
  3. Try the refused path described in the expected result (wrong role, other tenant, invalid input or missing setup)
  4. Run node --import tsx --test test/catalogue-readiness.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-913

Expected Publishing 500 articles in bulk is set-based (no N+1); unpublished articles never appear in the Storefront API.

OMNIZONE-913 · P29.10

NegativeAutomated
AC-913-02catalogue
P29.10 Catalogue readiness: Readiness checks per article per store (configurable list): price > 0, primary image, categ…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Catalogue readiness (P29.10) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/catalogue-readiness.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-913

Expected Readiness checks per article per store (configurable list): price > 0, primary image, category, short description, weight when requires_shipping, slug, stock or backorders, translations for store languag…

OMNIZONE-913 · P29.10

Happy pathAutomated
AC-913-03catalogue
P29.10 Catalogue readiness: Articles listing: readiness column/filter for a selected store; bulk publish/unpublish → ch…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Catalogue readiness (P29.10) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/catalogue-readiness.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-913

Expected Articles listing: readiness column/filter for a selected store; bulk publish/unpublish → channel_listings (published/brouillon) via the existing publish engine.

OMNIZONE-913 · P29.10

Happy pathAutomated
AC-913-04catalogue
P29.10 Catalogue readiness: Per-store overrides already in channel_listings (price_override_cents, stock_buffer_mill…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open Catalogue readiness (P29.10) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/catalogue-readiness.test.ts
  5. Vérifier the expected result and attach the evidence to OMNIZONE-913

Expected Per-store overrides already in channel_listings (price_override_cents, stock_buffer_milli) editable here.

OMNIZONE-913 · P29.10

Happy pathAutomated