name: catalog-edge description: | Краевые случаи CRUD справочников: дубликаты, FK-защита при удалении, валидация пустых/слишком длинных/отрицательных значений, циклы в иерархии групп. Все эти проверки защищают целостность справочников. preconditions: reset_db: true smoke_login_super_admin: true steps: - id: step01_bootstrap title: "Орг + admin + lookups" - id: step02_empty_product_name_rejected title: "POST product с пустым name → 400" - id: step03_negative_price_rejected title: "POST product с отрицательной ценой amount=-100 → 400" - id: step04_oversized_name_truncated_or_rejected title: "POST product с name > 500 символов → 400 (превышение maxLength)" - id: step05_duplicate_product_article title: "POST второго product с тем же article → 4xx (если уникальный) или OK + проверка БД" - id: step06_self_parent_group_rejected title: "POST product-group с parentId=собственный id (цикл) → 400" - id: step07_delete_group_with_children title: "DELETE group у которой есть подгруппы → 409" - id: step08_delete_group_with_products title: "DELETE group в которой есть продукты → 409" - id: step09_delete_unit_with_products title: "DELETE enable у unit, на которую ссылаются продукты → 409" - id: step10_delete_system_price_type title: "DELETE PriceType.IsSystem=true → 409" - id: step11_second_retail_price_type title: "POST PriceType с IsRetail=true когда уже есть Retail → 409" - id: step12_delete_counterparty_with_supply title: "DELETE counterparty который использован в Supply → 409"