From 944c986b238e590bbe1b0b9505e81bcd2e13a13b Mon Sep 17 00:00:00 2001 From: Mariana Mendes Date: Tue, 12 Sep 2017 16:00:04 -0300 Subject: [PATCH] Fix #1436 -Adiciona teste ao form de materia -Corrige alguns erros --- sapl/materia/forms.py | 24 +++------ sapl/materia/tests/test_materia_form.py | 66 +++++++++++++++++++++++++ sapl/materia/views.py | 24 ++++----- 3 files changed, 83 insertions(+), 31 deletions(-) create mode 100644 sapl/materia/tests/test_materia_form.py diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index de9c07a33..950dac3c1 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -1714,25 +1714,17 @@ class FichaPesquisaForm(forms.Form): ) def clean(self): - cleaned_data = self.cleaned_data - - # Verifica se algum campo de data foi preenchido - if cleaned_data['data_inicial'] or cleaned_data['data_final']: - # Então verifica se o usuário preencheu o Incial e mas não - # preencheu o Final, ou vice-versa - if (not cleaned_data['data_inicial'] or - not cleaned_data['data_final']): - raise ValidationError(_( - 'Caso pesquise por data, os campos de Data Incial e ' + - 'Data Final devem ser preenchidos obrigatoriamente')) - # Caso tenha preenchido, verifica se a data final é maior que - # a inicial - elif cleaned_data['data_final'] < cleaned_data['data_inicial']: - raise ValidationError(_( - 'A Data Final não pode ser menor que a Data Inicial')) + cleaned_data = super(FichaPesquisaForm, self).clean() + if not self.is_valid(): return cleaned_data + if cleaned_data['data_final'] < cleaned_data['data_inicial']: + raise ValidationError(_( + 'A Data Final não pode ser menor que a Data Inicial')) + + return cleaned_data + class FichaSelecionaForm(forms.Form): materia = forms.ModelChoiceField( diff --git a/sapl/materia/tests/test_materia_form.py b/sapl/materia/tests/test_materia_form.py new file mode 100644 index 000000000..a700ee45a --- /dev/null +++ b/sapl/materia/tests/test_materia_form.py @@ -0,0 +1,66 @@ +import pytest +from django.utils.translation import ugettext as _ +from model_mommy import mommy + +from sapl.materia import forms +from sapl.materia.models import (MateriaLegislativa, TipoMateriaLegislativa) + +@pytest.mark.django_db(transaction=False) +def test_valida_campos_obrigatorios_ficha_pesquisa_form(): + form = forms.FichaPesquisaForm(data={}) + + assert not form.is_valid() + + errors = form.errors + + assert errors['tipo_materia'] == [_('Este campo é obrigatório.')] + assert errors['data_inicial'] == [_('Este campo é obrigatório.')] + assert errors['data_final'] == [_('Este campo é obrigatório.')] + + assert len(errors) == 3 + +@pytest.mark.django_db(transaction=False) +def test_ficha_pesquisa_form_datas_invalidas(): + tipo = mommy.make(TipoMateriaLegislativa) + + form = forms.FichaPesquisaForm(data={'tipo_materia': str(tipo.pk), + 'data_inicial': '10/11/2017', + 'data_final': '09/11/2017' + }) + assert not form.is_valid() + assert form.errors['__all__'] == [_('A Data Final não pode ser menor que ' + 'a Data Inicial')] + + +@pytest.mark.django_db(transaction=False) +def test_ficha_pesquisa_form_invalido(): + tipo = mommy.make(TipoMateriaLegislativa) + + form = forms.FichaPesquisaForm(data={'tipo_materia': str(tipo.pk), + 'data_inicial': '10/11/2017', + 'data_final': '09/11/2017' + }) + + assert not form.is_valid() + + +@pytest.mark.django_db(transaction=False) +def test_valida_campos_obrigatorios_ficha_seleciona_form(): + form = forms.FichaSelecionaForm(data={}) + + assert not form.is_valid() + + errors = form.errors + + assert errors['materia'] == [_('Este campo é obrigatório.')] + + assert len(errors) == 1 + + +@pytest.mark.django_db(transaction=False) +def test_ficha_seleciona_form_valido(): + materia = mommy.make(MateriaLegislativa) + + form = forms.FichaSelecionaForm(data={'materia': str(materia.pk)}) + + assert form.is_valid() diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 370f0126a..f3aafb662 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1822,12 +1822,6 @@ class FichaSelecionaView(PermissionRequiredMixin, FormView): template_name = 'materia/impressos/ficha_seleciona.html' permission_required = ('materia.can_access_impressos', ) - def string_to_datetime(self, date): - return dt_generator.date( - day=int(date[0]), - month=int(date[1]), - year=int(date[2])) - def get_context_data(self, **kwargs): if ('tipo' not in self.request.GET or 'data_inicial' not in self.request.GET or @@ -1839,13 +1833,10 @@ class FichaSelecionaView(PermissionRequiredMixin, FormView): **kwargs) tipo = self.request.GET['tipo'] - data_inicial = self.request.GET['data_inicial'] - data_final = self.request.GET['data_final'] - - data_inicial = self.string_to_datetime( - data_inicial.split('/')) - data_final = self.string_to_datetime( - data_final.split('/')) + data_inicial = datetime.strptime( + self.request.GET['data_inicial'], "%d/%m/%Y").date() + data_final = datetime.strptime( + self.request.GET['data_final'], "%d/%m/%Y").date() materia_list = MateriaLegislativa.objects.filter( tipo=tipo, @@ -1853,7 +1844,7 @@ class FichaSelecionaView(PermissionRequiredMixin, FormView): context['quantidade'] = len(materia_list) materia_list = materia_list[:20] - context['form'].fields['materia'].choices = [(m.id, m.__str__()) for m in materia_list] + context['form'].fields['materia'].choices = [(m.id, str(m)) for m in materia_list] if context['quantidade'] > 20: messages.info(self.request, _('Sua pesquisa retornou mais do que ' @@ -1870,7 +1861,10 @@ class FichaSelecionaView(PermissionRequiredMixin, FormView): materia = MateriaLegislativa.objects.get( id=form.data['materia']) except ObjectDoesNotExist: - pass + mensagem = _('Esta Máteria não existe!') + self.messages.add_message(request, messages.INFO, mensagem) + + return self.render_to_response(context) context['materia'] = materia context['despachos'] = materia.despachoinicial_set.all().values_list(