diff --git a/sapl/relatorios/tests.py b/sapl/relatorios/tests.py index a79ca8be5..fe46e86c4 100644 --- a/sapl/relatorios/tests.py +++ b/sapl/relatorios/tests.py @@ -1,3 +1,52 @@ -# from django.test import TestCase +import pytest +from model_bakery import baker -# Create your tests here. +from sapl.base.models import CasaLegislativa +from sapl.relatorios.views import get_sessao_plenaria +from sapl.sessao.models import ExpedienteSessao, SessaoPlenaria, TipoExpediente +from sapl.sessao.views import get_expedientes + + +def cria_sessao_com_expedientes(): + """Cria uma sessão cujos expedientes têm `ordenacao` inversa à ordem + alfabética dos nomes -- o caso que expõe o OSTicket #125461.""" + sessao = baker.make(SessaoPlenaria) + tipo_leitura = baker.make( + TipoExpediente, nome='Leitura e Aprovação da Ata', ordenacao=1) + tipo_grande = baker.make( + TipoExpediente, nome='Grande Expediente', ordenacao=2) + + for tipo in (tipo_grande, tipo_leitura): + baker.make(ExpedienteSessao, sessao_plenaria=sessao, tipo=tipo, + conteudo='
Conteúdo de {}.
'.format(tipo.nome)) + + return sessao + + +@pytest.mark.django_db(transaction=False) +def test_relatorio_sessao_respeita_ordenacao_do_tipo_expediente(): + """O PDF da Sessão Plenária deve seguir o campo `ordenacao` de + TipoExpediente, e não a ordem alfabética do nome.""" + sessao = cria_sessao_com_expedientes() + casa = baker.make(CasaLegislativa) + user = baker.make('auth.User') + + lst_expedientes = get_sessao_plenaria(sessao, casa, user)[6] + nomes = [e['nom_expediente'] for e in lst_expedientes] + + assert nomes == ['Leitura e Aprovação da Ata', 'Grande Expediente'] + + +@pytest.mark.django_db(transaction=False) +def test_relatorio_sessao_tem_mesma_ordem_de_expedientes_do_resumo(): + """O PDF e o Resumo exibido em tela não podem divergir: foi essa + divergência que originou o OSTicket #125461.""" + sessao = cria_sessao_com_expedientes() + casa = baker.make(CasaLegislativa) + user = baker.make('auth.User') + + do_pdf = [e['nom_expediente'] + for e in get_sessao_plenaria(sessao, casa, user)[6]] + da_tela = [e['tipo'].nome for e in get_expedientes(sessao)['expedientes']] + + assert do_pdf == da_tela diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py index 60ba1635e..8b89342fd 100755 --- a/sapl/relatorios/views.py +++ b/sapl/relatorios/views.py @@ -609,8 +609,10 @@ def get_sessao_plenaria(sessao, casa, user): # Exibe os Expedientes lst_expedientes = [] + # A ordenação deve ser a mesma de sapl.sessao.views.get_expedientes, para + # que o PDF confira com o Resumo exibido em tela. OSTicket #125461 expedientes = ExpedienteSessao.objects.filter( - sessao_plenaria=sessao).order_by('tipo__nome') + sessao_plenaria=sessao).order_by('tipo__ordenacao', 'tipo__nome') for e in expedientes: conteudo = e.conteudo if not is_empty(conteudo):