diff --git a/sapl/norma/forms.py b/sapl/norma/forms.py index 5ba72e161..ad410c2fb 100644 --- a/sapl/norma/forms.py +++ b/sapl/norma/forms.py @@ -118,21 +118,24 @@ class NormaJuridicaForm(ModelForm): widgets = {'assuntos': widgets.CheckboxSelectMultiple} def clean(self): - super(NormaJuridicaForm, self).clean() + cleaned_data = super(NormaJuridicaForm, self).clean() - cleaned_data = self.cleaned_data + if not self.is_valid(): + return cleaned_data if (cleaned_data['tipo_materia'] and cleaned_data['numero_materia'] and cleaned_data['ano_materia']): - try: materia = MateriaLegislativa.objects.get( tipo_id=cleaned_data['tipo_materia'], numero=cleaned_data['numero_materia'], ano=cleaned_data['ano_materia']) except ObjectDoesNotExist: - raise forms.ValidationError("Matéria escolhida não existe!") + raise forms.ValidationError( + _("Matéria %s/%s é inexistente." % ( + self.cleaned_data['numero_materia'], + self.cleaned_data['ano_materia']))) else: cleaned_data['materia'] = materia diff --git a/sapl/norma/tests/test_norma.py b/sapl/norma/tests/test_norma.py index 6f12baa17..f57167f62 100644 --- a/sapl/norma/tests/test_norma.py +++ b/sapl/norma/tests/test_norma.py @@ -1,7 +1,10 @@ import pytest from django.core.urlresolvers import reverse +from django.utils.translation import ugettext_lazy as _ from model_mommy import mommy +from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa +from sapl.norma.forms import (NormaJuridicaForm,) from sapl.norma.models import NormaJuridica, TipoNormaJuridica @@ -38,14 +41,77 @@ def test_incluir_norma_errors(admin_client): follow=True) assert (response.context_data['form'].errors['tipo'] == - ['Este campo é obrigatório.']) + [_('Este campo é obrigatório.')]) assert (response.context_data['form'].errors['numero'] == - ['Este campo é obrigatório.']) + [_('Este campo é obrigatório.')]) assert (response.context_data['form'].errors['ano'] == - ['Este campo é obrigatório.']) + [_('Este campo é obrigatório.')]) assert (response.context_data['form'].errors['data'] == - ['Este campo é obrigatório.']) + [_('Este campo é obrigatório.')]) assert (response.context_data['form'].errors['esfera_federacao'] == - ['Este campo é obrigatório.']) + [_('Este campo é obrigatório.')]) assert (response.context_data['form'].errors['ementa'] == - ['Este campo é obrigatório.']) + [_('Este campo é obrigatório.')]) + + +# TODO esse teste repete o teste acima (test_incluir_norma_errors) +# mas a granularidade certa para testar campos obrigatórios seria +# no nível de form ou então de model, não de client... +def test_norma_form_invalida(): + form = NormaJuridicaForm(data={}) + + assert not form.is_valid() + + errors = form.errors + + assert errors['tipo'] == [_('Este campo é obrigatório.')] + assert errors['numero'] == [_('Este campo é obrigatório.')] + assert errors['ano'] == [_('Este campo é obrigatório.')] + assert errors['data'] == [_('Este campo é obrigatório.')] + assert errors['esfera_federacao'] == [_('Este campo é obrigatório.')] + assert errors['ementa'] == [_('Este campo é obrigatório.')] + + +@pytest.mark.django_db(transaction=False) +def test_norma_juridica_materia_inexistente(): + + tipo = mommy.make(TipoNormaJuridica) + tipo_materia = mommy.make(TipoMateriaLegislativa) + + form = NormaJuridicaForm(data={'tipo': str(tipo.pk), + 'numero': '1', + 'ano': '2017', + 'data': '2017-12-12', + 'esfera_federacao': 'F', + 'ementa': 'teste norma', + 'tipo_materia': str(tipo_materia.pk), + 'numero_materia': '2', + 'ano_materia': '2017' + }) + + assert not form.is_valid() + + assert form.errors['__all__'] == [_("Matéria 2/2017 é inexistente.")] + + +@pytest.mark.django_db(transaction=False) +def test_norma_juridica_materia_existente(): + + tipo = mommy.make(TipoNormaJuridica) + tipo_materia = mommy.make(TipoMateriaLegislativa) + materia = mommy.make(MateriaLegislativa, + numero=2, + ano=2017, + tipo=tipo_materia) + + form = NormaJuridicaForm(data={'tipo': str(tipo.pk), + 'numero': '1', + 'ano': '2017', + 'data': '2017-12-12', + 'esfera_federacao': 'F', + 'ementa': 'teste norma', + 'tipo_materia': str(tipo_materia.pk), + 'numero_materia': '2', + 'ano_materia': '2017' + }) + assert form.is_valid()