Skip to content

Koti Sample Data Product Reference

This page lists where to find a working example of each Magento product property in the Koti sample data. There is one product per property combination, together with the URL path to it, so you can go straight to something that exercises the behaviour you are working on.

Using the Paths

Append a path from the tables below to the base URL of your development instance. With a base URL of https://mystore.test/, the path atlas-pouf.html becomes https://mystore.test/atlas-pouf.html.

Product paths are flat ({url_key}.html). Category paths include the whole ancestor chain, for example more/test-scenarios.html.

URL keys are not derived from SKUs

In this catalog the URL key and the SKU often differ: the product chair-mjuk lives at mjuk-dining-chair.html. Always copy the path from this page rather than building one from a SKU.

If the sample data was installed with --keep-luma, the Koti catalog lives on a separate website and the paths above resolve on the Koti store view only. Append ?___store=koti (for example atlas-pouf.html?___store=koti), or prefix the path with /koti/ if store codes in URLs are enabled. See Alongside the Luma sample data.

Configurable variants have no URL of their own

Variants are set to Not Visible Individually, so they are reached through the parent product and a swatch. Rows below that describe a variant give the parent's path plus the swatch to select.

Finding Test Products

Most products that exist to exercise a property rather than to sell are collected in one category, More / Test Scenarios at more/test-scenarios.html. It is hidden from the main menu (include_in_menu=0), so open that path directly to browse them all in a single listing.

Requires koti-sample-data 1.0.24 or newer

The More / Test Scenarios category and the first nine products in it were added in koti-sample-data 1.0.24. On earlier versions neither the category nor these products exist, even though several tables below reference them:

  • Grov Serveware Collection, grov-serveware-collection.html
  • Grov Serving Bowl, grov-serving-bowl.html
  • Grov Table Setting, grov-table-setting.html
  • Ljus Evening Set, ljus-evening-set.html
  • Loft Home Office, loft-home-office.html
  • Nook Reading Corner, nook-reading-corner.html
  • Nook Side Table, nook-side-table.html
  • Verkstad Workshop Kit, verkstad-workshop-kit.html
  • Vila Lounge Chair, vila-lounge-chair.html

A tenth product joined the category in 1.0.25, Seasons Art Print Series at seasons-art-print-series.html. It is the only downloadable whose links are purchased separately, so on earlier versions there is no product exercising that behaviour at all.

Running bin/magento hyva:sampledata:deploy also updates the sample data packages to the latest version. See Reinstall / Update.

Their short_description opens with Test scenario: <what it exercises>. so the purpose is visible both in the admin product grid and on the storefront:

Test scenario: fixed-price bundle on sale, with percentage-of-parent selection prices. Desk, chair and task light priced as a set, currently reduced.

The three tier-price hosts are ordinary catalog products, live outside that category and carry no such prefix, so this page is the only way to find them. See Categories for the other categories worth testing against.

Product Types

Property Product Path
Simple Atlas Pouf (atlas-pouf) atlas-pouf.html
Configurable, one axis Mjuk Dining Chair (chair-mjuk) mjuk-dining-chair.html
Configurable, two axes Meridian Modular Sofa (sofa-meridian) meridian-modular-sofa.html
Grouped Terra Stoneware Collection (dinnerware-terra-collection) terra-stoneware-collection.html
Bundle, dynamic price Lighting Trio Bundle (bundle-lighting-trio) lighting-trio-bundle.html
Bundle, fixed price Nook Reading Corner (bundle-nook-corner) nook-reading-corner.html
Virtual 60-Minute Design Consultation (consult-60min) 60-minute-design-consultation.html
Downloadable Fluted Pen Holder (3d-pen-holder) fluted-pen-holder.html
Configurable of simple children Koti Digital Gift Card (giftcard-koti) koti-digital-gift-card.html

The gift card is a plain configurable whose five children are simple, not virtual, with denominations 50–1000 on a gift_card_amount axis.

Configurable Products and Swatches

Property Product Path
Axis: color, hex visual swatch Meridian Modular Sofa meridian-modular-sofa.html
Axis: size, text swatch Ovale Dining Table (table-ovale) ovale-dining-table.html
Axis: fabric, image visual swatch Vila Lounge Chair (chair-vila) vila-lounge-chair.html
Axis: gift_card_amount Koti Digital Gift Card koti-digital-gift-card.html
Two axes combined (size + color) Haven Platform Bed (bed-haven) haven-platform-bed.html
Uniform child prices, so a single price Bouclé Cushion Cover (cushion-boucle) boucle-cushion-cover.html
Varying child prices, so "As low as" Meridian Modular Sofa (650–3400) meridian-modular-sofa.html
Variant not visible individually any child, for example chair-vila-velvet reach it via the parent swatch

Child price spreads are uniform on cushion-boucle (55), chair-mjuk (520), bedding-linen (195) and table-side-nook (420), and varying on sofa-meridian (650–3400), bed-haven (2400–2800), table-ovale (1400–2200), chair-vila (980–1180) and giftcard-koti (50–1000).

Magento 2 has no per-option price adjustment, so a variant's price is simply its own price. The two spreads above are therefore the whole story.

Swatches appear in category listings only when both the store configuration catalog/frontend/show_swatches_in_product_list (set by the Hyvä theme module) and the attribute's own used_in_product_listing flag are set. Magento's stock color attribute ships with that flag off.

A swatch click shows a different image in the listing than on the product page

This is by design. The listing swaps in the gallery entry carrying the variant's image (base) role, its hero shot. The product page activates the variant's lowest-positioned gallery entry, its lived-in shot.

Pricing

Property Product Path
special_price, absolute amount Vila Lounge Chair, Velvet, 1080 to 920 vila-lounge-chair.html
special_price on a fixed bundle Loft Home Office, 1450 to 1305 loft-home-office.html
special_price on a dynamic bundle Ljus Evening Set, 12% off the total ljus-evening-set.html
Tier price, fixed amounts, all groups Mjuk Mohair Throw (throw-mohair) mjuk-mohair-throw.html
Tier price, percentages, all groups Nesting Serving Bowls (bowls-serving-stoneware) nesting-serving-bowls.html
Tier price, one customer group only Executive Desk Pad (desk-pad-leather) executive-desk-pad.html
MSRP Cirkel Dining Table (table-dining-round), 1750 cirkel-dining-table.html
Free (price 0) Material Care Guide (guide-material-care) material-care-guide.html

The tier price shapes are:

  • throw-mohair: qty 3 to 225 and qty 5 to 210, as fixed amounts for all groups
  • bowls-serving-stoneware: qty 2 at −10% and qty 6 at −15%, as percentages for all groups
  • desk-pad-leather: qty 1 at −15% for the Wholesale customer group only, so it is invisible to a guest. Log in as a wholesale customer to see it.

special_price is not read the same way for every product type

On a bundle it is a percentage of the price: Magento\Bundle\Model\Product\Price::calculateSpecialPrice() computes price * (special_price / 100), so 90 means 10% off. On every other product type it is an absolute amount. A bundle value above 100 is silently discarded and yields no discount at all.

Promotions

Catalog price rules apply automatically, with no coupon, and are visible to a guest:

Property Product Path
Rule on a simple product, 10% Sylvan Armchair (sylvan-armchair) sylvan-armchair.html
Rule on a virtual product, 10% 30-Minute Design Consultation (consult-30min) 30-minute-design-consultation.html
Rule on a configurable variant, 12% Meridian, 3-Seat / Charcoal meridian-modular-sofa.html
Rule on a downloadable, 15% Fluted Pen Holder (3d-pen-holder) fluted-pen-holder.html
Rule on a grouped child, 10% Terra Dinner Plate (dinnerware-terra-dinner-plate) terra-dinner-plate.html
Rule on a bundle child, 10% Norrland Throw (throw-chunky-knit) norrland-throw.html
Rule on a whole category, 5% Vases & Vessels accessories/vases-vessels.html

Cart price rules need their coupon entered at checkout:

Coupon Effect Where to try it
FREESHIP Free shipping, any order any cart
HALF50 50% off the cart any cart
CHAIR6FOR5 Buy 5, get the 6th free Kaari Dining Chair, kaari-dining-chair.html, qty 6 or more
PRINT4FREE 100% off one category 3D Printable Models, more/3d-printable-models.html
TIME 100% off one SKU Tid Clock, tid-clock-walnut-brass.html
ALLFREE 100% off everything plus free shipping development utility, no conditions

Stock

Property Product Path
Out of stock, standalone Grov Serving Bowl (bowl-grov-serving) grov-serving-bowl.html
Out-of-stock variant in a configurable Nook Side Table, Sage nook-side-table.html
Out-of-stock member in a grouped product Grov Serveware Collection grov-serveware-collection.html
Out-of-stock selection in a required bundle option Grov Table Setting grov-table-setting.html
Out-of-stock selection in an optional bundle option Grov Table Setting, Extras grov-table-setting.html
In stock everything else

Only two products carry is_in_stock=0: bowl-grov-serving and table-side-nook-sage. Configurable, bundle and grouped parents show qty=0 with is_in_stock=1, which is normal, because their availability comes from their children.

Out-of-stock products appear in listings only because cataloginventory/options/show_out_of_stock = 1, which is set by the Hyvä theme module. Under --keep-luma that setting is scoped to the Koti store view, so the Luma store keeps Magento's default of hiding them and a single installation demonstrates both behaviours.

A downloadable product cannot be out of stock

The sample data resets downloadable products to qty=9999, is_in_stock=1, manage_stock=0 after import, so there is no out-of-stock downloadable to test against.

Bundles

Verkstad Workshop Kit (bundle-workshop-kit, verkstad-workshop-kit.html) carries all four widget types, each once required and once optional. That gives eight options on one page, each named after what it is:

Option Widget Required Child type
Required Radio radio yes simple
Optional Radio radio no simple
Required Checkbox checkbox yes downloadable
Optional Checkbox checkbox no downloadable
Required Select select yes simple
Optional Select select no downloadable
Required Multiselect multi yes downloadable
Optional Multiselect multi no virtual
Property Product Path
price_type=fixed, euro selection prices Nook Reading Corner, +180 / +70 nook-reading-corner.html
price_type=fixed, percentage selection prices Loft Home Office loft-home-office.html
price_type=dynamic Lighting Trio Bundle lighting-trio-bundle.html
shipment_type=together Dining Set Bundle (bundle-dining-set) dining-set-bundle.html
shipment_type=separately every other bundle
Downloadable children Desk Accessories Collection desk-accessories-collection-3d.html
Virtual children Designer Starter Kit (bundle-designer-kit) bundle-designer-kit.html
Configurable parent expanded to variants Living Room Essentials Bundle bundle-living-essentials.html

bundle-loft-office and bundle-nook-corner are the only two bundles with price_type=fixed, and bundle-dining-set is the only one shipping together.

A bundle price box is always a range

Whenever its selections carry prices, a bundle renders From <cheapest> To <dearest>, whether it is fixed price or not. What distinguishes a fixed-price bundle is that the floor equals the bundle's own price attribute (1290 for bundle-nook-corner), whereas a dynamic bundle has no own price and its floor is the sum of the cheapest selections. Do not read "fixed price" as "no range".

Magento identifies a bundle option by name, so two options sharing a name merge into one. A downloadable child works inside a bundle only with links_purchased_separately=0; with 1 the bundle's add-to-cart fails with "Please specify product link(s)." The single product carrying 1 is Seasons Art Print Series, see Links Purchased Separately.

Grouped Products

Property Product Path
Members sold individually too Terra Stoneware Collection, 4 members terra-stoneware-collection.html
Members from the same module Trio Brass Candlestick Collection, 3 members trio-brass-candlestick-collection.html
Member out of stock Grov Serveware Collection, 3 members grov-serveware-collection.html

Downloadable Products

Property Product Path
Paid download Fluted Pen Holder, 15 fluted-pen-holder.html
Free download Material Care Guide, 0 material-care-guide.html
Multi-page generated PDF Koti Seasonal Lookbook, 64 pages koti-seasonal-lookbook.html
Cheapest download Cable Clips Set, 8 cable-clips-set.html
Samples Rounded Wall Hooks Set (3d-wall-hooks), 16 rounded-wall-hooks-set.html
Selectable links (links_purchased_separately=1) Seasons Art Print Series (print-seasons-series) seasons-art-print-series.html

All 21 downloadable products use file-based links. URL-based links are avoided because they trip Magento's downloadable_domains allow-list.

All but one carry links_purchased_separately=0, so their single link is included automatically and no link checkbox renders. Seasons Art Print Series is the exception, and it exists to exercise the opposite.

Samples are files a visitor may download without buying, and Rounded Wall Hooks Set is the only product that carries any. It has two, listed under the group heading Preview: "Print Settings & Mounting Preview" (a PDF) and "Printed Result" (a JPG). Both are file-based, like the links.

The samples were added in koti-sample-data 1.0.24. Earlier versions ship the product itself, but without any samples, so the samples block does not render.

Seasons Art Print Series is the only product rendering a list of selectable links, so it is the one to test that block against. Its own price is 0 and the three links under the group heading Downloads carry the price: 18, 18 and 48. The total is whatever the customer selects, so picking the first and third puts 66 in the cart. It was added in koti-sample-data 1.0.25.

With nothing selected, the Hyvä theme refuses in the browser with "Please select one of the options." and never submits the form. Magento's own "Please specify product link(s)." appears only when the form is posted without that client-side validation.

Never use this product as a bundle selection

A bundle containing a separately purchased downloadable fails add-to-cart with "Please specify product link(s)." Every other downloadable is safe as a bundle child precisely because it carries links_purchased_separately=0.

Virtual Products

Property Product Path
Service, no shipping step 60-Minute Design Consultation 60-minute-design-consultation.html
Service with a catalog rule 30-Minute Design Consultation 30-minute-design-consultation.html
Warranty 3-Year Extended Warranty (warranty-3year) warranty-3year.html
Protection plan Furniture Protection Plan protection-furniture.html

All seven virtual products use the Services attribute set.

Attribute Sets

One product per set, for all nine sets that are in use:

Set Products Example Path
Furniture 83 Atlas Pouf atlas-pouf.html
Accessories 40 Sten Travertine Bookends sten-travertine-bookends.html
Downloadable 21 Geometric Bookends Pair geometric-bookends-pair.html
Textiles 17 Linen Duvet Set linen-duvet-set.html
Lighting 11 Lighting Trio Bundle lighting-trio-bundle.html
Services 7 30-Minute Design Consultation 30-minute-design-consultation.html
Gift Cards 6 Koti Digital Gift Card koti-digital-gift-card.html
Fireplace 4 Orb Floor Fireplace orb-floor-fireplace.html
Default 3 Home Decor Print Pack home-decor-print-pack-3d.html

The three products still on Default are all bundles (bundle-decor-3d, bundle-desk-3d and bundle-designer-kit), which is useful if you need a product whose attribute set carries no Koti-specific attributes.

Imagery

Property Product Path
Four-image gallery: hero, inhabited, lifestyle, detail Mjuk Mohair Throw mjuk-mohair-throw.html
Hero image only Fluted Pen Holder (all downloadables and virtuals) fluted-pen-holder.html
Bundle lifestyle shot showing every child Grov Table Setting grov-table-setting.html
Colour-story parent hero Meridian Modular Sofa meridian-modular-sofa.html
Per-variant galleries swapped by swatch Vila Lounge Chair vila-lounge-chair.html
Image-backed attribute swatch tiles Vila Lounge Chair, fabric vila-lounge-chair.html

Gallery order matters. For a configurable variant the inhabited shot sits at position 1 while the hero carries the image role, which is what makes the listing and the product page show different images for the same swatch click.

Relations, Reviews and Customer Data

Property Product Path
Related, up-sell and cross-sell all present Mjuk Dining Chair mjuk-dining-chair.html
Related products (56 products carry them) Haven Platform Bed haven-platform-bed.html
Cross-sells (64 products, shown in the cart) Kaari Dining Chair kaari-dining-chair.html
Reviews and ratings, 5 on one product Cane Bed Frame (bed-walnut-cane) cane-bed-frame.html

In total there are 118 related, 28 up-sell and 142 cross-sell links.

Customer-side data needs a login, and the sample data credentials are listed by a widget on customer/account/login. Wishlists are at wishlist/ and order history at sales/order/history/.

Categories

Property Category Path
Hidden from navigation (include_in_menu=0) More / Test Scenarios more/test-scenarios.html
Category carrying a catalog price rule Accessories / Vases & Vessels accessories/vases-vessels.html
Category carrying a coupon rule More / 3D Printable Models more/3d-printable-models.html
Top-level anchor with subcategories More more.html

Category paths include every ancestor, so the test category is at more/test-scenarios.html. The bare slug test-scenarios.html returns a 404.

Deliberately Not Covered

Knowing what is absent saves hunting for it:

Property Status
URL-based downloadable links and samples Avoided. Every link and every sample is file-based, to sidestep downloadable_domains.
Configurable per-option price adjustments Impossible in Magento 2, because the Magento 1 pricing table was removed.
Backorders and low-stock thresholds Not configured on any product.
Product videos None. Galleries are stills only.
Fixed-amount (non-percentage) catalog rules None. All catalog rules are percentage-based.