Когда: Минорный/мажорный релиз
Цель: Проверить все комбинации настроек
4 варианта:
# Установка
drush recipe recipes/ideal_theme_base
# Что тестируем:
- ✅ Главная страница
- ✅ Базовые компоненты (header, footer)
- ✅ Адаптивность (mobile/tablet/desktop)
- ✅ Accessibility (WCAG 2.1 AA)
# Страницы для проверки:
- / (главная)
- /node/1 (контент)
- /user/login (вход)
# Установка
drush recipe recipes/ideal_theme_base
drush recipe recipes/ideal_theme_layouts
# Дополнительно тестируем:
- ✅ Layout Builder работает
- ✅ Paragraphs работают
- ✅ Drag-and-drop страниц
# Страницы для проверки:
- /node/1/layout (редактор)
- /admin/structure/types (настройки)
# Установка
drush recipe recipes/ideal_theme_base
drush recipe recipes/ideal_shop_core
drush recipe recipes/ideal_shop_catalog
# Дополнительно тестируем:
- ✅ Каталог товаров
- ✅ Страница товара
- ✅ Корзина
- ✅ Checkout
- ✅ Фильтры
- ✅ Поиск
# Страницы для проверки:
- /catalog
- /product/1
- /cart
- /checkout
# Установка по порядку зависимостей (из RECIPES.md)
drush recipe recipes/ideal_theme_base
drush recipe recipes/ideal_theme_tokens
drush recipe recipes/ideal_theme_layouts
drush recipe recipes/ideal_shop_core
drush recipe recipes/ideal_shop_catalog
drush recipe recipes/ideal_shop_reviews
drush recipe recipes/ideal_shop_wishlist
drush recipe recipes/ideal_shop_promo
# Тестируем всё:
- ✅ Всё из Lite + Advanced + Shop
- ✅ PWA функционал
- ✅ Отзывы
- ✅ Wishlist
- ✅ Промокоды
- ✅ Многоязычность
8 вариантов:
| Пресет | Цвета | Шрифты | Особенности |
|---|---|---|---|
| Minimalist | Чёрно-белый | Sans-serif | Минимум элементов |
| Modern | Синий-белый | Geometric | Смелый, яркий |
| Premium | Золото-чёрный | Serif | Элегантность |
| Vibrant | Многоцветный | Display | Энергия, молодость |
| Corporate | Серо-синий | Sans-serif | Деловой стиль |
| Eco | Зелёный | Organic | Экологичность |
| Tech | Киберпанк | Monospace | Футуристичный |
| Classic | Бежевый-коричневый | Traditional | Традиционный |
Тест каждого пресета:
# 1. Применить пресет
drush config:set ideal_theme.settings preset minimalist -y
drush cr
# 2. Скриншоты 3 viewport
playwright screenshot --viewport 1440x900 minimalist-desktop.png
playwright screenshot --viewport 768x1024 minimalist-tablet.png
playwright screenshot --viewport 375x812 minimalist-mobile.png
# 3. Проверить цвета
# CSS переменные должны измениться
curl http://localhost/ | grep "var(--color-brand-500)"
# 4. Lighthouse
lighthouse http://localhost/ --output html --output-path=./minimalist-lighthouse.html
# Повторить для всех 8 пресетов
Матрица поддержки:
| Браузер | Версии | Уровень | Инструмент |
|---|---|---|---|
| Chrome | 120+ | Full | Playwright |
| Chrome | 115-119 | Full | Playwright |
| Chrome | 100-114 | Core | BrowserStack |
| Firefox | 120+ | Full | Playwright |
| Firefox | 100-119 | Core | BrowserStack |
| Safari | 17+ | Full | Playwright |
| Safari | 15-16 | Core | BrowserStack |
| Edge | 120+ | Full | Playwright |
| IE11 | - | Fallback | BrowserStack |
Что проверяем:
Full (полная поддержка):
- ✅ Все функции работают
- ✅ OKLCH цвета
- ✅ CSS Grid
- ✅ PWA
Core (базовая функциональность):
- ✅ Навигация
- ✅ Просмотр товаров
- ✅ Добавление в корзину
- ✅ Checkout
- ⚠️ Fallback на RGB цвета
- ⚠️ Fallback на Flexbox
Fallback (IE11):
- ✅ Контент доступен
- ✅ Формы работают
- ⚠️ Без JavaScript
- ⚠️ Базовые стили
Playwright конфиг:
// playwright.config.ts
export default {
projects: [
{
name: 'chrome-latest',
use: { browserName: 'chromium', channel: 'chrome' }
},
{
name: 'firefox-latest',
use: { browserName: 'firefox' }
},
{
name: 'safari-latest',
use: { browserName: 'webkit' }
},
{
name: 'edge-latest',
use: { browserName: 'chromium', channel: 'msedge' }
}
]
};
Viewport'ы:
| Устройство | Размер | Тип |
|---|---|---|
| iPhone 13 | 375 × 812 | Mobile |
| iPhone 13 Pro Max | 428 × 926 | Mobile |
| Samsung Galaxy S21 | 360 × 800 | Mobile |
| iPad | 768 × 1024 | Tablet |
| iPad Pro | 1024 × 1366 | Tablet |
| MacBook | 1440 × 900 | Desktop |
| iMac | 1920 × 1080 | Desktop |
| 4K Display | 3840 × 2160 | Desktop |
| Galaxy Fold | 280 × 653 (сложен) | Foldable |
| Galaxy Fold | 374 × 512 (развернут) | Foldable |
Тест каждого устройства:
// tests/devices.spec.ts
const devices = [
{ name: 'iPhone 13', viewport: { width: 375, height: 812 } },
{ name: 'iPad', viewport: { width: 768, height: 1024 } },
{ name: 'MacBook', viewport: { width: 1440, height: 900 } }
];
for (const device of devices) {
test(`${device.name}: Homepage renders`, async ({ page }) => {
await page.setViewportSize(device.viewport);
await page.goto('/');
await expect(page).toHaveTitle(/Ideal Shop/);
});
}
BackstopJS конфиг:
// backstop.config.js
module.exports = {
scenarios: [
{
label: 'Homepage',
url: 'http://localhost/',
selectors: ['document'],
readySelector: 'body'
},
{
label: 'Catalog',
url: 'http://localhost/catalog',
selectors: ['document']
},
{
label: 'Product',
url: 'http://localhost/product/1',
selectors: ['document']
}
],
viewports: [
{ name: 'phone', width: 375, height: 812 },
{ name: 'tablet', width: 768, height: 1024 },
{ name: 'desktop', width: 1440, height: 900 }
]
};
Запуск:
# 1. Создать эталон
backstop reference
# 2. После изменений
backstop test
# 3. Проверить различия
backstop approve # если различия ок
# или
backstop reject # если баг
Полная матрица:
| Вариант | Пресет | Браузер | Устройство | Результат |
|---|---|---|---|---|
| Lite | Minimalist | Chrome 120+ | Desktop | ✅ |
| Lite | Minimalist | Safari 17+ | iPad | ✅ |
| Shop | Modern | Chrome 120+ | iPhone 13 | ✅ |
| Shop | Premium | Firefox 120+ | Desktop | ✅ |
| Max | Vibrant | Edge 120+ | MacBook | ✅ |
| ... | ... | ... | ... | ... |
Итого комбинаций:
- 4 варианта × 8 пресетов × 4 браузера × 3 устройства = 384 теста
Оптимизация:
- Проверяем критические комбинации (20-30 тестов)
- Остальные выборочно
Скрипт test-matrix.sh:
#!/bin/bash
# Критические комбинации
TESTS=(
"lite:minimalist:chrome:desktop"
"shop:modern:chrome:mobile"
"shop:premium:safari:tablet"
"max:vibrant:firefox:desktop"
)
for test in "${TESTS[@]}"; do
IFS=':' read -r variant preset browser device <<< "$test"
echo "🧪 Testing: $variant | $preset | $browser | $device"
# Применить вариант
./scripts/apply-variant.sh $variant
# Применить пресет
drush config:set ideal_theme.settings preset $preset -y
drush cr
# Запустить тест
playwright test \
--project=$browser \
--grep="@$device" \
--reporter=html
if [ $? -eq 0 ]; then
echo "✅ Passed"
else
echo "❌ Failed"
exit 1
fi
done
echo "🎉 All critical combinations passed!"
Требования:
- ✅ Все варианты: работают
- ✅ Все пресеты: применяются
- ✅ Chrome/Firefox/Safari: поддержка Full
- ✅ Edge: поддержка Full
- ✅ IE11: поддержка Fallback
- ✅ Mobile/Tablet/Desktop: адаптивно
- ✅ Визуальные регрессии: < 0.1% различий
Lighthouse (для каждого варианта):
- Performance: > 90
- Accessibility: 100
- Best Practices: 100
- SEO: > 90
- PWA: 100 (для Max варианта)
Генерация отчёта:
# Запуск всех тестов
npm run test:configuration
# Генерация HTML отчёта
playwright show-report
# Lighthouse для каждого варианта
lighthouse http://localhost/ --preset=desktop --output=html
# BackstopJS отчёт
backstop test
Отчёт содержит:
- Матрица всех тестов (✅/❌)
- Скриншоты различий
- Lighthouse scores
- Время выполнения
- Список багов
После прохождения всех 4 стратегий → Production Release
Статус: Готово к использованию
Дата: 2026-01-07