projects/org/ideal-shop/V2-drupal11-bootstrap/testing/strategies/4-CONFIGURATION.md

Стратегия 4: Configuration Testing

Когда: Минорный/мажорный релиз
Цель: Проверить все комбинации настроек


Что тестируем

1. Версии темы

4 варианта:

Lite (базовая)

# Установка
drush recipe recipes/ideal_theme_base

# Что тестируем:
-  Главная страница
-  Базовые компоненты (header, footer)
-  Адаптивность (mobile/tablet/desktop)
-  Accessibility (WCAG 2.1 AA)

# Страницы для проверки:
- / (главная)
- /node/1 (контент)
- /user/login (вход)

Advanced (+ редакторы)

# Установка
drush recipe recipes/ideal_theme_base
drush recipe recipes/ideal_theme_layouts

# Дополнительно тестируем:
-  Layout Builder работает
-  Paragraphs работают
-  Drag-and-drop страниц

# Страницы для проверки:
- /node/1/layout (редактор)
- /admin/structure/types (настройки)

Shop (+ Commerce)

# Установка
drush recipe recipes/ideal_theme_base
drush recipe recipes/ideal_shop_core
drush recipe recipes/ideal_shop_catalog

# Дополнительно тестируем:
-  Каталог товаров
-  Страница товара
-  Корзина
-  Checkout
-  Фильтры
-  Поиск

# Страницы для проверки:
- /catalog
- /product/1
- /cart
- /checkout

Max (всё включено)

# Установка по порядку зависимостей (из 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
-  Промокоды
-  Многоязычность

2. Пресеты стилей

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 пресетов

3. Браузеры

Матрица поддержки:

Браузер Версии Уровень Инструмент
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' }
    }
  ]
};

4. Устройства

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