name: stage-2fa
description: |
  2FA TOTP на test.admin.food-market.kz. Enroll (получение sharedKey),
  verify валидным/невалидным кодом, login требует otp_code, disable.
  TOTP-коды генерируем локально из sharedKey через crypto.

preconditions:
  reset_db: false
  smoke_login_super_admin: false

steps:
  - id: tfa01_setup_and_status
    title: Создать org → status показывает enabled=false
  - id: tfa02_enroll
    title: POST /api/me/2fa/enroll → sharedKey + otpauth-URI, alreadyEnabled=false
  - id: tfa03_verify_invalid_code
    title: POST /api/me/2fa/verify с кодом 000000 → 400
  - id: tfa04_verify_valid_code
    title: POST /api/me/2fa/verify с реальным TOTP кодом → 200, enabled=true
  - id: tfa05_login_requires_2fa
    title: Логин без otp_code → 400 invalid_grant 2fa_required; с правильным otp_code → 200
  - id: tfa06_disable
    title: POST /api/me/2fa/disable с кодом → 200; status показывает enabled=false; повторный enroll выдаёт новый key
