R-012 — UserTrial marca converted_at quando checkout IBFT é aprovado
TLDR: Quando um usuário existente tem seu checkout IBFT aprovado (
status=enabled), oUserTrialainda aberto (converted_atnulo) é marcado com a data/hora da conversão; conversões já marcadas nunca são sobrescritas.
Given / When / Then
Dado um usuário já existente com um UserTrial ativo (converted_at nulo)
Quando a task save_checkout_ibft processa um webhook com status=enabled para esse usuário
Então o UserTrial em aberto tem converted_at preenchido com o momento da aprovação
Dado um usuário existente cujo UserTrial já possui converted_at preenchido
Quando um novo checkout IBFT é aprovado para esse usuário (ex.: renovação)
Então o converted_at original não é sobrescrito
Dado um usuário existente sem nenhum UserTrial
Quando o checkout IBFT é aprovado
Então nada é alterado em UserTrial e o fluxo de ativação do usuário segue normalmente
Constraints
- O update usa
converted_at__isnull=Truecomo filtro — nunca sobrescreve uma conversão já registrada - Só se aplica ao fluxo de usuário existente (
user_created is False); a criação de usuário novo não passa por essa marcação
Linked test
tests/webhooks/test_views_tasks_urls.py::test_save_checkout_ibft_sets_converted_at_when_trial_user_activates
tests/webhooks/test_views_tasks_urls.py::test_save_checkout_ibft_does_not_overwrite_converted_at_on_renewal
tests/webhooks/test_views_tasks_urls.py::test_save_checkout_ibft_does_not_fail_when_existing_user_has_no_trial