R-018 — Janela do trial é imutável após a criação
TLDR:
started_ateexpires_atdoUserTrialsó são escritos na criação, peloUserTrialService. O admin exibe as duas datas como leitura, sem permitir edição.
Given / When / Then
Dado um UserTrial criado por UserTrialService.create_user_trial, com expires_at = started_at + trial.duration_days gravado também em User.expires_at
Quando um administrador abre o registro em dash.*/admin/trials/usertrial/<id>/change/
Então started_at e expires_at aparecem como texto de leitura e não podem ser alterados pelo formulário
Dado o mesmo UserTrial
Quando o checkout IBFT do usuário é aprovado (R-012)
Então apenas User.expires_at é atualizado com a expiração da assinatura; UserTrial.expires_at permanece com a data original do trial
Restrições
UserTrial.expires_até o registro histórico da janela concedida;User.expires_até a expiração de acesso vigente (trial ou assinatura). Os dois nascem iguais e divergem a partir da conversão- A edição manual das datas dessincronizaria os dois campos sem passar pelo service, fazendo
POST /accounts/sign-ineGET /accounts/profileresponderem expirações diferentes para o mesmo usuário (R-015) converted_atcontinua editável no admin — o ajuste manual de conversão é um caso de uso válido- A criação de
UserTrialpelo admin já é bloqueada porhas_add_permission = False
Teste vinculado
tests/trials/test_admin.py — test_trial_window_dates_are_readonly, test_change_form_has_no_editable_trial_window_dates, test_change_form_keeps_converted_at_editable