mirror of https://github.com/interlegis/sapl.git
Browse Source
O PDF do Resumo da Sessão ordenava os expedientes alfabeticamente pelo
nome do tipo, ignorando o campo `ordenacao` de TipoExpediente. Numa Casa
que cadastre vários tipos, isso embaralha o documento: "Grande
Expediente" sai antes de "Leitura e Aprovação da Ata" e o encerramento
pode ser impresso logo após a abertura.
A tela do Resumo e o Extrato passam por sapl.sessao.views.get_expedientes,
que já ordena por `tipo__ordenacao`; apenas o relatório em PDF, que usa
get_sessao_plenaria, ficou para trás. O order_by('tipo__nome') havia sido
introduzido em 25be37eb justamente para acompanhar o Resumo, mas quando
2eb0b796 (#2920) criou o campo `ordenacao` somente get_expedientes foi
atualizado, e os dois caminhos divergiram em silêncio.
Alinha get_sessao_plenaria à mesma ordenação e adiciona testes que travam
a equivalência entre o PDF e o Resumo exibido em tela.
OSTicket #125461
3.1.x
committed by
GitHub
2 changed files with 54 additions and 3 deletions
@ -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='<p>Conteúdo de {}.</p>'.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 |
||||
|
|||||
Loading…
Reference in new issue