Appearance
E2E Test Users — Seed Command & CI Job
Консольная команда и CI job для создания тестовых пользователей на dev-контуре. Требуется для E2E smoke-тестов (DEV-153).
Консольная команда
bash
php bin/console app:seed-e2e-usersIdempotent: если пользователь с таким email уже существует — обновляет пароль и флаги, не дублирует.
Seed-товар (Playwright)
Файл tests/e2e/seed.setup.ts создаёт approved product перед E2E тестами. Seed-товар содержит полные данные для проверки карточки товара (UF-07):
| Поле | Значение | Для теста |
|---|---|---|
title | E2E Фара BMW {timestamp} | Название |
price | 1000 | Цена |
description | Seed-товар для E2E... | Описание |
oem_number | E2E-OEM-63117352477 | Блок характеристик |
manufacturer | Bosch | Блок характеристик |
steering | left | Блок характеристик |
category_ids | leaf 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) | Флаги |
|---|---|---|---|
| Buyer | E2E_USER_EMAIL | E2E_USER_PASSWORD | email_verified=true, account_type=personal |
| Seller | E2E_SELLER_EMAIL | E2E_SELLER_PASSWORD | email_verified=true, account_type=business |
| Admin | E2E_ADMIN_EMAIL | E2E_ADMIN_PASSWORD | email_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.1IP из списка полностью обходят 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:
| Variable | Masked | Protected | Назначение |
|---|---|---|---|
E2E_BASE_URL | No | No | URL стенда (default: https://dev.partizap.ru) |
E2E_HTTP_USER | Yes | No | Логин формы dev gate (gate.setup.ts, httpCredentials) |
E2E_HTTP_PASSWORD | Yes | No | Пароль формы dev gate |
E2E_USER_EMAIL | Yes | No | Email тестового покупателя |
E2E_USER_PASSWORD | Yes | No | Пароль тестового покупателя |
E2E_SELLER_EMAIL | Yes | No | Email тестового продавца |
E2E_SELLER_PASSWORD | Yes | No | Пароль тестового продавца |
E2E_ADMIN_EMAIL | Yes | No | Email тестового админа |
E2E_ADMIN_PASSWORD | Yes | No | Пароль тестового админа |
Protected: No — переменные должны быть доступны на
develop(не только на protected branches).E2E_HTTP_USER/PASSWORD — обязательны для прохождения формы авторизации dev-сервера. Без них browser-тесты видят форму gate вместо приложения, а API-вызовы через
requestfixture возвращают 401/403.
2. Scheduled Pipeline
CI/CD → Schedules → New schedule:
| Параметр | Значение |
|---|---|
| Description | Seed E2E users on dev |
| Interval | 0 6 * * 1-5 (пн–пт, 06:00 UTC) |
| Target branch | develop |