Browse Source

Cascade Sessão Plenaria (#2312)

* first

* add testes

* add migrations

* fix testes

* Update sapl/sessao/tests/test_sessao.py

* Update test_sessao.py

* Update test_sessao.py
pull/2317/head
Talitha Pumar 6 years ago
committed by Edward
parent
commit
5b8a9d35f9
  1. 66
      sapl/sessao/migrations/0026_auto_20181016_1944.py
  2. 24
      sapl/sessao/models.py
  3. 132
      sapl/sessao/tests/test_sessao.py

66
sapl/sessao/migrations/0026_auto_20181016_1944.py

@ -0,0 +1,66 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2018-10-16 22:44
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('sessao', '0025_auto_20180919_1116'),
]
operations = [
migrations.AlterField(
model_name='expedientesessao',
name='sessao_plenaria',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sessao.SessaoPlenaria'),
),
migrations.AlterField(
model_name='integrantemesa',
name='sessao_plenaria',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sessao.SessaoPlenaria'),
),
migrations.AlterField(
model_name='orador',
name='sessao_plenaria',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sessao.SessaoPlenaria'),
),
migrations.AlterField(
model_name='oradorexpediente',
name='sessao_plenaria',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sessao.SessaoPlenaria'),
),
migrations.AlterField(
model_name='presencaordemdia',
name='sessao_plenaria',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sessao.SessaoPlenaria'),
),
migrations.AlterField(
model_name='registrovotacao',
name='expediente',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sessao.ExpedienteMateria'),
),
migrations.AlterField(
model_name='registrovotacao',
name='materia',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='materia.MateriaLegislativa'),
),
migrations.AlterField(
model_name='registrovotacao',
name='ordem',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sessao.OrdemDia'),
),
migrations.AlterField(
model_name='sessaoplenaria',
name='sessao_legislativa',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='parlamentares.SessaoLegislativa', verbose_name='Sessão Legislativa'),
),
migrations.AlterField(
model_name='sessaoplenariapresenca',
name='sessao_plenaria',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sessao.SessaoPlenaria'),
),
]

24
sapl/sessao/models.py

@ -121,7 +121,7 @@ class SessaoPlenaria(models.Model):
verbose_name=_('Tipo'))
sessao_legislativa = models.ForeignKey(
SessaoLegislativa,
on_delete=models.PROTECT,
on_delete=models.CASCADE,
verbose_name=_('Sessão Legislativa'))
legislatura = models.ForeignKey(Legislatura,
on_delete=models.PROTECT,
@ -288,7 +288,7 @@ class TipoExpediente(models.Model):
@reversion.register()
class ExpedienteSessao(models.Model): # ExpedienteSessaoPlenaria
sessao_plenaria = models.ForeignKey(SessaoPlenaria,
on_delete=models.PROTECT)
on_delete=models.CASCADE)
tipo = models.ForeignKey(TipoExpediente, on_delete=models.PROTECT)
conteudo = models.TextField(
blank=True, verbose_name=_('Conteúdo do expediente'))
@ -319,7 +319,7 @@ class OcorrenciaSessao(models.Model): # OcorrenciaSessaoPlenaria
@reversion.register()
class IntegranteMesa(models.Model): # MesaSessaoPlenaria
sessao_plenaria = models.ForeignKey(SessaoPlenaria,
on_delete=models.PROTECT)
on_delete=models.CASCADE)
cargo = models.ForeignKey(CargoMesa, on_delete=models.PROTECT)
parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT)
@ -334,7 +334,7 @@ class IntegranteMesa(models.Model): # MesaSessaoPlenaria
@reversion.register()
class AbstractOrador(models.Model): # Oradores
sessao_plenaria = models.ForeignKey(SessaoPlenaria,
on_delete=models.PROTECT)
on_delete=models.CASCADE)
parlamentar = models.ForeignKey(Parlamentar,
on_delete=models.PROTECT,
verbose_name=_('Parlamentar'))
@ -387,7 +387,7 @@ class OrdemDia(AbstractOrdemDia):
@reversion.register()
class PresencaOrdemDia(models.Model): # OrdemDiaPresenca
sessao_plenaria = models.ForeignKey(SessaoPlenaria,
on_delete=models.PROTECT)
on_delete=models.CASCADE)
parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT)
class Meta:
@ -427,15 +427,15 @@ class RegistroVotacao(models.Model):
TipoResultadoVotacao,
on_delete=models.PROTECT,
verbose_name=_('Resultado da Votação'))
materia = models.ForeignKey(MateriaLegislativa, on_delete=models.PROTECT)
materia = models.ForeignKey(MateriaLegislativa, on_delete=models.CASCADE)
ordem = models.ForeignKey(OrdemDia,
blank=True,
null=True,
on_delete=models.PROTECT)
on_delete=models.CASCADE)
expediente = models.ForeignKey(ExpedienteMateria,
blank=True,
null=True,
on_delete=models.PROTECT)
on_delete=models.CASCADE)
numero_votos_sim = models.PositiveIntegerField(verbose_name=_('Sim'))
numero_votos_nao = models.PositiveIntegerField(verbose_name=_('Não'))
numero_abstencoes = models.PositiveIntegerField(
@ -476,7 +476,7 @@ class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar
'''
votacao = models.ForeignKey(RegistroVotacao,
blank=True,
null=True)
null=True,on_delete=models.CASCADE)
parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT)
voto = models.CharField(max_length=10)
@ -496,10 +496,10 @@ class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar
ordem = models.ForeignKey(OrdemDia,
blank=True,
null=True)
null=True, on_delete=models.CASCADE)
expediente = models.ForeignKey(ExpedienteMateria,
blank=True,
null=True)
null=True, on_delete=models.CASCADE)
class Meta:
verbose_name = _('Registro de Votação de Parlamentar')
@ -513,7 +513,7 @@ class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar
@reversion.register()
class SessaoPlenariaPresenca(models.Model):
sessao_plenaria = models.ForeignKey(SessaoPlenaria,
on_delete=models.PROTECT)
on_delete=models.CASCADE)
parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT)
data_sessao = models.DateField(blank=True, null=True)

132
sapl/sessao/tests/test_sessao.py

@ -5,11 +5,14 @@ from django.utils.translation import ugettext_lazy as _
from model_mommy import mommy
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.parlamentares.models import Legislatura, Partido, SessaoLegislativa
from sapl.parlamentares.models import Legislatura, Parlamentar, Partido,SessaoLegislativa
from sapl.sessao import forms
from sapl.sessao.models import (ExpedienteMateria, OrdemDia, RegistroVotacao,
SessaoPlenaria, TipoSessaoPlenaria)
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={})
@ -170,3 +173,124 @@ def test_registro_votacao_tem_ordem_xor_expediente():
# 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 = mommy.make(Legislatura)
sessao = mommy.make(SessaoLegislativa)
tipo = mommy.make(TipoSessaoPlenaria)
return mommy.make(SessaoPlenaria,
legislatura=legislatura,
sessao_legislativa=sessao,
tipo=tipo,
numero=1)
def create_materia_legislativa():
tipo_materia = mommy.make(TipoMateriaLegislativa)
return mommy.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 = mommy.make(OrdemDia,
sessao_plenaria=sessao_plenaria,
materia=materia,
tipo_votacao='2')
tipo_resultado_votacao = mommy.make(TipoResultadoVotacao,
nome='ok',
natureza="A")
registro = mommy.make(RegistroVotacao,
tipo_resultado_votacao=tipo_resultado_votacao,
materia=materia,
ordem=ordem)
presenca = mommy.make(PresencaOrdemDia,
sessao_plenaria=sessao_plenaria)
parlamentar = mommy.make(Parlamentar)
voto_parlamentar = mommy.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 = mommy.make(ExpedienteMateria,
sessao_plenaria=sessao_plenaria,
materia=materia,
tipo_votacao='2')
tipo_resultado_votacao = mommy.make(TipoResultadoVotacao,
nome='ok',
natureza="A")
registro = mommy.make(RegistroVotacao,
tipo_resultado_votacao=tipo_resultado_votacao,
materia=materia,
expediente=expediente)
presenca = mommy.make(SessaoPlenariaPresenca,
sessao_plenaria=sessao_plenaria)
parlamentar = mommy.make(Parlamentar)
voto_parlamentar = mommy.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 = mommy.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 = mommy.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 = mommy.make(Orador, sessao_plenaria=sessao_plenaria)
sessao_plenaria.delete()
orador_filter = Orador.objects.filter(sessao_plenaria=sessao_plenaria).exists()
assert not orador_filter

Loading…
Cancel
Save