Tested on 8 September 2026 in DDEV with Shopware 6.7.13.1, PHP 8.3.32, MySQL 8.0, Node.js 22.23.2 and Chrome through Playwright. The storefront uses the default Shopware theme and the official Shopware demo data. Filter Counts and the demo data plugin are the only active plugins.
| Check | Result |
|---|---|
| Plugin installation and activation | Passed |
| PHP unit tests | 8 tests, 19 assertions passed |
| JavaScript unit tests | 4 tests passed |
| Twig templates and service container | Lint passed |
| Production storefront build and theme compilation | Passed |
| Category listing | Correct initial manufacturer, text and colour counts |
| Actual products versus facet counts | All 42 comparisons passed across 14 options and 3 combinations |
| AJAX updates | Counts update for manufacturer, property, price and free-shipping filters |
| Multiple selections | OR selections within a group; counts exclude their own group's selection |
| Variants | Multiple matching variants count as one product card |
| Filter removal and reset | Initial counts restored |
| Browser back and forward | Selections and counts restored |
| Search results | Initial counts and AJAX manufacturer filtering passed |
| Empty results | No product cards; zero counts for incompatible combinations |
| Mobile, 390 × 844 | Offcanvas counts and AJAX selection passed |
| Empty-option disabling on and off | Zero-count options follow Shopware's setting; checked options remain removable |
| Disabled per sales channel | Count labels, JavaScript hook and count aggregation absent |
| Browser errors | No JavaScript errors during the browser tests |
| Filter response | No internal sidworks-facet-* aggregation keys exposed |
Run the unit tests from the Shopware project root:
ddev exec php vendor/bin/phpunit -c custom/plugins/SidworksFilterCounts/phpunit.xml.dist
ddev exec node --test custom/plugins/SidworksFilterCounts/tests/Storefront/filter-counts.test.cjs
ddev exec php bin/console lint:twig custom/plugins/SidworksFilterCounts/src/Resources/views
ddev exec php bin/console lint:containerThe browser test expects the English, unmodified Clothing category from SwagPlatformDemoData, three product cards, and Filter Counts enabled. It does not create, delete or edit catalogue data. Close open filter dropdowns before using reset buttons during manual testing.
From this plugin's directory on the host, with Chrome installed:
npm install --prefix /tmp/sidworks-browser-tests playwright
PLAYWRIGHT_MODULE=/tmp/sidworks-browser-tests/node_modules/playwright \
SHOPWARE_URL=https://ddev-shopware.ddev.site \
node tests/Storefront/demo-browser.cjsSet SCREENSHOT_DIR=docs on the same command to regenerate the three README screenshots. Desktop screenshots use 1280 × 1240; the mobile screenshot uses 390 × 844. The script captures the real storefront and does not replace labels, counts or product content.
Configuration checks were also run with core.listing.disableEmptyFilterOptions both true and false, and with SidworksFilterCounts.config.enabled set to false for the storefront sales channel. The original empty-option setting and inherited, enabled plugin setting were restored afterwards.
This validates the MySQL/DAL path on a small demo catalogue. Elasticsearch/OpenSearch, large-catalogue performance, image-based property previews, product streams, rating filters and third-party themes/search integrations were not tested end to end. SQL/keyword bucket normalization, deduplication, the search-engine term-limit guard and ungrouped stream criteria are covered by unit tests. See technical details for constraints.