R-019 — Limite de áudios do trial é sempre igual à duração em dias

TLDR: Trial.audio_limit não é configurável manualmente. Trial.save() sempre o sobrescreve com duration_days, e sempre força access_library_audios = True. O admin exibe audio_limit como campo desabilitado; “Permite renovação?” e “Acesso a biblioteca de áudios?” saíram da tela do admin.

Given / When / Then

Dado um Trial com duration_days = 14 Quando o admin (ou qualquer código) salva o registro, independente do valor enviado para audio_limit Então Trial.audio_limit é persistido como 14, e Trial.access_library_audios é persistido como True

Dado o mesmo Trial Quando um administrador abre dash.*/admin/trials/trial/<id>/change/ Então “Limite de áudios” aparece desabilitado mostrando 14; “Permite renovação?” e “Acesso a biblioteca de áudios?” não aparecem mais na tela

Restrições

  • allow_renewal e access_library_audios continuam existindo no modelo e no banco — só saíram da UI do admin, não foram removidos do schema
  • Não há backfill: trials criados antes desta mudança só têm audio_limit/access_library_audios sincronizados no próximo save
  • UserTrialStateSerializer continua lendo trial.access_library_audios e trial.audio_limit normalmente; a API não muda, só passa a receber valores sempre coerentes com duration_days
  • audio_limit deixa de suportar “ilimitado” (None): como todo save() sobrescreve o campo com duration_days, não há mais caminho legítimo pela ORM para persistir audio_limit=None

Teste vinculado

tests/trials/test_admin.py — sincronização de audio_limit/access_library_audios no save() do modelo e ausência de allow_renewal/access_library_audios no TrialAdminForm.