food-market/tests/e2e/reports/full-chain-2026-10-08T20-28-47-547Z.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

22 KiB
Raw Permalink Blame History

E2E report: full-chain

Запущен: 2026-10-08T20:27:42.485Z Длительность: 65.1с

Итог: 16 ✓ / 0 ✗ / 0 ⚠ / 0 ◯ (всего 16)

✓ Step step01_register_and_login: Регистрация организации → вход владельцем → простой режим (скрытые модули 403)

Длительность: 2496мс

Тип Проверка Результат
api Регистрация организации e2e-fullchain + вход владельцем ✓ ожид=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 весовой) + цены + штрихкоды; поставщик

Длительность: 2224мс

Тип Проверка Результат
api Валюта KZT в справочнике ✓ ожид=KZT факт=есть
api Магазин (склад) существует ✓ ожид=≥1 факт=1
api Единицы измерения доступны (≥5 различных) ✓ ожид=≥5 факт=5
api Группа товаров создана ✓ ожид=200+id факт=201
api Создано 5 товаров (разные ед.изм.) ✓ ожид=5 факт=5
api Один товар весовой (дробное кол-во) ✓ ожид=1 факт=1
api Товар находится по штрихкоду ✓ ожид=200 факт=200
api Поставщик создан (БИН+телефон) ✓ ожид=200+id факт=201

✓ Step step02a_employees_and_points: Сотрудники (кассир/кладовщик/админ) + 2 точки продаж; права (API 403); правка/пароль/блокировка

Длительность: 7486мс

Тип Проверка Результат
api Штрихкоды EAN-13 с валидной контрольной цифрой ✓ ожид=0 неверных факт=0/5
api Системные роли Кассир/Кладовщик есть ✓ ожид=есть факт=Администратор,Кладовщик,Кассир
api Точка продаж создана: Касса-1 fc1791491262483 ✓ ожид=200+id факт=201
api Точка продаж создана: Касса-2 fc1791491262483 ✓ ожид=200+id факт=201
api Точка 2: переименование + деактивация ✓ ожид=200 факт=204
api Точка 2: повторная активация ✓ ожид=200 факт=204
api Сотрудник создан: Кассир ✓ ожид=200+пароль факт=ok
api Сотрудник создан: Кладовщик ✓ ожид=200+пароль факт=ok
api Сотрудник создан: Администратор ✓ ожид=200+пароль факт=ok
api Кассир → деньги (API) 403 ✓ ожид=403 факт=403
api Кассир → платежи (API) 403 ✓ ожид=403 факт=403
api Кассир → сотрудники/настройки (API) 403 ✓ ожид=403 факт=403
api Кассир → продажи доступны ✓ ожид=200 факт=200
api Кассир → свои смены доступны (касса) ✓ ожид=200 факт=200
api Кассир сменил пароль ✓ ожид=204 факт=200
api Вход по новому паролю — успех ✓ ожид=успех факт=200
api Вход по старому паролю — отказ ✓ ожид=отказ факт=400
api Кладовщик → деньги 403 ✓ ожид=403 факт=403
api Кладовщик → приёмки доступны ✓ ожид=200 факт=200
api Правка сотрудника (ФИО/тел/должность) ✓ ожид=200 факт=204
api Блокировка (увольнение) сотрудника ✓ ожид=200 факт=204
api Заблокированный кассир не получает токен ✓ ожид=отказ факт=400
api Заблокированный кассир: обновление токена (refresh) → отказ ✓ ожид=отказ факт=400

✓ Step step03_money_accounts: Деньги — касса, банковский счёт (номер), эквайринг; начальные остатки

Длительность: 1211мс

Тип Проверка Результат
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) → долг = сумме

Длительность: 841мс

Тип Проверка Результат
api Корректировка взаиморасчётов создана (WeOwe 100000) ✓ ожид=200+id факт=201
api Корректировка проведена ✓ ожид=204 факт=204
api Долг поставщика = 100000 (только начальный) ✓ ожид=100000 факт=100000

✓ Step step05_supply1_manual: Приёмка №1 вручную (кладовщик) → провести → остатки +кол-во; себестоимость

Длительность: 2880мс

Тип Проверка Результат
api Кладовщик авторизован для приёмки ✓ ожид=token факт=keeper
api Приёмка №1 создана (черновик) ✓ ожид=200+id факт=201
api Приёмка №1 проведена ✓ ожид=204 факт=204
api Остаток 2c431ed6… +12.5 ✓ ожид=12.5 факт=12.5
api Остаток 1b17444d… +25 ✓ ожид=25 факт=25
api Остаток d69bed51… +30 ✓ ожид=30 факт=30
api Остаток 39be51c4… +35 ✓ ожид=35 факт=35
api Остаток 3aa12e64… +40 ✓ ожид=40 факт=40
api Себестоимость товара = цене приёмки ✓ ожид=300 факт=300

✓ Step step06_supply2_excel: Приёмка №2 из табличной накладной (поставщик не указан → «Поставщик не указан») → провести

Длительность: 5762мс

Тип Проверка Результат
api Табличная накладная загружена ✓ ожид=200+id факт=200
api Накладная разобрана (не pending/parsing) ✓ ожид=needs_review факт=needs_review
api Накладная перенесена в приёмку (apply) ✓ ожид=200+supplyId факт=200
api Поставщик приёмки №2 = «Поставщик не указан» ✓ ожид=Поставщик не указан факт=Поставщик не указан
api Приёмка №2 проведена ✓ ожид=204 факт=204
api Остаток Товар 1 fc17914912 +7 ✓ ожид=7 факт=7
api Остаток Товар 2 fc17914912 +4 ✓ ожид=4 факт=4
api Остаток Товар 3 fc17914912 +9 ✓ ожид=9 факт=9

✓ Step step07_supply3_photo: Приёмка №3 по фото-накладной → ручное сопоставление → провести; снимки удалены с диска

Длительность: 19934мс

Тип Проверка Результат
api Фото-накладная загружена ✓ ожид=200+id факт=id
api Фото-накладная распознана (OCR, needs_review; до 3 попыток) ✓ ожид=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 полностью с банка; статусы + долг = формуле

Длительность: 2153мс

Тип Проверка Результат
api Оплата №1 частично наличными из кассы (≤ остатка) ✓ ожид=204 факт=201
api Оплата больше остатка кассы → отказ (409 insufficient-funds) ✓ ожид=409 факт=409
api Оплата №2 полностью с банковского счёта ✓ ожид=204 факт=201
api Приёмка №1: оплачено = частичной сумме ✓ ожид=30000 факт=30000
api Приёмка №2: оплачено полностью ✓ ожид=8640 факт=8640
api Долг реального поставщика = начальный + приёмки − оплаты ✓ ожид=181030 факт=181030

✓ Step step09_cashier_shift: Смена — размен, 3 продажи (нал/карта/смеш), oversell→отказ, возврат, внесение/выплата, закрытие с расхождением + Z; продажа без смены→отказ

Длительность: 6018мс

Тип Проверка Результат
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) верно ✓ ожид=12950 факт=12950
api Закрытие: разница (факт − должно) = расхождению ✓ ожид=500 факт=500
api Z-отчёт: нал.продажи и expectedCash сходятся ✓ ожид=1450/12950 факт=1450/12950
api Деньги смены в остатке кассы (касса += факт − размен) ✓ ожид=28450 факт=28450
api Продажи картой в остатке эквайринга ✓ ожид=1150 факт=1150
api Продажа без открытой смены → отказ ✓ ожид=409 факт=409

✓ Step step09a_points_binding: Привязка кассира к точкам; параллельные смены на 2 точках не смешивают деньги; продажа на неактивной→отказ

Длительность: 2848мс

Тип Проверка Результат
api Кассир авторизован для проверки привязки ✓ ожид=token факт=ok
api Кассир открывает смену на НЕзакреплённой точке 2 → отказ ✓ ожид=4xx факт=400
api Кассир открывает смену на закреплённой точке 1 → успех ✓ ожид=200+id факт=200
api Вторая смена на той же точке → 409 ✓ ожид=409 факт=409
api Параллельная смена на точке 2 открыта ✓ ожид=200+id факт=200
api Продажи прошли на обеих точках ✓ ожид=2×204 факт=204/204
api Точка 1: касса = размен + её продажа (деньги не смешаны) ✓ ожид=1500 факт=1500
api Точка 2: касса = размен + её продажа (деньги не смешаны) ✓ ожид=2700 факт=2700
api Смена/продажа на неактивной точке → отказ ✓ ожид=4xx факт=400

✓ Step step10_warehouse_ops: Склад — оприходование излишка, списание брака, инвентаризация CSV (часть товаров): непосчитанные не обнулены

Длительность: 7138мс

Тип Проверка Результат
api Кладовщик → оприходование доступно (не 403) ✓ ожид=<400 факт=201
api Кладовщик → списание доступно (не 403) ✓ ожид=<400 факт=201
api Кладовщик → инвентаризация доступна (не 403) ✓ ожид=200 факт=200
api Пустая инвентаризация проведена (одно расхождение) ✓ ожид=204 факт=204
api Пустая инвентаризация: непосчитанный НЕ обнулён ✓ ожид=35 факт=35
api Пустая инвентаризация: посчитанный применён (недостача 1) ✓ ожид=52 факт=52
api Оприходование излишка (+8) ✓ ожид=8 факт=8
api Списание брака (−2) ✓ ожид=2 факт=2
api Импорт инвентаризации нашёл 2 товара ✓ ожид=2 факт=2
api Инвентаризация (частичная) создана ✓ ожид=200+id факт=201
api Инвентаризация проведена ✓ ожид=204 факт=204
api Расхождение применено (товар с недостачей → факт) ✓ ожид=40.5 факт=40.5
api Непосчитанный товар не обнулён ✓ ожид=52 факт=52
api Инвентаризация завершена (Completed) ✓ ожид=204 факт=204
api После завершения остаток НЕ изменился ✓ ожид=40.5 факт=40.5
api Создано оприходование излишков ✓ ожид=200+enterId факт=200
api В инвентаризации виден связанный документ ✓ ожид=true факт=true
api Оприходование проведено ✓ ожид=204 факт=204
api Излишек применён оприходованием (+3) ✓ ожид=3 факт=3
api Оприходование «на основании инвентаризации №…» ✓ ожид=инв.№ факт=И-2026-000003
api unpost при проведённом связанном → 409 (не удаляет) ✓ ожид=409 факт=409
api Отмена результатов (cancel-results) → 200 ✓ ожид=200 факт=200
api После отмены результатов остаток вернулся ✓ ожид=40.5 факт=40.5
api Оприходование НЕ удалено, стало черновиком ✓ ожид=draft факт=200/0
api Связанный документ остался (черновик) ✓ ожид=true факт=true
api Повторное проведение оприходования ✓ ожид=204 факт=204
api После повторного проведения остаток снова = факт (+3) ✓ ожид=3 факт=3

✓ Step step11_reports: Отчёты — продажи за день, прибыль, остатки на дату, «Деньги», долги; по точкам/кассирам

Длительность: 1031мс

Тип Проверка Результат
api Отчёт продаж за день доступен, выручка ≥ 0 ✓ ожид=≥0 факт=3300
api Прибыль = выручка − себестоимость (по каждой строке) ✓ ожид=revenue−cost факт=200
api Отчёт остатков на дату доступен ✓ ожид=список факт=200
api Деньги: касса = начальный − оплаты + движения смен ✓ ожид=28950 факт=28950
api Деньги: банк = начальный − оплата с банка ✓ ожид=191360 факт=191360
api Деньги: эквайринг = продажи картой − возвраты картой ✓ ожид=1150 факт=1150
api Отчёт долгов поставщикам доступен ✓ ожид=200 факт=200
api Выручка по точкам в сумме = общей выручке дня ✓ ожид=3300 факт=3300
api Выручка по кассирам в сумме = общей выручке дня ✓ ожид=3300 факт=3300

✓ Step step12_invariants: Инварианты — остаток≡Σдвижений; счёт≡начальный+Σопераций; долг≡формуле; изоляция орг

Длительность: 2343мс

Тип Проверка Результат
api Инвариант остаток≡Σдвижений: Товар 1 fc179149 ✓ ожид=43.5 факт=43.5
api Инвариант остаток≡Σдвижений: Товар 2 fc179149 ✓ ожид=57 факт=57
api Инвариант остаток≡Σдвижений: Товар 3 fc179149 ✓ ожид=52 факт=52
api Инвариант остаток≡Σдвижений: Товар 4 fc179149 ✓ ожид=43 факт=43
api Инвариант остаток≡Σдвижений: Товар 5 fc179149 ✓ ожид=38 факт=38
api Инвариант Касса ≡ независимому расчёту (нач+платежи+смены) ✓ ожид=28950 факт=28950
api Инвариант Банк ≡ независимому расчёту (нач+платежи+смены) ✓ ожид=191360 факт=191360
api Инвариант Эквайринг ≡ независимому расчёту (нач+платежи+смены) ✓ ожид=1150 факт=1150
api Инвариант Касса-2 ≡ независимому расчёту (нач+платежи+смены) ✓ ожид=3700 факт=3700
api Инвариант долг≡формуле ✓ ожид=181030 факт=181030
api Изоляция: demo-admin НЕ видит товар e2e-орг ✓ ожид=404/403 факт=404

✓ Step step13_cancel_rollback: Отмена/откат — отмена приёмки с проданным товаром→отказ; отмена платежа→долг вернулся

Длительность: 691мс

Тип Проверка Результат
api Отмена приёмки с проданным товаром → отказ ✓ ожид=4xx факт=409
api Отмена платежа №1 ✓ ожид=204 факт=204
api Долг вернулся на сумму платежа ✓ ожид=211030 факт=211030

✓ Step step14_finalize: Финал — скриншоты ключевых экранов, деактивация e2e-сущностей (режим B)

Длительность: 1мс

Тип Проверка Результат
api Режим C: temp-орг чистится ночной уборкой (>3 дней) ✓ ожид=cleanup факт=ночь

Summary

  • Passed: 16
  • Failed: 0
  • Warnings: 0
  • Skipped: 0

Critical bugs

Нет.

UX recommendations

  • Скриншоты ключевых экранов: tests/e2e/reports/full-chain/*.png