# E2E report: catalog-edge Запущен: 2026-05-26T06:28:32.030Z Длительность: 1.6с **Итог:** 12 ✓ / 0 ✗ / 0 ⚠ / 0 ◯ (всего 12) ## ✓ Step step01_bootstrap: Орг + admin + lookups Длительность: 1128мс | Тип | Проверка | Результат | |---|---|---| | api | Bootstrap lookups получены | ✓ | ## ✓ Step step02_empty_product_name_rejected: POST product с пустым name → 400 Длительность: 10мс | Тип | Проверка | Результат | |---|---|---| | api | POST product с пустым name → 400 | ✓ status=400 {"type":"https://tools.ietf.org/html/rfc9110#section-15.5.1","title":"One or more validation errors occurred.","status": | ## ✓ Step step03_negative_price_rejected: POST product с отрицательной ценой amount=-100 → 400 Длительность: 8мс | Тип | Проверка | Результат | |---|---|---| | api | POST product с amount=-100 → 400 | ✓ status=400 {"type":"https://tools.ietf.org/html/rfc9110#section-15.5.1","title":"One or more validation errors occurred.","status": | ## ✓ Step step04_oversized_name_truncated_or_rejected: POST product с name > 500 символов → 400 (превышение maxLength) Длительность: 10мс | Тип | Проверка | Результат | |---|---|---| | api | POST product с name=600 chars → 4xx | ✓ status=400 {"type":"https://tools.ietf.org/html/rfc9110#section-15.5.1","title":"One or more validation errors | ## ✓ Step step05_duplicate_product_article: POST второго product с тем же article → 4xx (если уникальный) или OK + проверка БД Длительность: 77мс | Тип | Проверка | Результат | |---|---|---| | api | POST 1-й product с article OK | ✓ status=201 | | api | POST 2-й product с тем же article (gap) | ✓ не запрещено сервером | ## ✓ Step step06_self_parent_group_rejected: POST product-group с parentId=собственный id (цикл) → 400 Длительность: 48мс | Тип | Проверка | Результат | |---|---|---| | api | PUT product-group parentId=self → 4xx | ✓ status=400 {"error":"ParentId cannot be self"} | ## ✓ Step step07_delete_group_with_children: DELETE group у которой есть подгруппы → 409 Длительность: 73мс | Тип | Проверка | Результат | |---|---|---| | api | DELETE group с детьми → 4xx | ✓ status=400 {"error":"Системную группу удалить нельзя."} | ## ✓ Step step08_delete_group_with_products: DELETE group в которой есть продукты → 409 Длительность: 10мс | Тип | Проверка | Результат | |---|---|---| | api | DELETE group с продуктами → 4xx | ✓ status=400 {"error":"Системную группу удалить нельзя."} | ## ✓ Step step09_delete_unit_with_products: DELETE enable у unit, на которую ссылаются продукты → 409 Длительность: 29мс | Тип | Проверка | Результат | |---|---|---| | api | DELETE enable у unit с продуктами → 4xx | ✓ status=409 {"error":"Единица используется в товарах. Перепривяжите товары на другую единицу прежде чем отключать.","products":["First","Second"]} | ## ✓ Step step10_delete_system_price_type: DELETE PriceType.IsSystem=true → 409 Длительность: 37мс | Тип | Проверка | Результат | |---|---|---| | api | DELETE системной PriceType → 4xx | ✓ status=400 {"error":"Системная запись не может быть удалена."} | ## ✓ Step step11_second_retail_price_type: POST PriceType с IsRetail=true когда уже есть Retail → 409 Длительность: 52мс | Тип | Проверка | Результат | |---|---|---| | api | POST второй IsRetail PriceType — 201 (флаг перенесён) или 4xx | ✓ status=201 | | api | IsRetail=true ровно у одного PriceType (uniqueness) | ✓ count=1 | ## ✓ Step step12_delete_counterparty_with_supply: DELETE counterparty который использован в Supply → 409 Длительность: 109мс | Тип | Проверка | Результат | |---|---|---| | api | DELETE counterparty с Supply → 4xx | ✓ status=409 {"error":"Нельзя удалить контрагента: он используется в документах или товарах.","usedAsSupplier":true,"usedAsCustomer": | ## Summary - Passed: 12 - Failed: 0 - Warnings: 0 - Skipped: 0 ## Critical bugs Нет. ## Logic gaps - Article у Product не уникален per-org — два товара могут иметь одинаковый артикул, путаница в учёте.