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"
