food-market/tests/e2e/reports/full-chain-2026-10-07T20-04-36-379Z.md
nns b1bdf5c228
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
fix(migration): не схлопывать разные карточки МойСклада по артикулу + актуализировать объяснение сверки
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 20:11:06 +05:00

264 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# E2E report: full-chain
Запущен: 2026-10-07T20:03:33.268Z
Длительность: 63.1с
**Итог:** 16 ✓ / 0 ✗ / 0 ⚠ / 0 ◯ (всего 16)
## ✓ Step step01_register_and_login: Регистрация организации → вход владельцем → простой режим (скрытые модули 403)
Длительность: 2185мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Вход demo-admin (режим B) | ✓ ожид=token факт=token |
| api | /api/me: роль Admin | ✓ ожид=Admin факт=Admin |
| api | Простой режим включён (advancedMode=false) | ✓ ожид=false факт=false |
| api | Скрытый модуль недоступен: приёмка оптовых отгрузок (demands) | ✓ ожид=403 advanced-mode-required факт=403 https://food-market.kz/errors/advanced-mode-required |
| api | Скрытый модуль недоступен: перемещения (transfers) | ✓ ожид=403 advanced-mode-required факт=403 https://food-market.kz/errors/advanced-mode-required |
| api | Скрытый модуль недоступен: акции (promotions) | ✓ ожид=403 advanced-mode-required факт=403 https://food-market.kz/errors/advanced-mode-required |
| api | Скрытый модуль недоступен: ABC-отчёт | ✓ ожид=403 advanced-mode-required факт=403 https://food-market.kz/errors/advanced-mode-required |
## ✓ Step step02_catalog_and_supplier: Справочники — группа, 5 товаров (разные ед.изм., 1 весовой) + цены + штрихкоды; поставщик
Длительность: 1413мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Валюта KZT в справочнике | ✓ ожид=KZT факт=есть |
| api | Магазин (склад) существует | ✓ ожид=≥1 факт=1 |
| api | Единицы измерения доступны (≥5 различных) | ✓ ожид=≥5 факт=5 |
| api | Выбрано реальных товаров каталога (≥5, штрихкод+цена) | ✓ ожид=≥5 факт=12 |
| api | Среди выбранных есть весовой (информативно) | ✓ ожид=≥0 факт=0 |
| api | Поставщик [e2e] создан | ✓ ожид=200+id факт=201 |
## ✓ Step step02a_employees_and_points: Сотрудники (кассир/кладовщик/админ) + 2 точки продаж; права (API 403); правка/пароль/блокировка
Длительность: 5004мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Системные роли Кассир/Кладовщик есть | ✓ ожид=есть факт=Администратор,Кладовщик,Кассир |
| api | Точка продаж создана: Касса-1 (e2e) 1791403413267 | ✓ ожид=200+id факт=201 |
| api | Точка продаж создана: Касса-2 (e2e) 1791403413267 | ✓ ожид=200+id факт=201 |
| api | Точка 2: переименование + деактивация | ✓ ожид=200 факт=204 |
| api | Точка 2: повторная активация | ✓ ожид=200 факт=204 |
| api | Сотрудник создан: Кассир | ✓ ожид=200+пароль факт=ok |
| api | Сотрудник создан: Кладовщик | ✓ ожид=200+пароль факт=ok |
| api | Сотрудник создан: Администратор | ✓ ожид=200+пароль факт=ok |
| api | Кассир → деньги 403 | ✓ ожид=403 факт=403 |
| api | Кассир → сотрудники/настройки 403 | ✓ ожид=403 факт=403 |
| api | Кассир → продажи доступны | ✓ ожид=200 факт=200 |
| api | Кассир → свои смены доступны (касса) | ✓ ожид=200 факт=200 |
| api | Кладовщик → деньги 403 | ✓ ожид=403 факт=403 |
| api | Кладовщик → приёмки доступны | ✓ ожид=200 факт=200 |
| api | Правка сотрудника (ФИО/тел/должность) | ✓ ожид=200 факт=204 |
| api | Блокировка (увольнение) сотрудника | ✓ ожид=200 факт=204 |
| api | Заблокированный кассир не получает токен | ✓ ожид=отказ факт=400 |
## ✓ Step step03_money_accounts: Деньги — касса, банковский счёт (номер), эквайринг; начальные остатки
Длительность: 1002мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Касса магазина создана (Cash, нач.остаток 50000) | ✓ ожид=200+id факт=201 |
| api | Банковский счёт создан (Bank, номер, нач.остаток 200000) | ✓ ожид=200+id факт=201 |
| api | Счёт эквайринга создан (Acquiring) | ✓ ожид=200+id факт=201 |
| api | Для 2-й точки созданы своя касса и эквайринг | ✓ ожид=2 счёта факт=201/201 |
| api | Отчёт «Деньги»: касса currentBalance = начальный остаток | ✓ ожид=50000 факт=50000 |
| api | Отчёт «Деньги»: банк currentBalance = начальный остаток | ✓ ожид=200000 факт=200000 |
## ✓ Step step04_initial_supplier_debt: Начальный долг поставщику через корректировку взаиморасчётов (WeOwe) → долг = сумме
Длительность: 491мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Корректировка взаиморасчётов создана (WeOwe 100000) | ✓ ожид=200+id факт=201 |
| api | Корректировка проведена | ✓ ожид=204 факт=204 |
| api | Долг поставщика = 100000 (только начальный) | ✓ ожид=100000 факт=100000 |
## ✓ Step step05_supply1_manual: Приёмка №1 вручную (кладовщик) → провести → остатки +кол-во; себестоимость
Длительность: 4926мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Кладовщик авторизован для приёмки | ✓ ожид=token факт=keeper |
| api | Приёмка №1 создана (черновик) | ✓ ожид=200+id факт=201 |
| api | Приёмка №1 проведена | ✓ ожид=204 факт=204 |
| api | Остаток 0bd54f29… +20 | ✓ ожид=20 факт=20 |
| api | Остаток 0cfad6a5… +25 | ✓ ожид=25 факт=25 |
| api | Остаток e6e79bf2… +30 | ✓ ожид=30 факт=30 |
| api | Остаток fbe7d065… +35 | ✓ ожид=35 факт=35 |
| api | Остаток 3a92d8a7… +40 | ✓ ожид=40 факт=40 |
| api | Остаток 9a6a59f8… +45 | ✓ ожид=45 факт=45 |
| api | Остаток db59983d… +50 | ✓ ожид=50 факт=50 |
| api | Остаток 66866675… +55 | ✓ ожид=55 факт=55 |
| api | Остаток a6d3c6a1… +60 | ✓ ожид=60 факт=60 |
| api | Остаток f75a5241… +65 | ✓ ожид=65 факт=65 |
| api | Остаток 519251c8… +70 | ✓ ожид=70 факт=70 |
| api | Остаток 89f82dd6… +75 | ✓ ожид=75 факт=75 |
| api | Себестоимость товара = цене приёмки | ✓ ожид=900 факт=900 |
## ✓ Step step06_supply2_excel: Приёмка №2 из табличной накладной (поставщик не указан → «Поставщик не указан») → провести
Длительность: 5142мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Табличная накладная загружена | ✓ ожид=200+id факт=200 |
| api | Накладная разобрана (не pending/parsing) | ✓ ожид=needs_review факт=needs_review |
| api | Накладная перенесена в приёмку (apply) | ✓ ожид=200+supplyId факт=200 |
| api | Поставщик приёмки №2 = «Поставщик не указан» | ✓ ожид=Поставщик не указан факт=Поставщик не указан |
| api | Приёмка №2 проведена | ✓ ожид=204 факт=204 |
| api | Остаток "BIOBLAS" шампунь +7 | ✓ ожид=7 факт=7 |
| api | Остаток "BIOBLAS" шампунь +4 | ✓ ожид=4 факт=4 |
| api | Остаток "BIOBLAS" шампунь +9 | ✓ ожид=9 факт=9 |
## ✓ Step step07_supply3_photo: Приёмка №3 по фото-накладной → ручное сопоставление → провести; снимки удалены с диска
Длительность: 23243мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Фото-накладная загружена | ✓ ожид=200+id факт=200 |
| api | Фото-накладная распознана (OCR, needs_review) | ✓ ожид=needs_review факт=needs_review |
| api | OCR извлёк хотя бы одну строку | ✓ ожид=≥1 факт=5 |
| api | Фото-накладная перенесена в приёмку | ✓ ожид=200 факт=200 |
| api | Приёмка №3 проведена | ✓ ожид=204 факт=204 |
| api | Снимки удалены с диска после apply (photo → 404) | ✓ ожид=404 факт=404 |
## ✓ Step step08_supplier_payments: Оплата — №1 частично нал из кассы, №2 полностью с банка; статусы + долг = формуле
Длительность: 1161мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Оплата №1 частично наличными из кассы | ✓ ожид=204 факт=201 |
| api | Оплата №2 полностью с банковского счёта | ✓ ожид=204 факт=201 |
| api | Приёмка №1: оплачено = частичной сумме | ✓ ожид=148812 факт=148812 |
| api | Приёмка №2: оплачено полностью | ✓ ожид=18390 факт=18390 |
| api | Долг реального поставщика = начальный + приёмки − оплаты | ✓ ожид=349498 факт=349498 |
## ✓ Step step09_cashier_shift: Смена — размен, 3 продажи (нал/карта/смеш), oversell→отказ, возврат, внесение/выплата, закрытие с расхождением + Z; продажа без смены→отказ
Длительность: 4838мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Смена открыта (размен 5000) | ✓ ожид=200+id факт=200 |
| api | Продажа 1 (наличные) проведена | ✓ ожид=204 факт=204 |
| api | Продажа 2 (карта) проведена | ✓ ожид=204 факт=204 |
| api | Продажа 3 (смешанная) проведена | ✓ ожид=204 факт=204 |
| api | Продажа больше остатка → отказ (409) | ✓ ожид=409 факт=409 |
| api | Возврат по чеку проведён (1 шт, наличные) | ✓ ожид=204 факт=204 |
| api | Внесение и выплата зафиксированы | ✓ ожид=2×200 факт=200/200 |
| api | Смена закрыта | ✓ ожид=200 факт=200 |
| api | Закрытие: «должно быть» (expectedCash) верно | ✓ ожид=14275 факт=14275 |
| api | Закрытие: разница (факт − должно) = расхождению | ✓ ожид=500 факт=500 |
| api | Z-отчёт: нал.продажи и expectedCash сходятся | ✓ ожид=3775/14275 факт=3775/14275 |
| api | Продажа без открытой смены → отказ | ✓ ожид=409 факт=409 |
## ✓ Step step09a_points_binding: Привязка кассира к точкам; параллельные смены на 2 точках не смешивают деньги; продажа на неактивной→отказ
Длительность: 2865мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Вторая смена на той же точке → 409 | ✓ ожид=409 факт=409 |
| api | Параллельная смена на точке 2 открыта | ✓ ожид=200+id факт=200 |
| api | Продажи прошли на обеих точках | ✓ ожид=2×204 факт=204/204 |
| api | Точка 1: касса = размен + её продажа (деньги не смешаны) | ✓ ожид=2500 факт=2500 |
| api | Точка 2: касса = размен + её продажа (деньги не смешаны) | ✓ ожид=3550 факт=3550 |
| api | Смена/продажа на неактивной точке → отказ | ✓ ожид=4xx факт=400 |
## ✓ Step step10_warehouse_ops: Склад — оприходование излишка, списание брака, инвентаризация CSV (часть товаров): непосчитанные не обнулены
Длительность: 2778мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Оприходование излишка (+8) | ✓ ожид=8 факт=8 |
| api | Списание брака (−2) | ✓ ожид=2 факт=2 |
| api | Импорт инвентаризации нашёл 2 товара | ✓ ожид=2 факт=2 |
| api | Инвентаризация (частичная) создана | ✓ ожид=200+id факт=201 |
| api | Инвентаризация проведена | ✓ ожид=204 факт=204 |
| api | Расхождение применено (товар с недостачей → факт) | ✓ ожид=48 факт=48 |
| api | Непосчитанный товар не обнулён | ✓ ожид=53 факт=53 |
## ✓ Step step11_reports: Отчёты — продажи за день, прибыль, остатки на дату, «Деньги», долги; по точкам/кассирам
Длительность: 1150мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Отчёт продаж за день доступен, выручка ≥ 0 | ✓ ожид=≥0 факт=7650 |
| api | Прибыль = выручка − себестоимость (по каждой строке) | ✓ ожид=revenue−cost факт=200 |
| api | Отчёт остатков на дату доступен | ✓ ожид=список факт=200 |
| api | Деньги: касса = начальный − оплата наличными | ✓ ожид=-98812 факт=-98812 |
| api | Деньги: банк = начальный − оплата с банка | ✓ ожид=181610 факт=181610 |
| api | Отчёт долгов поставщикам доступен | ✓ ожид=200 факт=200 |
| api | Отчёт продаж по точкам доступен | ✓ ожид=200 факт=200 |
| api | Отчёт продаж по кассирам доступен | ✓ ожид=200 факт=200 |
## ✓ Step step12_invariants: Инварианты — остаток≡Σдвижений; счёт≡начальный+Σопераций; долг≡формуле; изоляция орг
Длительность: 4912мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Инвариант остаток≡Σдвижений: "BIOBLAS" шампун | ✓ ожид=48 факт=48 |
| api | Инвариант остаток≡Σдвижений: "BIOBLAS" шампун | ✓ ожид=57 факт=57 |
| api | Инвариант остаток≡Σдвижений: "BIOBLAS" шампун | ✓ ожид=53 факт=53 |
| api | Инвариант остаток≡Σдвижений: "BIOBLAS" шампун | ✓ ожид=43 факт=43 |
| api | Инвариант остаток≡Σдвижений: "IQ уроки" книги | ✓ ожид=38 факт=38 |
| api | Инвариант остаток≡Σдвижений: "Ludwik" средств | ✓ ожид=45 факт=45 |
| api | Инвариант остаток≡Σдвижений: "Ludwik" средств | ✓ ожид=50 факт=50 |
| api | Инвариант остаток≡Σдвижений: "Pero" салфетки | ✓ ожид=55 факт=55 |
| api | Инвариант остаток≡Σдвижений: "Pero" салфетки | ✓ ожид=60 факт=60 |
| api | Инвариант остаток≡Σдвижений: "Pero" салфетки | ✓ ожид=65 факт=65 |
| api | Инвариант остаток≡Σдвижений: "Rice Day" GRANA | ✓ ожид=70 факт=70 |
| api | Инвариант остаток≡Σдвижений: "Richmond" Gold | ✓ ожид=75 факт=75 |
| api | Инвариант счёт≡начальный+Σопераций: Касса (e2e) 1791 | ✓ ожид=-98812 факт=-98812 |
| api | Инвариант счёт≡начальный+Σопераций: Касса-2 (e2e) 17 | ✓ ожид=3000 факт=3000 |
| api | Инвариант счёт≡начальный+Σопераций: Банк (e2e) 17914 | ✓ ожид=181610 факт=181610 |
| api | Инвариант счёт≡начальный+Σопераций: Эквайринг (e2e) | ✓ ожид=0 факт=0 |
| api | Инвариант счёт≡начальный+Σопераций: Эквайринг-2 (e2e | ✓ ожид=0 факт=0 |
| api | Инвариант долг≡формуле | ✓ ожид=349498 факт=349498 |
| api | Изоляция: режим B (демо) — проверка через temp-орг в режиме C | ✓ ожид=n/a факт=n/a |
## ✓ Step step13_cancel_rollback: Отмена/откат — отмена приёмки с проданным товаром→отказ; отмена платежа→долг вернулся
Длительность: 775мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Отмена приёмки с проданным товаром → отказ | ✓ ожид=4xx факт=409 |
| api | Отмена платежа №1 | ✓ ожид=204 факт=204 |
| api | Долг вернулся на сумму платежа | ✓ ожид=498310 факт=498310 |
## ✓ Step step14_finalize: Финал — скриншоты ключевых экранов, деактивация e2e-сущностей (режим B)
Длительность: 1222мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Режим B: e2e-сотрудники деактивированы (не удалены) | ✓ ожид=3 факт=3 |
## Summary
- Passed: 16
- Failed: 0
- Warnings: 0
- Skipped: 0
## Critical bugs
Нет.
## UX recommendations
- Скриншоты ключевых экранов: tests/e2e/reports/full-chain/*.png