food-market/tests/e2e/reports/documents-edge-2026-05-23T07-32-53-747Z.md
nns 17a454cce5 test(e2e): scenario documents-edge — критичные edge-кейсы посту
10 шагов покрывают самую опасную зону системы (потеря денег/остатков):

1. Bootstrap: орг + admin + product + supply (10 шт по 100 KZT).
2. Supply.Post → stock=10 invariant.
3. RetailSale qty=15 (>stock 10) → POST /post → 409 «Недостаточно».
4. После заблокированного post: stock=10 + Stock == Σ StockMovement.
5. RetailSale PaidCash+PaidCard < Total → 4xx (валидация платежа).
6. PUT проведённой Supply → 409.
7. DELETE проведённой Supply → 409.
8. После Sale qty=5: unpost Supply qty=10 → 409 (stock уйдёт в минус).
9. Дубль штрихкода в одной орге → 4xx.
10. Тот же штрихкод в другой орге → 201 (per-tenant unique).

Запуск: `bash tests/e2e/run.sh documents-edge --api-only`.
Все 10 шагов зелёные после фиксов RetailSale.Post + Supply.Unpost.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 12:33:51 +05:00

4.8 KiB
Raw Blame History

E2E report: documents-edge

Запущен: 2026-05-23T07:32:43.038Z Длительность: 7.8с

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

✓ Step step01_bootstrap: SuperAdmin создаёт орг Test + admin, делаем product + supply (10 шт по 100 KZT)

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

Тип Проверка Результат
api Орг + админ созданы ✓ org=f08ddf4a-8b1f-47e6-8c77-9a819330266c
api Counterparty создан
api Product создан ✓ fbcffe23-a038-4c55-b68e-255a8fb06ebf
api Supply Draft создана ✓ afe0920c-f338-4009-9e65-9df63c55f995

✓ Step step02_post_supply_stock_10: Supply провести: stock=10, ReferencePrice=100, Cost=100

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

Тип Проверка Результат
api Supply.Post → 200/204 ✓ actual=204
db Stock.Quantity == 10 ✓ qty=10

✓ Step step03_oversell_blocked: RetailSale qty=15 (больше остатка 10), POST /post возвращает 409

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

Тип Проверка Результат
api POST RetailSale Draft (qty=15) ✓ actual=201 {"id":"2d69366b-c3b3-49fb-a230-fc5e6bc49ce5","number":"ПР-2026-000001","date":"2026-05-23T07:32:51Z","status":0,"storeId
api POST /post → 409 (oversell) ✓ actual=409 {"error":"Недостаточно остатка для проведения чека.","lines":[{"productId":"fbcffe23-a038-4c55-b68e-255a8fb06ebf","produ

✓ Step step04_oversell_stock_unchanged: После заблокированного post stock остался 10, StockMovement не добавлен

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

Тип Проверка Результат
db Stock остался 10 после заблокированного post ✓ qty=10
db Stock == Σ StockMovement (invariant) ✓ sum=10 qty=10

✓ Step step05_payment_mismatch_blocked: RetailSale с PaidCash+PaidCard не равной Total отвергается на post

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

Тип Проверка Результат
api Платёж ≠ Total → 4xx на post ✓ actual=400 {"error":"Сумма оплаты 300.00 меньше итога 400.00. Доплатите или измените позиции чека.","field":"PaidCash"}

✓ Step step06_edit_posted_supply_blocked: PUT проведённой Supply (Posted) возвращает 409

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

Тип Проверка Результат
api PUT проведённой Supply → 409 ✓ actual=409 {"error":"Только черновик может быть изменён. Сначала отмени проведение."}

✓ Step step07_delete_posted_supply_blocked: DELETE проведённой Supply возвращает 409

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

Тип Проверка Результат
api DELETE проведённой Supply → 409 ✓ actual=409 {"error":"Нельзя удалить проведённый документ. Сначала отмени проведение."}

✓ Step step08_unpost_negative_blocked: После Sale qty=5 unpost Supply qty=10 возвращает 409 (stock минус)

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

Тип Проверка Результат
api Sale qty=5 проведён ✓ actual=204
api Unpost Supply при stock<unpost-qty → 409 ✓ actual=409 {"error":"Нельзя отменить проведение: остаток уйдёт в минус (часть товара уже расходована).","lines":[{"productId":"fbcf

✓ Step step09_barcode_unique_within_org: Дубль штрихкода в одной орге, POST второго product отвергается

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

Тип Проверка Результат
api POST product с тем же barcode → 4xx ✓ actual=400 {"error":"Штрихкод 201568651undefined5 уже используется товаром «Edge Product 1779521563038»."}

✓ Step step10_barcode_per_tenant: Тот же штрихкод в другой орге допустим (per-tenant unique)

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

Тип Проверка Результат
api POST product с тем же barcode в другой орге → 201 ✓ actual=201 {"id":"7d885a0a-7ca6-4154-9d46-58a4d6550a83","name":"Tenant-2 product (same barcode)","article":"1","description":null,"
db В product_barcodes 2 записи с этим Code (одна на орг) ✓ count=2

Summary

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

Critical bugs

Нет.