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.
401 lines
13 KiB
401 lines
13 KiB
import pytest
|
|
from datetime import date
|
|
|
|
from django.core.exceptions import ValidationError
|
|
from django.urls import reverse
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from model_bakery import baker
|
|
|
|
from sapl.parlamentares.forms import ComposicaoMesaForm, MesaDiretoraForm
|
|
from sapl.parlamentares.models import ComposicaoMesa, MesaDiretora
|
|
|
|
|
|
# =====================================================================
|
|
# Testes de validação a nível de Model — MesaDiretora
|
|
# =====================================================================
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_mesadiretora_model_clean_data_inicio_maior_que_data_fim():
|
|
legislatura = baker.make(
|
|
'parlamentares.Legislatura',
|
|
data_inicio=date(2021, 1, 1),
|
|
data_fim=date(2024, 12, 31)
|
|
)
|
|
mesa = MesaDiretora(
|
|
titulo='Mesa',
|
|
data_inicio=date(2022, 1, 1),
|
|
data_fim=date(2021, 12, 31),
|
|
legislatura=legislatura
|
|
)
|
|
with pytest.raises(ValidationError, match='A data de início deve ser anterior à data de fim.'):
|
|
mesa.clean()
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_mesadiretora_model_clean_data_fora_da_legislatura():
|
|
legislatura = baker.make(
|
|
'parlamentares.Legislatura',
|
|
data_inicio=date(2021, 1, 1),
|
|
data_fim=date(2024, 12, 31)
|
|
)
|
|
mesa = MesaDiretora(
|
|
titulo='Mesa',
|
|
data_inicio=date(2020, 1, 1),
|
|
data_fim=date(2021, 12, 31),
|
|
legislatura=legislatura
|
|
)
|
|
with pytest.raises(ValidationError, match='As datas da mesa diretora devem estar dentro do período da legislatura.'):
|
|
mesa.clean()
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_mesadiretora_model_clean_intersecao():
|
|
legislatura = baker.make(
|
|
'parlamentares.Legislatura',
|
|
data_inicio=date(2021, 1, 1),
|
|
data_fim=date(2024, 12, 31)
|
|
)
|
|
baker.make(
|
|
'parlamentares.MesaDiretora',
|
|
legislatura=legislatura,
|
|
titulo='Mesa Existente',
|
|
data_inicio=date(2021, 1, 1),
|
|
data_fim=date(2022, 12, 31)
|
|
)
|
|
mesa = MesaDiretora(
|
|
titulo='Nova Mesa',
|
|
data_inicio=date(2022, 1, 1),
|
|
data_fim=date(2023, 12, 31),
|
|
legislatura=legislatura
|
|
)
|
|
with pytest.raises(ValidationError, match='As datas da mesa diretora se sobrepõem com outra mesa diretora existente.'):
|
|
mesa.clean()
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_mesadiretora_model_clean_valido():
|
|
legislatura = baker.make(
|
|
'parlamentares.Legislatura',
|
|
data_inicio=date(2021, 1, 1),
|
|
data_fim=date(2024, 12, 31)
|
|
)
|
|
mesa = MesaDiretora(
|
|
titulo='Mesa',
|
|
data_inicio=date(2021, 1, 1),
|
|
data_fim=date(2022, 12, 31),
|
|
legislatura=legislatura
|
|
)
|
|
mesa.clean() # não deve lançar exceção
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_mesadiretora_model_full_clean_sem_data_inicio():
|
|
legislatura = baker.make(
|
|
'parlamentares.Legislatura',
|
|
data_inicio=date(2021, 1, 1),
|
|
data_fim=date(2024, 12, 31)
|
|
)
|
|
mesa = MesaDiretora(
|
|
titulo='Mesa',
|
|
data_fim=date(2022, 12, 31),
|
|
legislatura=legislatura
|
|
)
|
|
with pytest.raises(ValidationError) as exc_info:
|
|
mesa.full_clean()
|
|
|
|
assert 'data_inicio' in exc_info.value.message_dict
|
|
assert exc_info.value.message_dict['data_inicio'] == [_('Este campo não pode ser nulo.')]
|
|
|
|
|
|
# =====================================================================
|
|
# Testes de validação a nível de Model — ComposicaoMesa
|
|
# =====================================================================
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_composicaomesa_model_clean_parlamentar_duplicado():
|
|
parlamentar = baker.make('parlamentares.Parlamentar')
|
|
cargo1 = baker.make('parlamentares.CargoMesa')
|
|
cargo2 = baker.make('parlamentares.CargoMesa')
|
|
mesa_diretora = baker.make('parlamentares.MesaDiretora')
|
|
|
|
ComposicaoMesa.objects.create(
|
|
parlamentar=parlamentar, cargo=cargo1, mesa_diretora=mesa_diretora
|
|
)
|
|
|
|
composicao = ComposicaoMesa(
|
|
parlamentar=parlamentar, cargo=cargo2, mesa_diretora=mesa_diretora
|
|
)
|
|
with pytest.raises(ValidationError, match='Parlamentar já ocupa um cargo nesta mesa diretora.'):
|
|
composicao.clean()
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_composicaomesa_model_clean_cargo_unico():
|
|
parlamentar1 = baker.make('parlamentares.Parlamentar')
|
|
parlamentar2 = baker.make('parlamentares.Parlamentar')
|
|
cargo = baker.make('parlamentares.CargoMesa', unico=True)
|
|
mesa_diretora = baker.make('parlamentares.MesaDiretora')
|
|
|
|
ComposicaoMesa.objects.create(
|
|
parlamentar=parlamentar1, cargo=cargo, mesa_diretora=mesa_diretora
|
|
)
|
|
|
|
composicao = ComposicaoMesa(
|
|
parlamentar=parlamentar2, cargo=cargo, mesa_diretora=mesa_diretora
|
|
)
|
|
with pytest.raises(ValidationError, match='Cargo único já ocupado por outro parlamentar.'):
|
|
composicao.clean()
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_composicaomesa_model_clean_valido():
|
|
parlamentar = baker.make('parlamentares.Parlamentar')
|
|
cargo = baker.make('parlamentares.CargoMesa')
|
|
mesa_diretora = baker.make('parlamentares.MesaDiretora')
|
|
|
|
composicao = ComposicaoMesa(
|
|
parlamentar=parlamentar, cargo=cargo, mesa_diretora=mesa_diretora
|
|
)
|
|
composicao.clean() # não deve lançar exceção
|
|
|
|
|
|
# =====================================================================
|
|
# Testes de validação via Form — MesaDiretora
|
|
# =====================================================================
|
|
|
|
def test_mesadiretora_form_invalido():
|
|
form = MesaDiretoraForm(data={})
|
|
|
|
assert not form.is_valid()
|
|
|
|
errors = form.errors
|
|
|
|
assert errors['titulo'] == [_('Este campo é obrigatório.')]
|
|
assert errors['data_inicio'] == [_('Este campo é obrigatório.')]
|
|
assert errors['data_fim'] == [_('Este campo é obrigatório.')]
|
|
assert errors['legislatura'] == [_('Este campo é obrigatório.')]
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_mesadiretora_form_data_inicio_maior_que_data_fim():
|
|
legislatura = baker.make(
|
|
'parlamentares.Legislatura',
|
|
data_inicio='2021-01-01',
|
|
data_fim='2024-12-31'
|
|
)
|
|
|
|
form = MesaDiretoraForm(data={
|
|
'titulo': 'Mesa Diretora 2021-2022',
|
|
'data_inicio': '2022-01-01',
|
|
'data_fim': '2021-12-31',
|
|
'legislatura': legislatura.id,
|
|
})
|
|
|
|
assert not form.is_valid()
|
|
errors = form.errors
|
|
assert errors['__all__'] == [_('A data de início deve ser anterior à data de fim.')]
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_mesadiretora_form_valido():
|
|
legislatura = baker.make(
|
|
'parlamentares.Legislatura',
|
|
data_inicio='2021-01-01',
|
|
data_fim='2024-12-31'
|
|
)
|
|
|
|
form = MesaDiretoraForm(data={
|
|
'titulo': 'Mesa Diretora 2021-2022',
|
|
'data_inicio': '2021-01-01',
|
|
'data_fim': '2022-12-31',
|
|
'legislatura': legislatura.id,
|
|
})
|
|
|
|
assert form.is_valid()
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_mesadiretora_form_intersecao():
|
|
legislatura = baker.make(
|
|
'parlamentares.Legislatura',
|
|
data_inicio='2021-01-01',
|
|
data_fim='2024-12-31'
|
|
)
|
|
baker.make(
|
|
'parlamentares.MesaDiretora',
|
|
legislatura=legislatura,
|
|
titulo='Mesa Diretora 2021-2022',
|
|
data_inicio='2021-01-01',
|
|
data_fim='2022-12-31')
|
|
|
|
form = MesaDiretoraForm(data={
|
|
'titulo': 'Mesa Diretora 2022-2023',
|
|
'data_inicio': '2022-01-01',
|
|
'data_fim': '2023-12-31',
|
|
'legislatura': legislatura.id,
|
|
})
|
|
|
|
assert not form.is_valid()
|
|
errors = form.errors
|
|
assert errors['__all__'] == [_('As datas da mesa diretora se sobrepõem com outra mesa diretora existente.')]
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_mesadiretora_form_data_fora_da_legislatura():
|
|
legislatura = baker.make(
|
|
'parlamentares.Legislatura',
|
|
data_inicio='2021-01-01',
|
|
data_fim='2024-12-31')
|
|
|
|
form = MesaDiretoraForm(data={
|
|
'titulo': 'Mesa Diretora 2020-2021',
|
|
'data_inicio': '2020-01-01',
|
|
'data_fim': '2021-12-31',
|
|
'legislatura': legislatura.id,
|
|
})
|
|
|
|
assert not form.is_valid()
|
|
errors = form.errors
|
|
assert errors['__all__'] == [_('As datas da mesa diretora devem estar dentro do período da legislatura.')]
|
|
|
|
|
|
# =====================================================================
|
|
# Testes de validação via Form — ComposicaoMesa
|
|
# =====================================================================
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_composicaomesa_form_invalido():
|
|
mesa_diretora = baker.make('parlamentares.MesaDiretora')
|
|
form = ComposicaoMesaForm(data={}, initial={'mesa_diretora': mesa_diretora})
|
|
|
|
assert not form.is_valid()
|
|
|
|
errors = form.errors
|
|
|
|
assert errors['parlamentar'] == [_('Este campo é obrigatório.')]
|
|
assert errors['cargo'] == [_('Este campo é obrigatório.')]
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_composicaomesa_form_valido():
|
|
parlamentar = baker.make('parlamentares.Parlamentar')
|
|
cargo = baker.make('parlamentares.CargoMesa')
|
|
mesa_diretora = baker.make('parlamentares.MesaDiretora')
|
|
mandato = baker.make(
|
|
'parlamentares.Mandato',
|
|
parlamentar=parlamentar,
|
|
legislatura=mesa_diretora.legislatura)
|
|
|
|
form = ComposicaoMesaForm(data={
|
|
'parlamentar': parlamentar.id,
|
|
'cargo': cargo.id,
|
|
}, initial={
|
|
'mesa_diretora': mesa_diretora,
|
|
})
|
|
|
|
assert form.is_valid()
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_composicaomesa_form_parlamentar_ocupando_cargo_na_mesma_mesa():
|
|
parlamentar = baker.make('parlamentares.Parlamentar')
|
|
cargo1 = baker.make('parlamentares.CargoMesa')
|
|
cargo2 = baker.make('parlamentares.CargoMesa')
|
|
mesa_diretora = baker.make('parlamentares.MesaDiretora')
|
|
mandato = baker.make(
|
|
'parlamentares.Mandato',
|
|
parlamentar=parlamentar,
|
|
legislatura=mesa_diretora.legislatura)
|
|
|
|
ComposicaoMesa.objects.create(
|
|
parlamentar=parlamentar,
|
|
cargo=cargo1,
|
|
mesa_diretora=mesa_diretora
|
|
)
|
|
|
|
form = ComposicaoMesaForm(data={
|
|
'parlamentar': parlamentar.id,
|
|
'cargo': cargo2.id,
|
|
}, initial={
|
|
'mesa_diretora': mesa_diretora,
|
|
})
|
|
|
|
assert not form.is_valid()
|
|
errors = form.errors
|
|
assert errors['__all__'] == [_('Parlamentar já ocupa um cargo nesta mesa diretora.')]
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_composicaomesa_form_parlamentar_cargo_unico_mesma_mesa():
|
|
parlamentar1 = baker.make('parlamentares.Parlamentar')
|
|
parlamentar2 = baker.make('parlamentares.Parlamentar')
|
|
|
|
cargo = baker.make('parlamentares.CargoMesa', unico=True)
|
|
|
|
mesa_diretora = baker.make('parlamentares.MesaDiretora')
|
|
|
|
mandato1 = baker.make('parlamentares.Mandato', parlamentar=parlamentar1, legislatura=mesa_diretora.legislatura)
|
|
mandato2 = baker.make('parlamentares.Mandato', parlamentar=parlamentar2, legislatura=mesa_diretora.legislatura)
|
|
|
|
ComposicaoMesa.objects.create(
|
|
parlamentar=parlamentar1,
|
|
cargo=cargo,
|
|
mesa_diretora=mesa_diretora
|
|
)
|
|
|
|
form = ComposicaoMesaForm(data={
|
|
'parlamentar': parlamentar2.id,
|
|
'cargo': cargo.id,
|
|
}, initial={
|
|
'mesa_diretora': mesa_diretora,
|
|
})
|
|
|
|
assert not form.is_valid()
|
|
errors = form.errors
|
|
assert errors['__all__'] == [_('Cargo único já ocupado por outro parlamentar.')]
|
|
|
|
|
|
# =====================================================================
|
|
# Testes de integração via View — ComposicaoMesa
|
|
# =====================================================================
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_composicaomesa_form_view_create(admin_client):
|
|
parlamentar = baker.make('parlamentares.Parlamentar')
|
|
cargo = baker.make('parlamentares.CargoMesa')
|
|
mesa_diretora = baker.make('parlamentares.MesaDiretora')
|
|
mandato = baker.make(
|
|
'parlamentares.Mandato',
|
|
parlamentar=parlamentar,
|
|
legislatura=mesa_diretora.legislatura)
|
|
|
|
response = admin_client.post(reverse('sapl.parlamentares:composicaomesa_create', kwargs={'pk': mesa_diretora.id}), data={
|
|
'parlamentar': parlamentar.id,
|
|
'cargo': cargo.id,
|
|
})
|
|
|
|
assert ComposicaoMesa.objects.filter(parlamentar=parlamentar, cargo=cargo, mesa_diretora=mesa_diretora).exists()
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_composicaomesa_form_view_update(admin_client):
|
|
parlamentar = baker.make('parlamentares.Parlamentar')
|
|
cargo = baker.make('parlamentares.CargoMesa')
|
|
mesa_diretora = baker.make('parlamentares.MesaDiretora')
|
|
mandato = baker.make(
|
|
'parlamentares.Mandato',
|
|
parlamentar=parlamentar,
|
|
legislatura=mesa_diretora.legislatura)
|
|
|
|
composicao = ComposicaoMesa.objects.create(
|
|
parlamentar=parlamentar,
|
|
cargo=cargo,
|
|
mesa_diretora=mesa_diretora
|
|
)
|
|
|
|
new_cargo = baker.make('parlamentares.CargoMesa')
|
|
|
|
response = admin_client.post(reverse('sapl.parlamentares:composicaomesa_update', kwargs={'pk': composicao.id}), data={
|
|
'parlamentar': parlamentar.id,
|
|
'cargo': new_cargo.id,
|
|
})
|
|
|
|
composicao.refresh_from_db()
|
|
assert composicao.cargo == new_cargo
|