From 4c2841db5b88585595d9ab4ddf6c62a7db799051 Mon Sep 17 00:00:00 2001 From: nns Date: Fri, 29 May 2026 16:46:32 +0500 Subject: [PATCH] =?UTF-8?q?docs(stage):=20=D0=BF=D1=83=D0=BD=D0=BA=D1=82?= =?UTF-8?q?=202=20done=20=E2=80=94=20=D0=BA=D0=B0=D1=82=D0=B0=D0=BB=D0=BE?= =?UTF-8?q?=D0=B3=20CRUD=20+=20multi-tenant=20=D0=B7=D0=B5=D0=BB=D1=91?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9,=202=20=D1=84=D0=B8=D0=BA=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/stage-testing-progress.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/stage-testing-progress.md b/docs/stage-testing-progress.md index fd82f04..c493904 100644 --- a/docs/stage-testing-progress.md +++ b/docs/stage-testing-progress.md @@ -19,7 +19,7 @@ ## Чек-лист - [x] **1. Smoke + signup flow** — signup создаёт org "TestStage", bootstrap (магазин/роли/единицы/группа "Все товары"), логин даёт access+refresh. *(stage-smoke.yml: 5/5 ✓)* -- [ ] **2. Каталог (товары/группы/контрагенты)** — UI CRUD, дубликаты, дочерние группы, FK-защита, multi-tenant изоляция (2 org). +- [x] **2. Каталог (товары/группы/контрагенты)** — UI CRUD, дубликаты, дочерние группы, FK-защита, multi-tenant изоляция (2 org). *(stage-catalog.yml: 6/6 ✓, 2 фикса)* - [ ] **3. Склад. Enter (Оприходование)** — UI создание/проведение/Unpost → Stock + StockMovement; RowVersion concurrency; multi-tenant. - [ ] **4. Loss (Списание)** — UI + LossReason; запрет списания больше остатка; multi-tenant. - [ ] **5. Transfer (Перемещение)** — два склада, From!=To, atomic post, Unpost без orphan-движений; multi-tenant. @@ -40,6 +40,14 @@ - Проверена доступность `https://test.admin.food-market.kz/health/ready` → 200. - Создан этот файл из задания. +### 2026-05-29 — пункт 2 ✓ (2 фикса в проде) + +- Сценарий `stage-catalog` (6 шагов): 2 org через signup, продукты CRUD, контрагенты CRUD, multi-tenant изоляция. +- **Bug fix #1 — PUT product с новым barcode'ом валился 409.** Тот же EF8-баг что в TD-6 на документах: nav-collection.Add при наличии client-side Id даёт UPDATE 0 affected. Чиним паттерном ExecuteDelete+DbSet.Add — как в Supplies/Demands/RetailSales. Воспроизведение: создал продукт с 1 barcode → PUT с 2 barcodes → 409. Фикс → 204. +- **Bug fix #2 — IX_products_OrganizationId_Article не уникальный.** Контроллер ловил нарушение по имени индекса (`catch (DbUpdateException ex) when (...Contains("IX_products_..."))`), но индекс был неуникальным. Дубликаты артикулов проскакивали. Миграция Phase8d делает индекс UNIQUE; existing-дубликаты нумеруются `-2/-3/…`. +- Multi-tenant изоляция строгая: org B → 404 на products/counterparties org A (GET/PUT/DELETE), списки пустые. +- Commit `d54e1cb`. Deploy на stage прошёл, retest зелёный. + ### 2026-05-29 — пункт 1 ✓ - Сценарий `stage-smoke` (5 шагов): `tests/e2e/scenarios/stage-smoke.{yml,steps.ts}`.