تخطي إلى المحتوى

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. تحقق 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. تحقق 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. تحقق 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. تحقق 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. تحقق the expected result and attach the evidence to OMNIZONE-893

Expected New permission group commerce in shared/permissions.ts (pages: store, promotions, shipping, دفعات-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. تحقق 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: أصناف form/detail: when commerce is off, keep today's simple صنف 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. تحقق the expected result and attach the evidence to OMNIZONE-893

Expected أصناف form/detail: when commerce is off, keep today's simple صنف 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 + عميل.

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. تحقق the expected result and attach the evidence to OMNIZONE-893

Expected Expose commerceEnabled in bootstrap; one helper isCommerceEnabled(org) server + عميل.

OMNIZONE-893 · P29.1

Happy pathAutomated
AC-894-01حسابات
P30.1 عميل address book: Existing فواتير/PDFs unchanged (safety net); a عميل 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 عميل 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-حسابات.test.ts
  5. تحقق the expected result and attach the evidence to OMNIZONE-894

Expected Existing فواتير/PDFs unchanged (safety net); a عميل with 3 addresses can pick any on a طلب بيع.

OMNIZONE-894 · P30.1

Happy pathAutomated
AC-894-02حسابات
P30.1 عميل address book: Table عميل_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 عميل 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-حسابات.test.ts
  5. تحقق the expected result and attach the evidence to OMNIZONE-894

Expected Table عميل_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-03حسابات
P30.1 عميل address book: Backfill: each عميل'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 عميل 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-حسابات.test.ts
  5. تحقق the expected result and attach the evidence to OMNIZONE-894

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

OMNIZONE-894 · P30.1

Edge caseAutomated
AC-894-04حسابات
P30.1 عميل address book: عميل detail → Addresses tab; عميل 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 عميل 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-حسابات.test.ts
  5. تحقق the expected result and attach the evidence to OMNIZONE-894

Expected عميل detail → Addresses tab; عميل picker in documents can choose bill-to / ship-to address; public API /v1/عملاء includes addresses (additive).

OMNIZONE-894 · P30.1

Happy pathAutomated
AC-894-05حسابات
P30.1 عميل 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 عميل 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-حسابات.test.ts
  5. تحقق 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. تحقق 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. تحقق 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 عقد 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. تحقق the expected result and attach the evidence to OMNIZONE-895

Expected Adapter عقد 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. تحقق 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. تحقق 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 ضريبة flag, مخزون موقع(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. تحقق 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. تحقق 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. تحقق 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 أصناف 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. تحقق 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 صنف_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. تحقق the expected result and attach the evidence to OMNIZONE-896

Expected Extend existing صنف_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: أصناف → 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. تحقق the expected result and attach the evidence to OMNIZONE-896

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

OMNIZONE-896 · P29.3

Happy pathManual
AC-896-05storefront
P29.3 Category tree management: صنف form: multi-select categories with primary flag (صنف_category_links); أصناف 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. تحقق the expected result and attach the evidence to OMNIZONE-896

Expected صنف form: multi-select categories with primary flag (صنف_category_links); أصناف 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. تحقق 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 أصناف show the same brand/tag text as before (parity تحقق); 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. تحقق the expected result and attach the evidence to OMNIZONE-897

Expected Existing أصناف show the same brand/tag text as before (parity تحقق); filters by brand/tag work in أصناف 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. تحقق 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); أصناف.brand_id; backfill: create one brand per distinct existing أصناف.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 صنف_tags + links, backfilled from أصناف.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. تحقق the expected result and attach the evidence to OMNIZONE-897

Expected Tags lookup صنف_tags + links, backfilled from أصناف.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); صنف 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. تحقق the expected result and attach the evidence to OMNIZONE-897

Expected Settings → Catalogs gets Brands and Tags kinds (reuse catalogs/[kind] pattern); صنف 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 أصناف 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. تحقق the expected result and attach the evidence to OMNIZONE-898

Expected Creating 3×4 colour/size matrix produces 12 أصناف with correct attributes, unique SKUs, and no مخزون or ترحيل 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. تحقق 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 صنف with parent_صنف_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. تحقق the expected result and attach the evidence to OMNIZONE-898

Expected Build on the #641 model (variant = real صنف with parent_صنف_id + variant_label). No second variant system.

OMNIZONE-898 · P29.5

Happy pathAutomated
AC-898-04catalogue
P29.5 Variant matrix: On a parent صنف: pick variant-axis attributes (صنف_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. تحقق the expected result and attach the evidence to OMNIZONE-898

Expected On a parent صنف: pick variant-axis attributes (صنف_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, رمز شريطي, price/compare-at, cost, weight, مخزون (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. تحقق the expected result and attach the evidence to OMNIZONE-898

Expected Variants grid: inline edit SKU, رمز شريطي, price/compare-at, cost, weight, مخزون (via existing تسوية 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. تحقق 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. تحقق 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 صنف…

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. تحقق the expected result and attach the evidence to OMNIZONE-899

Expected Rich-text editor for long_description (headings, lists, tables, links, images from صنف 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. تحقق 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. تحقق 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 عرض سعر→SO→فاتورة 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. تحقق the expected result and attach the evidence to OMNIZONE-900

Expected Converting عرض سعر→SO→فاتورة 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. تحقق 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, فواتير; carried through عرض سعر→order→فاتورة 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 / تسليم documents print ship-to; تسليم 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. تحقق the expected result and attach the evidence to OMNIZONE-900

Expected Pick lists / packing slips / تسليم documents print ship-to; تسليم 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. تحقق 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. تحقق 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, سعر مقطوع…

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. تحقق the expected result and attach the evidence to OMNIZONE-901

Expected Tables promotions (name, kind automatic/code, reward: percent, fixed amount, سعر مقطوع, free shipping, buy X get Y, tiered spend; conditions JSON validated by a shared schema: min المجموع الفرعي/qty, صنف…

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. تحقق 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. تحقق 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/صنف-recommendations.test.ts
  5. تحقق 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: صنف detail → Linked products: manage صنف_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/صنف-recommendations.test.ts
  5. تحقق the expected result and attach the evidence to OMNIZONE-902

Expected صنف detail → Linked products: manage صنف_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/صنف-recommendations.test.ts
  5. تحقق 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/صنف-recommendations.test.ts
  5. تحقق 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/صنف-recommendations.test.ts
  5. تحقق 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 صنف 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. تحقق the expected result and attach the evidence to OMNIZONE-903

Expected Product with 6 images + 1 uploaded video + 1 YouTube link renders in صنف 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. تحقق 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 صنف_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. تحقق the expected result and attach the evidence to OMNIZONE-903

Expected Extend صنف_images (0310) rather than a new table: media_kind (image / video / external_video), external_url (YouTube/Vimeo), poster_file_id, duration_s, variant_صنف_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. تحقق 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. تحقق 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: صنف 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. تحقق the expected result and attach the evidence to OMNIZONE-903

Expected صنف 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. تحقق 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 أصناف, 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. تحقق the expected result and attach the evidence to OMNIZONE-904

Expected One slug service for أصناف, 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. تحقق 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 أصناف/categories (أصناف.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. تحقق the expected result and attach the evidence to OMNIZONE-904

Expected Backfill slugs for existing أصناف/categories (أصناف.slug from #745 is reused, not replaced).

OMNIZONE-904 · P29.8

Edge caseAutomated
AC-905-01language
P29.9 Translations for catalogue content: An صنف with EN/FR/AR content shows the right language in صنف 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. تحقق the expected result and attach the evidence to OMNIZONE-905

Expected An صنف with EN/FR/AR content shows the right language in صنف 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 أصناف.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. تحقق the expected result and attach the evidence to OMNIZONE-905

Expected Move what #745 stored in أصناف.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 صنف, 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. تحقق the expected result and attach the evidence to OMNIZONE-905

Expected Language tabs on صنف, 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 عقد).

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. تحقق the expected result and attach the evidence to OMNIZONE-905

Expected Channel imports fill translations (#830 عقد).

OMNIZONE-905 · P29.9

Happy pathAutomated
AC-906-01حسابات
P30.3 Shop زبون حسابات: Brute-force and enumeration protections tested; an حساب cannot read another حساب'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 زبون حسابات (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-حسابات.test.ts
  5. تحقق the expected result and attach the evidence to OMNIZONE-906

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

OMNIZONE-906 · P30.3

NegativeAutomated
AC-906-02حسابات
P30.3 Shop زبون حسابات: Table shop_حسابات (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 زبون حسابات (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-حسابات.test.ts
  5. تحقق the expected result and attach the evidence to OMNIZONE-906

Expected Table shop_حسابات (store channel, email, password_hash via existing auth helpers, email_verified_at, عميل_id, locale, marketing_consent + timestamp, status) and shop_sessions; never mixed with sta…

OMNIZONE-906 · P30.3

NegativeAutomated
AC-906-03حسابات
P30.3 Shop زبون حسابات: 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 زبون حسابات (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-حسابات.test.ts
  5. تحقق 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-04حسابات
P30.3 Shop زبون حسابات: حساب ↔ عميل link: one عميل per حساب (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 زبون حسابات (P30.3) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/shop-حسابات.test.ts
  5. تحقق the expected result and attach the evidence to OMNIZONE-906

Expected حساب ↔ عميل link: one عميل per حساب (created on first order or sign-up per store setting).

OMNIZONE-906 · P30.3

Happy pathAutomated
AC-906-05حسابات
P30.3 Shop زبون حسابات: Storefront API endpoints for حساب (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 زبون حسابات (P30.3) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/shop-حسابات.test.ts
  5. تحقق the expected result and attach the evidence to OMNIZONE-906

Expected Storefront API endpoints for حساب (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, ضريبة القيمة المضافة-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. تحقق the expected result and attach the evidence to OMNIZONE-907

Expected Golden tests in cents for each precedence step, ضريبة القيمة المضافة-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, زبون, أصناف) 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. تحقق the expected result and attach the evidence to OMNIZONE-907

Expected One function resolveStorePrices(store, زبون, أصناف) on top of existing resolvePrices: store channel لائحة أسعار → زبون group لائحة أسعار → per-listing override → sale_price window → compare_at;…

OMNIZONE-907 · P31.1

Happy pathAutomated
AC-907-03pricing
P31.1 Store prices: ضريبة-inclusive/exclusive display per store using the existing ضريبة القيمة المضافة 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. تحقق the expected result and attach the evidence to OMNIZONE-907

Expected ضريبة-inclusive/exclusive display per store using the existing ضريبة القيمة المضافة resolver; rounding rules per عملة.

OMNIZONE-907 · P31.1

Edge caseAutomated
AC-907-04pricing
P31.1 Store prices: Presentment عملة: 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. تحقق the expected result and attach the evidence to OMNIZONE-907

Expected Presentment عملة: convert with exchange_rates for display; orders are charged in the store's عملة(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; مخزون↔G/L انحراف…

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/صنف-bundles.test.ts
  5. تحقق 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; مخزون↔G/L انحراف zero.

OMNIZONE-908 · P31.9

Happy pathAutomated
AC-908-02catalogue
P31.9 Bundles and kits: catalog_product_type bundle/grouped (exists): components stored as صنف_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/صنف-bundles.test.ts
  5. تحقق the expected result and attach the evidence to OMNIZONE-908

Expected catalog_product_type bundle/grouped (exists): components stored as صنف_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 تسليم/POS sale, مخزون moves are مرحّل 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/صنف-bundles.test.ts
  5. تحقق the expected result and attach the evidence to OMNIZONE-908

Expected Availability = min over components; on تسليم/POS sale, مخزون moves are مرحّل for components through the existing مخزون engine (bundle holds no مخزون); إيرادات توزيع across components configur…

OMNIZONE-908 · P31.9

Happy pathAutomated
AC-908-04catalogue
P31.9 Bundles and kits: Grouped products = a parent page listing child أصناف 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/صنف-bundles.test.ts
  5. تحقق the expected result and attach the evidence to OMNIZONE-908

Expected Grouped products = a parent page listing child أصناف each added separately.

OMNIZONE-908 · P31.9

Happy pathAutomated
AC-909-01دفعات
P33.1 دفعة provider framework: Mock provider passes عقد tests incl. duplicate and out-of-order webhooks.

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open دفعة 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/دفعة-providers.test.ts
  5. تحقق the expected result and attach the evidence to OMNIZONE-909

Expected Mock provider passes عقد tests incl. duplicate and out-of-order webhooks.

OMNIZONE-909 · P33.1

Edge caseAutomated
AC-909-02دفعات
P33.1 دفعة provider framework: Tables store_دفعة_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 دفعة provider framework (P33.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/دفعة-providers.test.ts
  5. تحقق the expected result and attach the evidence to OMNIZONE-909

Expected Tables store_دفعة_methods (store, provider, display name/i18n, credentials_ref via credential-crypto, mode test/live, countries, currencies, min/max amount, fee rules, sort, active) and دفعة_tra…

OMNIZONE-909 · P33.1

Happy pathAutomated
AC-909-03دفعات
P33.1 دفعة provider framework: Adapter عقد (createPayment → redirect/embedded, handleReturn, handleWebhook with si…

Steps

  1. Sign in to the Orionbelt workspace as the admin demo user
  2. Open دفعة provider framework (P33.1) on the seeded data
  3. Carry out the flow the expected result describes
  4. Run node --import tsx --test test/دفعة-providers.test.ts
  5. تحقق the expected result and attach the evidence to OMNIZONE-909

Expected Adapter عقد (createPayment → redirect/embedded, handleReturn, handleWebhook with signature verification, capture, استرداد, void) + mock provider + عقد tests, mirroring the channel adapter pat…

OMNIZONE-909 · P33.1

Happy pathAutomated
AC-909-04دفعات
P33.1 دفعة 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 دفعة 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/دفعة-providers.test.ts
  5. تحقق 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. تحقق 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. تحقق 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 / المجموع الفرعي 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 (أصناف.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. تحقق the expected result and attach the evidence to OMNIZONE-910

Expected Shipping classes become a lookup (أصناف.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. تحقق 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 شحنة of 2 of 3 lines leaves the order partially delivered; مخزون 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. تحقق the expected result and attach the evidence to OMNIZONE-911

Expected Partial شحنة of 2 of 3 lines leaves the order partially delivered; مخزون moves only once.

OMNIZONE-911 · P34.3

Edge caseAutomated
AC-911-02shipping
P34.3 Shipments: Table shipments (طلب بيع, 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. تحقق the expected result and attach the evidence to OMNIZONE-911

Expected Table shipments (طلب بيع, 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 لائحة التجهيز (dispatchPickList) creates/updates shipments; تسليم 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. تحقق the expected result and attach the evidence to OMNIZONE-911

Expected Dispatching a لائحة التجهيز (dispatchPickList) creates/updates shipments; تسليم posts via the existing تسليم flow and applySalesOrderDeliveryRollup — no second مخزون path.

OMNIZONE-911 · P34.3

Happy pathAutomated
AC-911-04shipping
P34.3 Shipments: Shipments panel on طلب بيع 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. تحقق the expected result and attach the evidence to OMNIZONE-911

Expected Shipments panel on طلب بيع 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. تحقق 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. تحقق 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. تحقق 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: مسودة (password page), live, صيانة.

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. تحقق the expected result and attach the evidence to OMNIZONE-912

Expected Store status: مسودة (password page), live, صيانة.

OMNIZONE-912 · P35.1

Happy pathAutomated
AC-913-01catalogue
P29.10 Catalogue readiness: Publishing 500 أصناف in bulk is set-based (no N+1); unpublished أصناف 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. تحقق the expected result and attach the evidence to OMNIZONE-913

Expected Publishing 500 أصناف in bulk is set-based (no N+1); unpublished أصناف never appear in the Storefront API.

OMNIZONE-913 · P29.10

NegativeAutomated
AC-913-02catalogue
P29.10 Catalogue readiness: Readiness checks per صنف 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. تحقق the expected result and attach the evidence to OMNIZONE-913

Expected Readiness checks per صنف per store (configurable list): price > 0, primary image, category, short description, weight when requires_shipping, slug, مخزون or backorders, translations for store languag…

OMNIZONE-913 · P29.10

Happy pathAutomated
AC-913-03catalogue
P29.10 Catalogue readiness: أصناف 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. تحقق the expected result and attach the evidence to OMNIZONE-913

Expected أصناف listing: readiness column/filter for a selected store; bulk publish/unpublish → channel_listings (published/مسودة) 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, مخزون_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. تحقق the expected result and attach the evidence to OMNIZONE-913

Expected Per-store overrides already in channel_listings (price_override_cents, مخزون_buffer_milli) editable here.

OMNIZONE-913 · P29.10

Happy pathAutomated