Browse Source

Adiciona validação de RegistroVotacao

pull/1728/head
Marcio Mazza 7 years ago
parent
commit
2ad74d7e50
  1. 14
      sapl/sessao/models.py
  2. 28
      sapl/sessao/tests/test_sessao.py

14
sapl/sessao/models.py

@ -1,7 +1,11 @@
from operator import xor
import reversion import reversion
from django.core.exceptions import ValidationError
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from model_utils import Choices from model_utils import Choices
from sapl.base.models import Autor from sapl.base.models import Autor
from sapl.materia.models import MateriaLegislativa from sapl.materia.models import MateriaLegislativa
from sapl.parlamentares.models import (CargoMesa, Legislatura, Parlamentar, from sapl.parlamentares.models import (CargoMesa, Legislatura, Parlamentar,
@ -429,6 +433,16 @@ class RegistroVotacao(models.Model):
'votacao': self.tipo_resultado_votacao, 'votacao': self.tipo_resultado_votacao,
'materia': self.materia} 'materia': self.materia}
def clean(self):
"""Exatamente um dos campos ordem ou expediente deve estar preenchido.
"""
# TODO remover esse método quando OrdemDia e ExpedienteMateria
# forem reestruturados e os campos ordem e expediente forem unificados
if not xor(bool(self.ordem), bool(self.expediente)):
raise ValidationError(
'RegistroVotacao deve ter exatamente um dos campos '
'ordem ou expediente deve estar preenchido')
@reversion.register() @reversion.register()
class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar

28
sapl/sessao/tests/test_sessao.py

@ -1,11 +1,13 @@
import pytest import pytest
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from model_mommy import mommy from model_mommy import mommy
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.parlamentares.models import Legislatura, Partido, SessaoLegislativa from sapl.parlamentares.models import Legislatura, Partido, SessaoLegislativa
from sapl.sessao import forms from sapl.sessao import forms
from sapl.sessao.models import (ExpedienteMateria, SessaoPlenaria, from sapl.sessao.models import (ExpedienteMateria, OrdemDia, RegistroVotacao,
TipoSessaoPlenaria) SessaoPlenaria, TipoSessaoPlenaria)
def test_valida_campos_obrigatorios_sessao_plenaria_form(): def test_valida_campos_obrigatorios_sessao_plenaria_form():
@ -138,3 +140,25 @@ def test_expediente_materia_form_valido():
}, },
instance=instance) instance=instance)
assert form.is_valid() assert form.is_valid()
@pytest.mark.django_db(transaction=False)
def test_registro_votacao_tem_ordem_xor_expediente():
def registro_votacao_com(ordem, expediente):
return mommy.make(RegistroVotacao, ordem=ordem, expediente=expediente)
ordem = mommy.make(OrdemDia)
expediente = mommy.make(ExpedienteMateria)
# a validação funciona com exatamente um dos campos preenchido
registro_votacao_com(ordem, None).full_clean()
registro_votacao_com(None, expediente).full_clean()
# a validação NÃO funciona quando nenhum deles é preenchido
with pytest.raises(ValidationError):
registro_votacao_com(None, None).full_clean()
# a validação NÃO funciona quando ambos são preenchidos
with pytest.raises(ValidationError):
registro_votacao_com(ordem, expediente).full_clean()

Loading…
Cancel
Save