diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py index e6cac615e..8c5ce16b5 100644 --- a/sapl/parlamentares/forms.py +++ b/sapl/parlamentares/forms.py @@ -62,17 +62,18 @@ class MandatoForm(ModelForm): def clean(self): super(MandatoForm, self).clean() + if not self.is_valid(): + return self.cleaned_data + data = self.cleaned_data - try: - if 'legislatura' in data and 'parlamentar' in data: - Mandato.objects.get( - parlamentar__pk=self.initial['parlamentar'].pk, - legislatura__pk=data['legislatura'].pk) - except ObjectDoesNotExist: - pass - else: - raise ValidationError('Mandato nesta legislatura já existe.') - return data + + existe_mandato = Mandato.objects.filter( + parlamentar=data['parlamentar'], + legislatura=data['legislatura']).exists() + if existe_mandato: + raise ValidationError(_('Mandato nesta legislatura já existe.')) + + return self.cleaned_data class LegislaturaForm(ModelForm): diff --git a/sapl/parlamentares/tests/test_parlamentares.py b/sapl/parlamentares/tests/test_parlamentares.py index f210a4551..f0de9cd8a 100644 --- a/sapl/parlamentares/tests/test_parlamentares.py +++ b/sapl/parlamentares/tests/test_parlamentares.py @@ -6,6 +6,8 @@ from sapl.parlamentares.models import (Dependente, Filiacao, Legislatura, Mandato, Parlamentar, Partido, TipoDependente) +from sapl.parlamentares.forms import MandatoForm + @pytest.mark.django_db(transaction=False) def test_cadastro_parlamentar(admin_client): @@ -149,3 +151,33 @@ def test_form_errors_mandato(admin_client): ['Este campo é obrigatório.']) assert (response.context_data['form'].errors['data_expedicao_diploma'] == ['Este campo é obrigatório.']) + +def test_mandato_form_invalido(): + + form = MandatoForm(data = {}) + + assert not form.is_valid() + + errors = form.errors + assert errors['legislatura'] == ['Este campo é obrigatório.'] + assert errors['parlamentar'] == ['Este campo é obrigatório.'] + assert errors['data_expedicao_diploma'] == ['Este campo é obrigatório.'] + +@pytest.mark.django_db(transaction=False) +def test_mandato_form_duplicado(): + parlamentar = mommy.make(Parlamentar, pk=1) + legislatura = mommy.make(Legislatura, pk=1) + + Mandato.objects.create(parlamentar=parlamentar, + legislatura=legislatura, + data_expedicao_diploma='2017-07-25') + + form = MandatoForm(data={ + 'parlamentar': str(parlamentar.pk), + 'legislatura': str(legislatura.pk), + 'data_expedicao_diploma': '01/07/2015' + }) + + assert not form.is_valid() + + assert form.errors['__all__'] == ['Mandato nesta legislatura já existe.']