Permitir múltiplos kinds por filiação na mesma remessa
TLDR: Dentro de uma remessa, a mesma filiação pode ter até 3
ShipmentMemberships, desde que cada um seja de umshipment_kinddiferente (first_time,re-send,reprint).
Contexto
A verificação em AdminMembershipsService#admin_issue_card bloqueava qualquer segunda entrada da mesma filiação na mesma remessa, independente do kind. A regra correta é: a combinação (membership_id, shipment_id, shipment_kind) deve ser única — kinds diferentes são permitidos.
Objetivos
- Permitir que uma filiação apareça até 3 vezes na mesma remessa, com kinds distintos
- Bloquear a adição de um kind duplicado para a mesma filiação na mesma remessa
Fora de escopo
— (não registrado na spec original)
Mudanças
| Arquivo | Mudança |
|---|---|
app/services/admin_memberships_service.rb |
exists? em admin_issue_card passa a incluir shipment_kind na verificação; mensagem de erro atualizada |
app/models/shipment_membership.rb |
validates_uniqueness_of :shipment_kind, scope: [:shipment_id, :membership_id] |
test/models/shipment_membership_test.rb (novo) |
kinds diferentes para a mesma filiação na mesma remessa; os 3 kinds na mesma remessa; kind duplicado inválido; mesmo kind em remessas diferentes é válido |
test/services/admin_memberships_service_test.rb |
permite mesma filiação com kind diferente na mesma remessa; levanta erro ao adicionar kind duplicado |
Como verificar
bash
bin/test test/models/shipment_membership_test.rb
bin/test test/services/admin_memberships_service_test.rb
- No admin (página de filiação), emitir carteira com
first_timeem uma remessa → funciona - Emitir carteira com
reprintna mesma remessa → funciona - Tentar emitir carteira com
first_timede novo na mesma remessa → bloqueado
Documentação
- Diagrama de classes — enum
shipment_kinddeShipmentMembership