NEXX.business · UI v2 · гид по тестированию

Что и как тестировать — по стейджам

Пересборка под дизайн-референс Кости на прод-стеке (Next 16 · React 19 · Tailwind 4). Язык по умолчанию — LV, переключатель LV/EN/RU.
LIVE — собрано и работает backend-pending — фронт готов, ждёт деплой/доработку planned — следующие стейджи
Сценарии прогона · click-by-click
Тест-доступы (бэк nexx-api.srv.acebox.eu, пароль у всех demo-pass-123):
demo.context.switcher@example.com — менеджер 3 компаний: Demo Buyer SIA (покупатель) · Demo Supplier Food SIA (поставщик) · Demo Both Trade SIA (оба). Активная компания переключается в меню аккаунта справа сверху.
demo.onboarding.target@example.com — пустой юзер (без компаний) для онбординга и создания компании; состояние сбрасывается при пересиде.
⚠ Регистрацию с подтверждением проверяйте своим реальным ящиком (письмо от no-reply@nexx.business, проверьте «Спам»). Lursoft-автопоиск не нажимать (платная квота) — компанию заводить вручную. Действия с заказами/связями необратимы — гоняйте на ненужных демо-записях.
SC1 · Регистрация аккаунта — Stage 0 · гость
  1. Открыть /auth/register. форма «Создать аккаунт» (e-mail, пароль, повтор)
  2. Ввести свой реальный e-mail + пароль + повтор → «Создать аккаунт». редирект на /auth/verify-email, текст «письмо отправлено с no-reply@nexx.business»
  3. Открыть письмо → перейти по ссылке с ?token. «E-mail подтверждён» → кнопка «Продолжить онбординг»
  4. Неверный токен/повторный клик. сообщение «ссылка недействительна или уже использована»
нет своего ящика → пропустите верификацию и входите готовым тест-логином (SC2)
SC2 · Вход и ошибки — Stage 0
  1. /auth/login, ввести верный e-mail + неверный пароль → «Войти». остаётся на форме, ошибка «E-mail или пароль неверны»
  2. Ввести demo.context.switcher@example.com / demo-pass-123 → «Войти». сессия сохранена → рабочее пространство /app (или онбординг, если не пройден)
  3. Переключить язык LV/EN/RU на странице входа. форма и бренд-панель переводятся мгновенно
SC3 · Онбординг + создание компании (вручную) — Stage 0 · demo.onboarding.target
  1. Войти как demo.onboarding.target@example.com. шаг «Профиль» (степпер 1/5)
  2. Заполнить имя, фамилию, телефон → «Перейти к компаниям». шаг «Компании»
  3. Нажать «Добавить компанию» не выбрав роль. подсветка ошибки у тумблера ролей (валидация)
  4. Выбрать роль (Покупатель), ввести рег.№ вручную (Lursoft не жать), название, страна LV, адрес → «Добавить компанию». компания создана, переход на «Интеграции»
  5. «Пропустить» интеграции → шаг «Поставщики» → «Далее · подтверждение».
  6. Отметить согласия «правила» + «персональные данные» (обязательные) → «Создать workspace». экран «Workspace готов»
  7. «Рабочее пространство →». /app с созданной компанией, роль «Администратор», карточки домена «Снабжение»
SC4 · Витрина гостя + язык — Stage 1 · без логина
  1. Открыть / без логина. витрина HoReCa: hero, поиск, секции, панель вертикалей; без редиректа на login
  2. Переключить язык LV → RU → EN в шапке. весь текст витрины переводится мгновенно
  3. «Каталог товаров» → выбрать категорию (напр. «Мясо») в сайдбаре. сетка товаров фильтруется по группе
  4. Открыть карточку товара. «ориентировочная цена» + «заказ после входа» + «та же позиция у других поставщиков» + похожие
  5. Открыть карточку поставщика. verified-бейдж, группы товаров, guest-гейт «цены/каталог после входа»
SC5 · Связи: покупатель — Stage 2 · Demo Buyer SIA
  1. Войти как demo.context.switcher, активная компания = Demo Buyer SIA. Открыть /app/procurement/suppliers. 5 связей со статусами (активна/ожидает/приостановлена/прекращена), счётчик «N подключено»
  2. Ввести часть названия в поиск. список фильтруется по контрагенту
  3. На активной связи → «Прекратить» → причина → подтвердить. статус меняется на «прекращена» (необратимо)
SC6 · Связи: поставщик — Stage 2 · Demo Supplier Food SIA
  1. В меню аккаунта переключить активную компанию → Demo Supplier Food SIA. Открыть /app/sales/requests. входящие запросы, фильтр «Ожидают/Все», счётчик
  2. На запросе → «Подтвердить». связь активирована, запрос уходит из «Ожидают»
  3. На другом запросе → «Отклонить» → причина. статус «отклонён»
  4. Под-навигация → «Покупатели» (/app/sales/buyers) → «Приостановить» (причина) / «Возобновить» / «Отключить». статус покупателя меняется соответственно
SC7 · Заказ покупателя: каталог → корзина → гейты → заказ — Stage 3 · Demo Buyer SIA
  1. Активная компания = Demo Buyer SIA. /app/catalog → у товара подключённого поставщика «В корзину». бейдж «× N» на товаре, счётчик корзины в шапке растёт
  2. /app/cart. позиции сгруппированы по поставщикам, ±количество/удаление, справа доставка (из профиля) + net/НДС/итог
  3. Если сумма по поставщику ниже минимального заказа. группа подсвечена «сумма ниже минимального», «оформить» по нему недоступно
  4. Нарастить количество выше минимума. бейдж «связь активна», поставщик попадает в «будет создано N заказов»
  5. «Оформить заказ». экран «Заказы созданы», по одному заказу на проходящего поставщика; корзина обновлена
  6. /app/procurement/orders → открыть новый заказ. степпер «создан», позиции/итоги, блок экспорта NEXX Engine (внешний ID), действия «Принять»/«Отменить»
SC8 · Жизненный цикл заказа — Stage 3 · поставщик ↔ покупатель
  1. Активная компания = поставщик заказа. /app/sales/orders → заказ «создан» → деталь → «Подтвердить». степпер сдвигается на «подтверждён», действия → «Отгрузить»/«Отменить»
  2. «Отгрузить» → затем «Доставлено». степпер «отгружен» → «доставлен»
  3. Переключиться на покупателя, открыть тот же заказ (/app/procurement/orders/<id>) в статусе «доставлен» → «Принять». степпер «принят» (финал)
переходы необратимы · «Отменить»: покупателю на «создан», поставщику на «создан/подтверждён»
LIVE

Stage 0 — Аккаунт + Онбординг

Модель: сначала личный аккаунт-человек (register + подтверждение e-mail), затем регистрация компании внутри онбординга.

ЭкранПутьКак тестироватьОжиданиеСтатус
Вход (entry)/Открыть корень приложенияРедирект на /auth/login, язык LVLIVE
ЯзыкПереключатель LV/EN/RU справа сверхуМгновенный перевод формы и бренд-панели; выбор запоминается (cookie)LIVE
Регистрация/auth/registerE-mail + пароль + повтор → «Создать аккаунт»Письмо подтверждения от no-reply@nexx.business; переход на verify-emailLIVE
Подтверждение e-mail/auth/verify-emailОткрыть ссылку из письма (с ?token)«E-mail подтверждён» → «Продолжить онбординг»LIVE
Вход/auth/loginE-mail + пароль → «Войти»Сессия сохранена → /onboarding/profileLIVE
Сброс пароля/auth/password-resetE-mail → ссылка → /set → новый парольПисьмо со ссылкой; новый пароль применёнLIVE
Профиль/onboarding/profileИмя, фамилия, телефон → «Продолжить»Сохраняется на бэке (PATCH /users/me/profile)LIVE
Компании/onboarding/companiesРег.номер → «Найти автоматически» (Lursoft, LV); роль покупатель/поставщик; страна LV/LT/EE → «Добавить компанию»Автозаполнение по Lursoft; компания создана и активнаLIVE
Интеграции/onboarding/integrations«Пропустить»Шаг-заглушка (каталог ERP/POS — позже)stub
Поставщики/onboarding/suppliersПоиск по каталогу → «Отправить запрос»Запрос на связь отправлен (relationships)LIVE
Подтверждение/onboarding/confirmОтметить согласия (правила + перс. данные обязательны) → «Создать workspace»Согласия записаны (POST /users/me/consents) → «Workspace готов»LIVE
Подключение к существующей компанииОтложено (отдельный кейс)deferred
Бэкенд: профиль и согласия — новые эндпоинты /api/internal/v1/users/me/profile и /users/me/consents, задеплоены на staging + prod (миграция 0031, additive). Письма уходят с no-reply@nexx.business.
LIVE

Stage 1 — Публичная витрина + каталог

Гостевой режим (без логина). Данные демонстрационные — публичного каталога-API пока нет (v1-каталог требует auth + компанию). Весь маркетплейс трилингвальный (LV/EN/RU) — переключатель в шапке витрины.

Экран / блокПутьКак тестироватьОжиданиеСтатус
Главная (витрина)/Открыть корень без логинаB2B-витрина HoReCa: hero + контекстный поиск, секции товары / услуги / app-market / новости на реальном дереве категорий. Больше не редиректит на login.LIVE
i18n витриныПереключатель LV/EN/RU в шапке (главная / каталог / карточки)Мгновенный трилингв-перевод всего текста маркетплейса; названия категорий из общего дерева, юр.названия поставщиков остаются как есть; выбор запоминается (cookie)LIVE
Верхняя панель вертикалейЧипы вертикалей на главной и в каталоге8 вертикалей (procurementArea), лейблы трилингв; food-beverage активна → ведёт в каталог, остальные 7 — приглушённые «скоро» (нет пилот-данных)LIVE
Каталог товаров/catalogОткрыть из шапки «Каталог товаров»; выбрать категорию в сайдбаре; /catalog?group=<slug> открывает с фильтромХлебные крошки + сайдбар категорий (реальное HoReCa-дерево, иконки + счётчики поставщиков, пустые группы скрыты) + сетка товаров по выбранной группе (демо)LIVE
Карточка поставщика/catalog/supplier/<slug>Открыть из плитки «поставщики» на главнойРеальные данные реестра HoReCa: шапка (verified/уровень/группы) + «о поставщике» (рег.№/адрес/сайт/EDI/ERP) + плитки групп товаров + честный guest-гейт (каталог/цены/запрос связи — после входа → Войти/Регистрация)LIVE
Карточка товара/catalog/product/<id>Открыть из карточки товара в каталоге/на главнойКартинка + характеристики + описание + цена (со скидкой) + guest-гейт (заказ после входа) + «та же позиция у других поставщиков» (ссылки на карточки) + похожие товарыLIVE
Разделы-заглушки нав-бара/services · /companies · /app-market · /partnersКлик по табам шапки, не ведущим в каталогТрилингв «скоро»-заглушка (бейдж + заголовок + «на главную») — нав больше не ведёт в 404LIVE (stub)
Корзина/catalog/cartДобавление позиций, мультипоставщик — переезжает в Stage 3 (нужна авторизованная зона)Stage 3
База компаний (полный листинг)Поиск/листинг поставщиков, рейтингиОтдельный листинг компаний (профиль поставщика уже доступен через карточку выше); сейчас — заглушкаplanned
Stage 1 завершён. Публичный маркетплейс трилингвальный и собран: оболочка (гостевые Topbar/Footer + переключатель языка) → главная → /catalog (с deep-link ?group=) → карточка поставщика → карточка товара. Общий модуль демо-каталога со стабильными id. Тесты: vitest 19 passed, eslint+tsc чисто, браузер LV/EN/RU без ошибок консоли. Дальше: подключение реального v1-каталог-API + листинг «База компаний» — после авторизованной зоны (Stage 2).
LIVE

Stage 2 — Авторизованная зона + связи

Каркас рабочего пространства (/app) на реальном бэкенде (живой JWT + /auth/token/me), без mock-авторизации. Экраны связей построены поверх каркаса и ходят в живой /relationships/ (контракт v1.6.2–v1.6.4). Тест-вход: demo.context.switcher@example.com / demo-pass-123 — менеджер 3 компаний (Demo Buyer SIA · покупатель, Demo Supplier Food SIA · поставщик, Demo Both Trade SIA · оба); переключайте активную компанию в шапке, чтобы увидеть оба вида.

БлокПутьКак тестироватьСтатус
Каркас рабочего пространства/appПройти онбординг (или войти тест-логином) → лендинг показывает активную компанию + роль + режим и живые карточки доменов по роли (Снабжение / Продажи). Гость без сессии на /app → редирект на loginLIVE
Переключатель компании / ролиМеню аккаунта в шапке: сменить активную компанию; для роли «оба» — тумблер Покупатель/Поставщик; выходLIVE
Покупатель · Мои поставщики/app/procurement/suppliersАктивная компания-покупатель → список связей (active/requested/suspended/terminated) с бейджами статусов, поиск по названию, дата запроса. Кнопка «Прекратить» на активных/приостановленных (модалка с причиной); на «ожидает» — пометка «ожидает подтверждения»LIVE
Поставщик · Запросы на подключение/app/sales/requestsАктивная компания-поставщик → входящие запросы; фильтр Ожидают/Все; «Подтвердить» (активирует связь) и «Отклонить» (модалка с причиной). Под-навигация Запросы ↔ ПокупателиLIVE
Поставщик · Мои покупатели/app/sales/buyersАктивные/приостановленные связи; «Приостановить» (причина) / «Возобновить» / «Отключить» (причина)LIVE
Stage 2 завершён. Каркас (session/active-company/mode/cart + guard + authed Topbar + лендинг) и три экрана связей по путям эталона Кости (/app/procurement/suppliers, /app/sales/requests, /app/sales/buyers), трилингв LV/EN/RU с локале-зависимыми датами, живой /relationships/ + переходы (activate/reject/suspend/resume/terminate). E2E на staging: вход тест-логином, оба вида, round-trip приостановка→возобновление подтверждён на бэкенде. Тесты: vitest 28 passed, eslint+tsc(src) чисто, прод-сборка зелёная. Дальше: Stage 3 (корзина/оформление/заказ, бэкенд готов v1.6.6).
LIVE

Stage 3 — Корзина · оформление · заказ

Полный цикл заказа поверх каркаса /app на живом бэкенде (контракт v1.6.5–v1.6.6): каталог → корзина → оформление с гейтами → создание заказов → жизненный цикл + mock-экспорт в NEXX Engine. Тест-вход: demo.context.switcher@example.com / demo-pass-123 (покупатель Demo Buyer SIA уже имеет демо-корзину и ~35 заказов во всех статусах; поставщик Demo Supplier Food SIA видит входящие). Трилингв LV/EN/RU.

БлокПутьКак тестироватьСтатус
Каталог + в корзину/app/catalogАктивная компания-покупатель → товары подключённых поставщиков (поиск + фильтр по поставщику); «В корзину» добавляет позицию (бейдж «× N»). Цена скрыта, если поставщик не опубликовал прайсLIVE
Корзина/app/cartПозиции сгруппированы по поставщикам, ± количество / удаление, подытоги; справа — доставка (резолв из профиля), net/НДС/итог, комментарийLIVE
Оформление + гейты/app/cartГейты на группу: нет связи / прайс не опубликован / сумма ниже мин. заказа / нет адреса. Поставщики без блокировок → «связь активна» и попадают в заказ; «оформить» создаёт по одному заказу на поставщика (выборочный checkout), корзина обновляетсяLIVE
Покупатель · Мои заказы/app/procurement/orders · /{id}История + фильтр по статусу; деталь: степпер created→…→accepted, позиции, итоги, блок экспорта (NEXX Engine mock — статус + внешний ID), действия «принять»/«отменить»LIVE
Поставщик · Заказы/app/sales/orders · /{id}Активная компания-поставщик → входящие заказы; деталь с действиями «подтвердить»/«отгрузить»/«доставлено»/«отменить» (по availableActions); степпер сдвигается по статусуLIVE
Stage 3 завершён. Каталог/корзина/оформление/заказы по путям эталона Кости, живой /cart/ + /checkout/validate/ + /orders/ (+ переходы confirm/ship/deliver/accept/cancel), mock-экспорт order.created (контракт v1.6.6). E2E на staging: гейт мин.заказа (блок → разблок), создание заказа #37 c экспортом MOCK-ORD-37 (done), деталь покупателя и поставщика, цикл подтверждение→отмена, затем откат (заказ отменён, корзина восстановлена). Тесты: vitest 34 passed, eslint+tsc(src) чисто, прод-сборка зелёная. Дальше: Stage 4 (живой коннектор Engine + события жизненного цикла) — вне текущего среза.