food-market/tests/e2e/reports/stock-invariant-deep-2026-05-26T06-28-45-322Z.md
nns f2f64646b1 docs(e2e): финальный системный отчёт 2026-05-26 — все 9 сценариев зелёные
Сводный отчёт systemic-2026-05-26.md + зелёные прогоны всех сценариев
(82 шага, 0 падений). За сессию исправлено: refresh-rotation (TokenId +
zero reuse-leeway), сериализуемое проведение приёмки против lost update,
MoySklad BaseUrl в конфиг. Покрыты впервые: конкурентность приёмок,
дашбордная выручка, импорт MoySklad (идемпотентность/маппинг). Зафиксированы
gap'ы по нереализованным отчётам (профит/ABC/экспорт, ТЗ 2.12).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 11:30:46 +05:00

4.1 KiB
Raw Blame History

E2E report: stock-invariant-deep

Запущен: 2026-05-26T06:28:37.859Z Длительность: 5.9с

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

✓ Step step01_bootstrap: Орг + admin + product (стартовый остаток 0)

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

Тип Проверка Результат
api Bootstrap product создан ✓ d8c6c47a-dd41-48de-b0a0-9cc35769a8cb
db Stock.Quantity == 0 ✓ actual=0
db Stock.Quantity == Σ StockMovement (invariant) ✓ stock=0 sum=0

✓ Step step02_supply_a_qty_20: Supply A qty=20 → invariant stock=20, Σ movement=20

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

Тип Проверка Результат
api Supply A qty=20 проведена
db Stock.Quantity == 20 ✓ actual=20
db Stock.Quantity == Σ StockMovement (invariant) ✓ stock=20 sum=20

✓ Step step03_sale_a_qty_5: RetailSale A qty=5 → invariant stock=15, Σ movement=15

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

Тип Проверка Результат
api Sale A qty=5 проведена
db Stock.Quantity == 15 ✓ actual=15
db Stock.Quantity == Σ StockMovement (invariant) ✓ stock=15 sum=15

✓ Step step04_supply_b_qty_10: Supply B qty=10 → invariant stock=25, Σ movement=25

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

Тип Проверка Результат
api Supply B qty=10 проведена
db Stock.Quantity == 25 ✓ actual=25
db Stock.Quantity == Σ StockMovement (invariant) ✓ stock=25 sum=25

✓ Step step05_sale_b_qty_8: RetailSale B qty=8 → invariant stock=17, Σ movement=17

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

Тип Проверка Результат
api Sale B qty=8 проведена
db Stock.Quantity == 17 ✓ actual=17
db Stock.Quantity == Σ StockMovement (invariant) ✓ stock=17 sum=17

✓ Step step06_unpost_sale_a: Unpost RetailSale A → invariant stock=22, Σ movement=22

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

Тип Проверка Результат
api Unpost Sale A → 200/204 ✓ status=204
db Stock.Quantity == 22 ✓ actual=22
db Stock.Quantity == Σ StockMovement (invariant) ✓ stock=22 sum=22

✓ Step step07_repost_sale_a: Re-post RetailSale A → invariant stock=17, Σ movement=17

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

Тип Проверка Результат
api Re-post Sale A → 200/204 ✓ status=204
db Stock.Quantity == 17 ✓ actual=17
db Stock.Quantity == Σ StockMovement (invariant) ✓ stock=17 sum=17

✓ Step step08_movement_count_correct: Всего StockMovement по продукту = 6 строк (2 supply + 2 sale + reverse sale + repost sale)

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

Тип Проверка Результат
db StockMovement содержит как минимум 4 строки ✓ count=6
db StockMovement не более 8 строк (нет лишних дублей) ✓ count=6

✓ Step step09_concurrent_sales_serialized: Два POST /post одновременно на один остаток — один 200, второй 409

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

Тип Проверка Результат
api Два Draft созданы
api Ровно один post 2xx, второй 4xx (5xx) ✓ statuses=204,409
db Stock >= 0 (не минус из-за гонки) ✓ stock=7
db Stock == Σ Movement после гонки ✓ stock=7 sum=7

✓ Step step10_final_invariant: Финальный invariant после всех операций сохраняется

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

Тип Проверка Результат
db Финальный invariant Stock == Σ Movement ✓ stock=7 sum=7

Summary

  • Passed: 10
  • Failed: 0
  • Warnings: 0
  • Skipped: 0

Critical bugs

Нет.