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

106 lines
4.8 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: 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
Нет.