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 groupsbowls-serving-stoneware: qty 2 at −10% and qty 6 at −15%, as percentages for all groupsdesk-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.
Links Purchased Separately
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. |