- auth-edge (10 шагов): refresh rotation/redemption, подделка JWT, деактивированный user, архивная орг, повторный/orphan signup. - catalog-edge (12 шагов): валидация товара, дубль артикула, удаление групп/единиц/системных типов цен с зависимостями, FK-guard контрагента. - stock-invariant-deep (10 шагов): инвариант Stock == SUM(StockMovement) через post/unpost/repost и конкурентные продажи. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
32 lines
1.9 KiB
YAML
32 lines
1.9 KiB
YAML
name: auth-edge
|
||
description: |
|
||
Краевые случаи аутентификации и сессий. Регресс на refresh-token flow
|
||
(получение, ротация, отзыв), подделка JWT, повторный signup, вход
|
||
деактивированного юзера, вход юзера архивной орги.
|
||
|
||
preconditions:
|
||
reset_db: true
|
||
smoke_login_super_admin: true
|
||
|
||
steps:
|
||
- id: step01_bootstrap_admin
|
||
title: "SuperAdmin создаёт орг + админа, получаем access+refresh"
|
||
- id: step02_refresh_token_works
|
||
title: "Refresh: старый access обменивается на новые access+refresh"
|
||
- id: step03_refresh_token_rotates
|
||
title: "После refresh — старый refresh-token больше не работает (rotation)"
|
||
- id: step04_invalid_refresh_rejected
|
||
title: "Невалидный refresh-token возвращает 400 invalid_grant"
|
||
- id: step05_tampered_jwt_rejected
|
||
title: "JWT с подделанным org_id (изменён без переподписи) отшивается 401"
|
||
- id: step06_random_jwt_rejected
|
||
title: "Случайный JWT-подобный токен из другого ключа отшивается 401"
|
||
- id: step07_deactivated_user_blocked
|
||
title: "Деактивация User.IsActive=false: повторный login и refresh возвращают 400"
|
||
- id: step08_archived_org_blocks_login
|
||
title: "Архивная организация: login существующего админа возвращает 400 invalid_grant"
|
||
- id: step09_duplicate_signup_blocked
|
||
title: "Повторный signup с тем же email живой орги отвергается 400"
|
||
- id: step10_orphan_signup_reactivates
|
||
title: "Signup с email orphan-юзера (его org удалена) — реактивирует с новой org"
|