mirror of https://github.com/interlegis/sapl.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
296 lines
13 KiB
296 lines
13 KiB
import pytest
|
|
from datetime import datetime
|
|
from django.core.exceptions import ValidationError
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from model_bakery import baker
|
|
|
|
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
|
|
from sapl.parlamentares.models import Legislatura, Parlamentar, Partido,SessaoLegislativa
|
|
from sapl.sessao import forms
|
|
from sapl.sessao.models import (ExpedienteMateria, ExpedienteSessao,
|
|
IntegranteMesa, Orador, OrdemDia,
|
|
PresencaOrdemDia, RegistroVotacao,
|
|
SessaoPlenaria, SessaoPlenariaPresenca,
|
|
TipoResultadoVotacao, TipoSessaoPlenaria,
|
|
VotoParlamentar)
|
|
|
|
def test_valida_campos_obrigatorios_sessao_plenaria_form():
|
|
form = forms.SessaoPlenariaForm(data={})
|
|
|
|
assert not form.is_valid()
|
|
|
|
errors = form.errors
|
|
|
|
assert errors['legislatura'] == [_('Este campo é obrigatório.')]
|
|
assert errors['sessao_legislativa'] == [_('Este campo é obrigatório.')]
|
|
assert errors['tipo'] == [_('Este campo é obrigatório.')]
|
|
assert errors['numero'] == [_('Este campo é obrigatório.')]
|
|
assert errors['data_inicio'] == [_('Este campo é obrigatório.')]
|
|
assert errors['hora_inicio'] == [_('Este campo é obrigatório.')]
|
|
|
|
assert len(errors) == 6
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_sessao_plenaria_form_valido():
|
|
legislatura = baker.make(Legislatura)
|
|
sessao = baker.make(SessaoLegislativa)
|
|
tipo = baker.make(TipoSessaoPlenaria)
|
|
|
|
form = forms.SessaoPlenariaForm(data={'legislatura': str(legislatura.pk),
|
|
'numero': '1',
|
|
'tipo': str(tipo.pk),
|
|
'sessao_legislativa': str(sessao.pk),
|
|
'data_inicio': str(sessao.data_inicio),
|
|
'hora_inicio': '10:10',
|
|
'painel_aberto': False
|
|
})
|
|
|
|
assert form.is_valid()
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_numero_duplicado_sessao_plenaria_form():
|
|
legislatura = baker.make(Legislatura)
|
|
sessao = baker.make(SessaoLegislativa)
|
|
tipo = baker.make(TipoSessaoPlenaria)
|
|
sessao_plenaria = baker.make(SessaoPlenaria,
|
|
legislatura=legislatura,
|
|
sessao_legislativa=sessao,
|
|
tipo=tipo,
|
|
numero=1)
|
|
|
|
form = forms.SessaoPlenariaForm(data={'legislatura': str(legislatura.pk),
|
|
'numero': '1',
|
|
'tipo': str(tipo.pk),
|
|
'sessao_legislativa': str(sessao.pk),
|
|
'data_inicio': sessao_plenaria.data_inicio,
|
|
'hora_inicio': '10:10'
|
|
})
|
|
|
|
assert not form.is_valid()
|
|
|
|
assert form.errors['__all__'] == ["Número de Sessão Plenária já existente "
|
|
"para a Legislatura, Sessão Legislativa "
|
|
"e Tipo informados. Favor escolher um "
|
|
"número distinto."]
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_valida_campos_obrigatorios_bancada_form():
|
|
form = forms.BancadaForm(data={})
|
|
|
|
assert not form.is_valid()
|
|
|
|
errors = form.errors
|
|
|
|
assert errors['legislatura'] == [_('Este campo é obrigatório.')]
|
|
assert errors['nome'] == [_('Este campo é obrigatório.')]
|
|
assert errors['data_criacao'] == [_('Este campo é obrigatório.')]
|
|
|
|
assert len(errors) == 3
|
|
|
|
|
|
def data(valor):
|
|
return datetime.strptime(valor, '%Y-%m-%d').date()
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_bancada_form_valido():
|
|
legislatura = baker.make(Legislatura,
|
|
data_inicio=data('2017-11-10'),
|
|
data_fim=data('2017-12-31'),
|
|
)
|
|
partido = baker.make(Partido)
|
|
|
|
form = forms.BancadaForm(data={'legislatura': str(legislatura.pk),
|
|
'nome': 'Nome da Bancada',
|
|
'partido': str(partido.pk),
|
|
'data_criacao': '10/11/2017',
|
|
'data_extincao': '10/12/2017',
|
|
'descricao': 'teste'
|
|
})
|
|
|
|
assert form.is_valid()
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_bancada_form_datas_invalidas():
|
|
legislatura = baker.make(Legislatura,
|
|
data_inicio=data('2017-11-10'),
|
|
data_fim=data('2017-12-31'),
|
|
)
|
|
partido = baker.make(Partido)
|
|
|
|
form = forms.BancadaForm(data={'legislatura': str(legislatura.pk),
|
|
'nome': 'Nome da Bancada',
|
|
'partido': str(partido.pk),
|
|
'data_criacao': '2016-11-01',
|
|
'data_extincao': '2016-10-01',
|
|
'descricao': 'teste'
|
|
})
|
|
assert not form.is_valid()
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_expediente_materia_form_valido():
|
|
tipo_materia = baker.make(TipoMateriaLegislativa)
|
|
materia = baker.make(MateriaLegislativa, tipo=tipo_materia)
|
|
|
|
sessao = baker.make(SessaoPlenaria)
|
|
|
|
instance = baker.make(ExpedienteMateria, sessao_plenaria=sessao,
|
|
materia=materia)
|
|
|
|
form = forms.ExpedienteMateriaForm(data={'data_ordem': '28/12/2009',
|
|
'numero_ordem': 1,
|
|
'tipo_materia': tipo_materia.pk,
|
|
'numero_materia': materia.numero,
|
|
'ano_materia': materia.ano,
|
|
'tipo_votacao': 1,
|
|
'sessao_plenaria': sessao.pk
|
|
},
|
|
instance=instance)
|
|
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 baker.make(RegistroVotacao, ordem=ordem, expediente=expediente)
|
|
|
|
ordem = baker.make(OrdemDia)
|
|
expediente = baker.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()
|
|
|
|
def create_sessao_plenaria():
|
|
legislatura = baker.make(Legislatura)
|
|
sessao = baker.make(SessaoLegislativa)
|
|
tipo = baker.make(TipoSessaoPlenaria)
|
|
return baker.make(SessaoPlenaria,
|
|
legislatura=legislatura,
|
|
sessao_legislativa=sessao,
|
|
tipo=tipo,
|
|
numero=1)
|
|
|
|
def create_materia_legislativa():
|
|
tipo_materia = baker.make(TipoMateriaLegislativa)
|
|
return baker.make(MateriaLegislativa, tipo=tipo_materia)
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_delete_sessao_plenaria_cascade_registro_votacao_ordemdia():
|
|
materia = create_materia_legislativa()
|
|
sessao_plenaria = create_sessao_plenaria()
|
|
ordem = baker.make(OrdemDia,
|
|
sessao_plenaria=sessao_plenaria,
|
|
materia=materia,
|
|
tipo_votacao='2')
|
|
tipo_resultado_votacao = baker.make(TipoResultadoVotacao,
|
|
nome='ok',
|
|
natureza="A")
|
|
registro = baker.make(RegistroVotacao,
|
|
tipo_resultado_votacao=tipo_resultado_votacao,
|
|
materia=materia,
|
|
ordem=ordem)
|
|
presenca = baker.make(PresencaOrdemDia,
|
|
sessao_plenaria=sessao_plenaria)
|
|
parlamentar = baker.make(Parlamentar)
|
|
voto_parlamentar = baker.make(VotoParlamentar,
|
|
votacao=registro,
|
|
parlamentar=parlamentar,
|
|
ordem=ordem)
|
|
sessao_plenaria.delete()
|
|
presenca_filter = PresencaOrdemDia.objects.filter(
|
|
sessao_plenaria=sessao_plenaria).exists()
|
|
ordem_filter = OrdemDia.objects.filter(
|
|
sessao_plenaria=sessao_plenaria).exists()
|
|
registro_filter = RegistroVotacao.objects.filter(
|
|
tipo_resultado_votacao=tipo_resultado_votacao,
|
|
materia=materia,
|
|
ordem=ordem).exists()
|
|
materia_filter = MateriaLegislativa.objects.filter(id=materia.id).exists()
|
|
parlamentar_filter = Parlamentar.objects.exists()
|
|
voto_parlamentar_filter = VotoParlamentar.objects.filter(
|
|
ordem=ordem).exists()
|
|
assert not registro_filter
|
|
assert not ordem_filter
|
|
assert not presenca_filter
|
|
assert not voto_parlamentar_filter
|
|
assert materia_filter # Não exclui materia
|
|
assert parlamentar_filter # Não exclui Parlamentar
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_delete_sessao_plenaria_cascade_registro_votacao_expediente():
|
|
materia = create_materia_legislativa()
|
|
sessao_plenaria = create_sessao_plenaria()
|
|
expediente = baker.make(ExpedienteMateria,
|
|
sessao_plenaria=sessao_plenaria,
|
|
materia=materia,
|
|
tipo_votacao='2')
|
|
tipo_resultado_votacao = baker.make(TipoResultadoVotacao,
|
|
nome='ok',
|
|
natureza="A")
|
|
registro = baker.make(RegistroVotacao,
|
|
tipo_resultado_votacao=tipo_resultado_votacao,
|
|
materia=materia,
|
|
expediente=expediente)
|
|
presenca = baker.make(SessaoPlenariaPresenca,
|
|
sessao_plenaria=sessao_plenaria)
|
|
parlamentar = baker.make(Parlamentar)
|
|
voto_parlamentar = baker.make(VotoParlamentar,
|
|
votacao=registro,
|
|
parlamentar=parlamentar,
|
|
expediente=expediente)
|
|
sessao_plenaria.delete()
|
|
expediente_filter = ExpedienteMateria.objects.filter(
|
|
sessao_plenaria=sessao_plenaria).exists()
|
|
registro_filter = RegistroVotacao.objects.filter(
|
|
tipo_resultado_votacao=tipo_resultado_votacao,
|
|
materia=materia,
|
|
expediente=expediente).exists()
|
|
presenca_filter = SessaoPlenariaPresenca.objects.filter(
|
|
sessao_plenaria=sessao_plenaria).exists()
|
|
parlamentar_filter = Parlamentar.objects.exists()
|
|
voto_parlamentar_filter = VotoParlamentar.objects.filter(
|
|
expediente=expediente).exists()
|
|
assert not registro_filter
|
|
assert not expediente_filter
|
|
assert not presenca_filter
|
|
assert not voto_parlamentar_filter
|
|
assert parlamentar_filter # Não exclui Parlamentar
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_delete_sessao_plenaria_cascade_integrante_mesa():
|
|
sessao_plenaria = create_sessao_plenaria()
|
|
mesa = baker.make(IntegranteMesa,sessao_plenaria=sessao_plenaria)
|
|
sessao_plenaria.delete()
|
|
mesa_filter = IntegranteMesa.objects.filter(sessao_plenaria=sessao_plenaria).exists()
|
|
assert not mesa_filter
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_delete_sessao_plenaria_cascade_expedientesessao():
|
|
sessao_plenaria = create_sessao_plenaria()
|
|
expediente_sessao = baker.make(ExpedienteSessao, sessao_plenaria=sessao_plenaria)
|
|
sessao_plenaria.delete()
|
|
expediente_sessao_filter = ExpedienteSessao.objects.filter(sessao_plenaria=sessao_plenaria).exists()
|
|
assert not expediente_sessao_filter
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_delete_sessao_plenaria_cascade_orador():
|
|
sessao_plenaria = create_sessao_plenaria()
|
|
expediente_sessao = baker.make(Orador, sessao_plenaria=sessao_plenaria)
|
|
sessao_plenaria.delete()
|
|
orador_filter = Orador.objects.filter(sessao_plenaria=sessao_plenaria).exists()
|
|
assert not orador_filter
|
|
|