4 шага: стартовая приёмка, две разные приёмки одного товара одновременно, двойное проведение одной приёмки, финальный инвариант. Главный assert — Stock.Quantity == Σ StockMovement.Quantity под гонкой + корректность скользящего среднего Cost. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
25 lines
1.5 KiB
YAML
25 lines
1.5 KiB
YAML
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"
|