food-market/tests/e2e/scenarios/stock-concurrency.yml
nns ad25e12ce4 test(e2e): scenario stock-concurrency — конкурентное проведение приёмок
4 шага: стартовая приёмка, две разные приёмки одного товара одновременно,
двойное проведение одной приёмки, финальный инвариант. Главный assert —
Stock.Quantity == Σ StockMovement.Quantity под гонкой + корректность
скользящего среднего Cost.

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

25 lines
1.5 KiB
YAML
Raw Permalink 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.

name: stock-concurrency
description: |
Конкурентные операции со складом на стороне ПРИЁМОК (Supply.Post).
RetailSale.Post уже под Serializable (см. stock-invariant-deep step09),
а Supply.Post исторически шёл на дефолтной изоляции — отсюда потеря
обновлений Stock и гонка в расчёте скользящего среднего Cost при
одновременном проведении. Проверяем главный инвариант
Stock.Quantity == Σ StockMovement.Quantity под нагрузкой:
- две РАЗНЫЕ приёмки одного товара проводятся одновременно,
- одна и та же приёмка проводится дважды одновременно (double-post).
preconditions:
reset_db: true
smoke_login_super_admin: true
steps:
- id: step01_bootstrap
title: "Орг + товар + стартовая приёмка qty=5 @100 (Stock=5, Cost=100)"
- id: step02_concurrent_distinct_supplies
title: "Две разные приёмки (10@100 и 10@120) одновременно → Stock=25, инвариант, Cost=108"
- id: step03_double_post_same_supply
title: "Двойное проведение ОДНОЙ приёмки (7@100) одновременно → применяется один раз"
- id: step04_final_invariant
title: "Финальный инвариант Stock == Σ StockMovement"