diff --git a/parlamentares/forms.py b/parlamentares/forms.py index b42fed895..73355d5ec 100644 --- a/parlamentares/forms.py +++ b/parlamentares/forms.py @@ -165,7 +165,7 @@ class MandatoForm(ModelForm): legislatura = forms.ModelChoiceField( label=_('Legislatura'), - required=False, + required=True, queryset=Legislatura.objects.all().order_by('-data_inicio'), empty_label='----------', ) diff --git a/parlamentares/models.py b/parlamentares/models.py index b6d2a744d..c72762e0b 100644 --- a/parlamentares/models.py +++ b/parlamentares/models.py @@ -338,12 +338,11 @@ class Mandato(models.Model): Coligacao, blank=True, null=True, verbose_name=_('Coligação')) # TODO what is this field?????? tipo_causa_fim_mandato = models.PositiveIntegerField(blank=True, null=True) - data_fim_mandato = models.DateField( - blank=True, null=True, verbose_name=_('Fim do Mandato')) + data_fim_mandato = models.DateField(verbose_name=_('Fim do Mandato')) votos_recebidos = models.PositiveIntegerField( blank=True, null=True, verbose_name=_('Votos Recebidos')) data_expedicao_diploma = models.DateField( - blank=True, null=True, verbose_name=_('Expedição do Diploma')) + verbose_name=_('Expedição do Diploma')) observacao = models.TextField( blank=True, verbose_name=_('Observação')) diff --git a/parlamentares/test_parlamentares.py b/parlamentares/test_parlamentares.py index 18b53b0f4..e8ea6c3bc 100644 --- a/parlamentares/test_parlamentares.py +++ b/parlamentares/test_parlamentares.py @@ -2,7 +2,8 @@ import pytest from django.core.urlresolvers import reverse from model_mommy import mommy -from .models import Legislatura, Parlamentar +from .models import (Dependente, Filiacao, Legislatura, Mandato, Parlamentar, + Partido, TipoDependente) @pytest.mark.django_db(transaction=False) @@ -22,3 +23,124 @@ def test_cadastro_parlamentar(client): assert "Terezinha" == parlamentar.nome_parlamentar if not parlamentar.ativo: pytest.fail("Parlamentar deve estar ativo") + + +@pytest.mark.django_db(transaction=False) +def test_filiacao_submit(client): + mommy.make(Parlamentar, pk=14) + mommy.make(Partido, pk=32) + + client.post(reverse('parlamentares_filiacao', + kwargs={'pk': 14}), + {'partido': 32, + 'data': '2016-03-22', + 'salvar': 'salvar'}, + follow=True) + + filiacao = Filiacao.objects.first() + assert 32 == filiacao.partido.pk + + +@pytest.mark.django_db(transaction=False) +def test_dependente_submit(client): + mommy.make(Parlamentar, pk=14) + mommy.make(Partido, pk=32) + mommy.make(TipoDependente, pk=3) + + client.post(reverse('parlamentares_dependentes', + kwargs={'pk': 14}), + {'nome': 'Eduardo', + 'tipo': 3, + 'sexo': 'M', + 'salvar': 'salvar'}, + follow=True) + + dependente = Dependente.objects.first() + assert 3 == dependente.tipo.pk + assert 'Eduardo' == dependente.nome + + +@pytest.mark.django_db(transaction=False) +def test_form_errors_dependente(client): + mommy.make(Parlamentar, pk=14) + response = client.post(reverse('parlamentares_dependentes', + kwargs={'pk': 14}), + {'salvar': 'salvar'}, + follow=True) + + assert (response.context_data['form'].errors['nome'] == + ['Este campo é obrigatório.']) + assert (response.context_data['form'].errors['tipo'] == + ['Este campo é obrigatório.']) + assert (response.context_data['form'].errors['sexo'] == + ['Este campo é obrigatório.']) + + +@pytest.mark.django_db(transaction=False) +def test_form_errors_filiacao(client): + mommy.make(Parlamentar, pk=14) + + response = client.post(reverse('parlamentares_filiacao', + kwargs={'pk': 14}), + {'partido': '', + 'salvar': 'salvar'}, + follow=True) + + assert (response.context_data['form'].errors['partido'] == + ['Este campo é obrigatório.']) + assert (response.context_data['form'].errors['data'] == + ['Este campo é obrigatório.']) + + +@pytest.mark.django_db(transaction=False) +def test_mandato_submit(client): + mommy.make(Parlamentar, pk=14) + mommy.make(Legislatura, pk=5) + + client.post(reverse('parlamentares_mandato', + kwargs={'pk': 14}), + {'legislatura': 5, + 'data_fim_mandato': '2016-01-01', + 'data_expedicao_diploma': '2016-03-22', + 'observacao': 'Observação do mandato', + 'salvar': 'salvar'}, + follow=True) + + mandato = Mandato.objects.first() + assert 'Observação do mandato' == mandato.observacao + + +@pytest.mark.django_db(transaction=False) +def test_form_errors_mandato(client): + mommy.make(Parlamentar, pk=14) + response = client.post(reverse('parlamentares_mandato', + kwargs={'pk': 14}), + {'legislatura': '', + 'salvar': 'salvar'}, + follow=True) + + assert (response.context_data['form'].errors['legislatura'] == + ['Este campo é obrigatório.']) + assert (response.context_data['form'].errors['data_fim_mandato'] == + ['Este campo é obrigatório.']) + assert (response.context_data['form'].errors['data_expedicao_diploma'] == + ['Este campo é obrigatório.']) + + +@pytest.mark.django_db(transaction=False) +def test_incluir_parlamentar_errors(client): + mommy.make(Legislatura, pk=5) + + response = client.post(reverse('parlamentares_cadastro', + kwargs={'pk': 5}), + {'salvar': 'salvar'}, + follow=True) + + assert (response.context_data['form'].errors['nome_parlamentar'] == + ['Este campo é obrigatório.']) + assert (response.context_data['form'].errors['nome_completo'] == + ['Este campo é obrigatório.']) + assert (response.context_data['form'].errors['sexo'] == + ['Este campo é obrigatório.']) + assert (response.context_data['form'].errors['ativo'] == + ['Este campo é obrigatório.']) diff --git a/parlamentares/views.py b/parlamentares/views.py index deacb89b2..1f2a888f5 100644 --- a/parlamentares/views.py +++ b/parlamentares/views.py @@ -232,11 +232,16 @@ class ParlamentaresDependentesView(CreateView): parlamentar = Parlamentar.objects.get(pk=pk) dependentes = Dependente.objects.filter( parlamentar=parlamentar).order_by('nome', 'tipo') + + if len(parlamentar.mandato_set.all()) == 0: + legislatura_id = 0 + else: + legislatura_id = parlamentar.mandato_set.last().legislatura.id + context.update({'object': parlamentar, 'dependentes': dependentes, # precisa de legislatura_id??? - 'legislatura_id': - parlamentar.mandato_set.last().legislatura.id}) + 'legislatura_id': legislatura_id}) return context def form_valid(self, form): @@ -405,10 +410,16 @@ class FiliacaoView(CreateView): pid = self.kwargs['pk'] parlamentar = Parlamentar.objects.get(id=pid) filiacoes = Filiacao.objects.filter(parlamentar=parlamentar) + + if len(parlamentar.mandato_set.all()) == 0: + legislatura_id = 0 + else: + legislatura_id = parlamentar.mandato_set.last().legislatura.id + context.update( {'object': parlamentar, 'filiacoes': filiacoes, - 'legislatura_id': parlamentar.mandato_set.last().legislatura.id}) + 'legislatura_id': legislatura_id}) return context def form_valid(self, form): @@ -471,12 +482,17 @@ class MandatoView(CreateView): context = super(MandatoView, self).get_context_data(**kwargs) pid = self.kwargs['pk'] parlamentar = Parlamentar.objects.get(id=pid) - mandatos = Mandato.objects.filter( - parlamentar=parlamentar) + mandatos = Mandato.objects.filter(parlamentar=parlamentar) + + if len(parlamentar.mandato_set.all()) == 0: + legislatura_id = 0 + else: + legislatura_id = parlamentar.mandato_set.last().legislatura.id + context.update( {'object': parlamentar, 'mandatos': mandatos, - 'legislatura_id': parlamentar.mandato_set.last().legislatura.id + 'legislatura_id': legislatura_id } ) return context