77 lines
4.6 KiB
Markdown
77 lines
4.6 KiB
Markdown
# XShop – Testing
|
||
|
||
## 1. Levels
|
||
|
||
| Level | Tool | Scope |
|
||
|-------|------|-------|
|
||
| PHP lint | `php -l` | Every PHP file on build |
|
||
| PHPCS | `WordPress` standard | Security & WPCS violations |
|
||
| PHPStan | level 6 | Core plugin classes |
|
||
| JS lint | ESLint | Assets |
|
||
| Manual | Checklist | Features per Definition of Done |
|
||
|
||
## 2. Manual Matrix (must pass before 1.0.0)
|
||
|
||
- Activation/deactivation (theme + plugin), WC integration, products (simple/variable), cart/checkout/account, search/filter, wishlist/compare, Q&A, mobile menu, mega menu, RTL, LTR, dark mode, Elementor, Gutenberg.
|
||
|
||
### M1 Gate (foundation) — manual QA performed 2026-09-13
|
||
|
||
| Check | Result |
|
||
|-------|--------|
|
||
| `php -l` on all `xshop-theme/**/*.php` (PHP 8.2.12) | ✅ Pass (24 files incl. `inc/setup/body-classes.php:1`) |
|
||
| `node --check assets/js/theme.js` | ✅ Pass |
|
||
| No `TODO/FIXME/console.log/var_dump/print_r/lorem ipsum` in theme | ✅ Pass (heuristic scan) |
|
||
| Text domain `xshop` on all translatable strings | ✅ Pass |
|
||
| `xshop_` prefix for theme functions | ✅ Pass |
|
||
| `wp_head/wp_footer/wp_body_open/body_class/post_class/language_attributes/wp_nav_menu/dynamic_sidebar/comments_template/wp_link_pages/paginate_links` present | ✅ All present |
|
||
| No direct unsafe `echo $raw` | ✅ Pass (all `echo` via `esc_*`/`wp_kses_post`/`get_the_post_thumbnail`) |
|
||
| Header: skip link, `aria-expanded`/`aria-controls`, focus trap, Esc, click-outside, keyboard nav | ✅ `header.php:1` + `site-header.php:1` + `theme.js:1` |
|
||
| Footer: widgets, nav, copyright, accessible | ✅ `site-footer.php:1` |
|
||
| Templates: no-posts, long titles, missing thumb/excerpt, password protected, empty search, 404 recent posts | ✅ All covered |
|
||
| RTL/LTR: zero `left:/right:` in CSS, logical props, breadcrumbs/pagination `is_rtl()` flip | ✅ Pass |
|
||
| Woo active/inactive: wrappers, body classes `xshop--has-woo`, no fatal when inactive | ✅ `inc/woocommerce/setup.php:1` + `inc/helpers/template.php:1` guards |
|
||
| Dark mode tokens | ✅ `tokens.css:1` full coverage + `header.php:1` `data-theme` + `body-classes.php:1` |
|
||
| Responsive: 360/768/1024/1280 token breakpoints | ✅ `layout.css:1` + `components.css:1` |
|
||
| No PHP warnings/notices (static) | ✅ Pass — no undefined vars, all `apply_filters` guarded |
|
||
|
||
### M2 Gate (Woo storefront) — manual QA performed 2026-09-13 (WP 7.1 / WC 11.1.0 / PHP 8.2.12)
|
||
|
||
| Check | Result |
|
||
|-------|--------|
|
||
| Shop/category: grid `xshop-products` 4/3/2/1, `xshop-product-card` sale/outofstock/featured/no-image/long Persian+English, sorting `woocommerce-ordering`, result count, pagination, breadcrumbs, empty-state CTA | ✅ Pass (shop 200, 4 products, coming-soon disabled) |
|
||
| Product card: simple/sale (-20%)/variable/outofstock/featured/no-image | ✅ Pass |
|
||
| Single product: gallery (`featured+thumbs` `is-active`, keyboard Arrow/Home/End), title/SKU/rating/price/sale/stock/short/variation/quantity/add-to-cart/meta/tabs/related/upsells | ✅ Pass |
|
||
| Variable: S (120k instock 10) / M (150→130k outofstock) / L (180k) — attribute `Size` S/M/L, variations 26/27/28, `data-product_variations` JSON, `reset_variations` link, price/stock update via Woo JS, add S/L to cart **PASS** | ✅ Pass |
|
||
| Cart: `shop_table` responsive `data-title` ::before, `coupon`, `cart_totals`, `update quantity`, `remove`, totals, empty | ✅ Pass |
|
||
| Mini-cart: `xshop-mini-cart` count/items/subtotal/remove/cart/checkout/empty | ✅ Pass (component) |
|
||
| Account: `MyAccount-navigation` 220px|1fr → stacked, dashboard/orders/addresses/details/login/lost-password, responsive RTL | ✅ Pass |
|
||
| Checkout: `col2-set 1fr 1fr → 1fr`, `billing/shipping/review/payment`, notices, `payment_method` | ✅ Pass |
|
||
| RTL/LTR/dark/mobile: zero `left/right`, logical props, `woo.css` tokens, dark swap on shop/card/gallery/tabs/tables | ✅ Pass |
|
||
| No XShop PHP warnings (debug.log clean after 10 hits) / no JS console.log | ✅ Pass |
|
||
|
||
## 3. Browser
|
||
|
||
Chromium, Firefox, Edge, Safari (where available). Responsive: 360/768/1024/1280.
|
||
|
||
## 4. Accessibility Checks
|
||
|
||
Keyboard nav, focus trap (modal/drawer), visible focus, semantic HTML, labels, screen reader (NVDA/VoiceOver spot), contrast, `prefers-reduced-motion`.
|
||
|
||
## 5. Performance Smoke
|
||
|
||
Lighthouse home/shop/product ≥ 85 perf (desktop). Query count via Query Monitor.
|
||
|
||
## 6. How to Run (local)
|
||
|
||
```powershell
|
||
C:\xampp\php\php.exe -l xshop-theme\functions.php
|
||
# PHPCS (when installed)
|
||
vendor\bin\phpcs --standard=WordPress xshop-theme xshop-core
|
||
vendor\bin\phpstan analyse --level 6 xshop-core\includes
|
||
npx eslint assets\js --ext .js
|
||
```
|
||
|
||
## 7. Release Gate
|
||
|
||
No PHP warnings/notices, no console errors, no PHPCS security errors.
|