Skip to content

E2E Test Users — Seed Command & CI Job

Консольная команда и CI job для создания тестовых пользователей на dev-контуре. Требуется для E2E smoke-тестов (DEV-153).

Консольная команда

bash
php bin/console app:seed-e2e-users

Idempotent: если пользователь с таким email уже существует — обновляет пароль и флаги, не дублирует.

Seed-товар (Playwright)

Файл tests/e2e/seed.setup.ts создаёт approved product перед E2E тестами. Seed-товар содержит полные данные для проверки карточки товара (UF-07):

ПолеЗначениеДля теста
titleE2E Фара BMW {timestamp}Название
price1000Цена
descriptionSeed-товар для E2E...Описание
oem_numberE2E-OEM-63117352477Блок характеристик
manufacturerBoschБлок характеристик
steeringleftБлок характеристик
category_idsleaf part + condition категории из APIБлок характеристик
compatibilityпервая марка из /store/cars/makesБлок «Подходит для»
2x изображения1x1 PNGГалерея, миниатюры

Категории и марки фетчатся из API при создании seed-товара. category_ids — плоский number[], primary_category_id — отдельное поле. Предпочитается leaf-категория (с parent_id).

Создаваемые пользователи

РольEmail (env)Password (env)Флаги
BuyerE2E_USER_EMAILE2E_USER_PASSWORDemail_verified=true, account_type=personal
SellerE2E_SELLER_EMAILE2E_SELLER_PASSWORDemail_verified=true, account_type=business
AdminE2E_ADMIN_EMAILE2E_ADMIN_PASSWORDemail_verified=true, is_admin=true

Что делает при обновлении

  • Обновляет password_hash (Argon2id)
  • Устанавливает email_verified_at = now()
  • Устанавливает account_type в соответствии с ролью (personal/business)
  • Устанавливает is_admin в соответствии с ролью
  • Сбрасывает lockout (failed_login_attempts, locked_until)
  • Активирует аккаунт (is_active = true)

CI Job

Job seed-e2e-users в .gitlab-ci.yml:

yaml
seed-e2e-users:
  stage: seed
  tags: [partizap-shell]
  script:
    - cd /var/www/partizap/development
    - php bin/console app:seed-e2e-users
  environment:
    name: development
  rules:
    - if: $CI_PIPELINE_SOURCE == "schedule"   # по расписанию
      when: on_success
    - if: $CI_COMMIT_BRANCH == "develop"      # вручную
      when: manual
      allow_failure: true

Порядок stages

test → deploy → seed

При scheduled pipeline: тесты → deploy (git pull) → seed (создание пользователей в уже deployed коде).

Rate Limiting и E2E

На dev/prod стендах API защищён rate limiter'ом (например, login: 5/15min). При прогоне E2E-тестов CI runner быстро исчерпывает лимит — последующие запросы получают 429 Too Many Requests.

Решение: в RateLimitMiddleware добавлен IP whitelist через env-переменную RATE_LIMIT_WHITELIST (DEV-216):

env
# .env на dev-стенде
RATE_LIMIT_WHITELIST=192.168.0.5,127.0.0.1

IP из списка полностью обходят rate limiting. На проде эта переменная не задана — whitelist пуст.

Локальная разработка: при запуске через php -S localhost:8000 rate limiter работает, но все запросы идут с 127.0.0.1. Если добавить 127.0.0.1 в RATE_LIMIT_WHITELIST в локальном .env, лимиты не будут применяться. На практике при локальной разработке rate limit не является проблемой — лимиты рассчитаны на защиту от abuse, а не на ограничение одного разработчика.

Настройка GitLab

1. CI/CD Variables

Settings → CI/CD → Variables:

VariableMaskedProtectedНазначение
E2E_BASE_URLNoNoURL стенда (default: https://dev.partizap.ru)
E2E_HTTP_USERYesNoЛогин формы dev gate (gate.setup.ts, httpCredentials)
E2E_HTTP_PASSWORDYesNoПароль формы dev gate
E2E_USER_EMAILYesNoEmail тестового покупателя
E2E_USER_PASSWORDYesNoПароль тестового покупателя
E2E_SELLER_EMAILYesNoEmail тестового продавца
E2E_SELLER_PASSWORDYesNoПароль тестового продавца
E2E_ADMIN_EMAILYesNoEmail тестового админа
E2E_ADMIN_PASSWORDYesNoПароль тестового админа

Protected: No — переменные должны быть доступны на develop (не только на protected branches).

E2E_HTTP_USER/PASSWORD — обязательны для прохождения формы авторизации dev-сервера. Без них browser-тесты видят форму gate вместо приложения, а API-вызовы через request fixture возвращают 401/403.

2. Scheduled Pipeline

CI/CD → Schedules → New schedule:

ПараметрЗначение
DescriptionSeed E2E users on dev
Interval0 6 * * 1-5 (пн–пт, 06:00 UTC)
Target branchdevelop