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>
4.8 KiB
4.8 KiB
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
Нет.