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 um shipment_kind diferente (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

  1. No admin (página de filiação), emitir carteira com first_time em uma remessa → funciona
  2. Emitir carteira com reprint na mesma remessa → funciona
  3. Tentar emitir carteira com first_time de novo na mesma remessa → bloqueado

Documentação