projects/org/ideal-shop/V2-drupal11-bootstrap/testing/strategies/3-DEPLOYMENT.md

Стратегия 3: Deployment Testing

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


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

1. Чистая установка Drupal

Полный цикл:

# 1. Создать проект
composer create-project drupal/cms ideal-shop --no-interaction
cd ideal-shop

# 2. Добавить зависимости
composer require drupal/commerce
composer require drupal/facets
composer require drupal/search_api
composer require drupal/pathauto
composer require drupal/metatag

# 3. Установить Drupal
vendor/bin/drush site:install standard \
  --db-url=mysql://user:pass@localhost/db \
  --site-name="Ideal Shop" \
  --account-pass=admin \
  -y

# 4. Скопировать тему
cp -r ../ideal_theme web/themes/custom/

# 5. Применить рецепты
vendor/bin/drush recipe recipes/ideal_theme_base
vendor/bin/drush recipe recipes/ideal_shop_core
# ... остальные рецепты

# 6. Проверка
curl http://localhost/
# Ожидаемый результат: HTTP 200

Проверяемые пункты:
- ✅ Все команды выполняются без ошибок
- ✅ База данных создаётся
- ✅ Все модули устанавливаются
- ✅ Тема включается
- ✅ Сайт доступен


2. Пошаговое включение рецептов

Тест каждого рецепта отдельно:

Рецепт 1: Base

vendor/bin/drush recipe recipes/ideal_theme_base

# Проверка:
# ✅ Тема установлена
# ✅ Базовые модули включены
# ✅ Главная страница рендерится

# Тест
curl http://localhost/ | grep "<title>Welcome"

Рецепт 2: Commerce

vendor/bin/drush recipe recipes/ideal_shop_core

# Проверка:
# ✅ Commerce модули включены
# ✅ Product type создан
# ✅ Store создан

# Тест
vendor/bin/drush pm:list | grep commerce_product
vendor/bin/drush entity:list commerce_product_type

Рецепт 3: Catalog

vendor/bin/drush recipe recipes/ideal_theme_catalog

# Проверка:
# ✅ Views созданы
# ✅ Facets настроены
# ✅ Каталог доступен

# Тест
curl http://localhost/catalog | grep "HTTP/1.1 200"

И так далее для всех 11 рецептов


3. Откат конфигураций

Тест выключения/включения:

# 1. Включить всё
vendor/bin/drush recipe recipes/ideal_theme_base
vendor/bin/drush recipe recipes/ideal_shop_core
vendor/bin/drush recipe recipes/ideal_theme_catalog

# 2. Выключить Commerce
vendor/bin/drush pm:uninstall commerce_product commerce_store

# 3. Проверить что сайт работает
curl http://localhost/
# Ожидаемый результат: HTTP 200 (без ошибок)

# 4. Включить обратно
vendor/bin/drush pm:enable commerce_product commerce_store

# 5. Проверить что всё работает
curl http://localhost/catalog
# Ожидаемый результат: HTTP 200

Проверяемые сценарии:
- ✅ Выключение Commerce → сайт работает
- ✅ Выключение Catalog → сайт работает
- ✅ Выключение Search → сайт работает
- ✅ Включение обратно → всё восстанавливается


Матрица установки

Тестируем все комбинации:

Вариант Рецепты Ожидаемый результат
Lite Base Главная работает ✅
Blog Base + Blog Главная + Блог ✅
Shop Base + Commerce + Catalog Главная + Каталог + Товар ✅
Max Все 11 рецептов Всё работает ✅

Автоматизация

Скрипт test-deployment.sh:

#!/bin/bash
set -e

VARIANTS=("lite" "shop" "max")

for variant in "${VARIANTS[@]}"; do
  echo "🧪 Testing $variant variant..."

  # 1. Создать чистый Drupal
  rm -rf /tmp/test-$variant
  mkdir -p /tmp/test-$variant
  cd /tmp/test-$variant

  composer create-project drupal/recommended-project:^11 . --no-interaction

  # 2. Установить зависимости
  composer require drupal/commerce drupal/facets

  # 3. Установить Drupal
  vendor/bin/drush site:install standard \
    --db-url=sqlite://db-$variant.sqlite \
    -y

  # 4. Копировать тему
  cp -r /path/to/ideal_theme web/themes/custom/

  # 5. Применить рецепты для варианта
  case $variant in
    "lite")
      vendor/bin/drush recipe recipes/ideal_theme_base
      ;;
    "shop")
      vendor/bin/drush recipe recipes/ideal_theme_base
      vendor/bin/drush recipe recipes/ideal_shop_core
      vendor/bin/drush recipe recipes/ideal_theme_catalog
      ;;
    "max")
      for recipe in recipes/ideal_theme_*; do
        vendor/bin/drush recipe $recipe
      done
      ;;
  esac

  # 6. Тест страниц
  vendor/bin/drush runserver 127.0.0.1:888$variant &
  SERVER_PID=$!
  sleep 3

  # Главная
  HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:888$variant/)
  if [ "$HTTP_CODE" != "200" ]; then
    echo "❌ $variant: Homepage failed ($HTTP_CODE)"
    kill $SERVER_PID
    exit 1
  fi

  # Каталог (только для shop и max)
  if [ "$variant" != "lite" ]; then
    HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:888$variant/catalog)
    if [ "$HTTP_CODE" != "200" ]; then
      echo "❌ $variant: Catalog failed ($HTTP_CODE)"
      kill $SERVER_PID
      exit 1
    fi
  fi

  kill $SERVER_PID
  echo "✅ $variant variant passed!"
done

echo "🎉 All deployment variants tested successfully!"

Чеклист перед релизом

Вручную проверить:

Установка

Рецепты

Проверка страниц

Проверка функций

Откат


Окружения для тестирования

3 окружения:

1. Local (разработка)

2. Staging (тестирование)

3. Production-like (финальный тест)


Метрики

Требования:
- ✅ Установка: < 5 минут
- ✅ Все рецепты: успешно
- ✅ Все страницы: HTTP 200
- ✅ Откат: без ошибок
- ✅ 3 варианта (Lite/Shop/Max): все работают


Что НЕ тестируем на этом этапе

❌ Различные браузеры (Стратегия 4)
❌ Визуальные регрессии (Стратегия 4)
❌ Производительность под нагрузкой (отдельное тестирование)


Следующий шаг

После прохождения Deployment Testing → Стратегия 4: Configuration Testing


Статус: Готово к использованию
Дата: 2026-01-07