diff --git a/sapl/painel/tests/tests.py b/sapl/painel/tests/tests.py index 84b451702..826bf90de 100644 --- a/sapl/painel/tests/tests.py +++ b/sapl/painel/tests/tests.py @@ -14,6 +14,7 @@ from sapl.sessao.models import (OrdemDia, PresencaOrdemDia, SessaoPlenaria, VotoParlamentar) NOMINAL = 2 +LEITURA = 4 def _sessao_plenaria(): @@ -38,6 +39,14 @@ def _ordem_nominal_aberta(registro_aberto=False): return sessao, ordem +def _ordem_leitura_aberta(): + sessao = _sessao_plenaria() + materia = _materia() + ordem = baker.make(OrdemDia, sessao_plenaria=sessao, materia=materia, + tipo_votacao=LEITURA, votacao_aberta=True) + return sessao, ordem + + def _votante(sessao, admin_user): parlamentar = baker.make(Parlamentar, ativo=True) baker.make(PresencaOrdemDia, sessao_plenaria=sessao, parlamentar=parlamentar) @@ -261,6 +270,42 @@ def test_painel_exibe_nao_votou_para_parlamentar_sem_voto(admin_client): assert 'Não votou'.encode() in painel.content +@pytest.mark.django_db(transaction=False) +def test_dados_painel_leitura_nao_tem_voto_individual(admin_client, admin_user): + """ + Contrato consumido pelo JS do painel (sapl/templates/painel/index.html): + para uma matéria em Leitura, tipo_votacao chega como a string 'Leitura' + (não o código inteiro) e nenhum parlamentar presente recebe um voto — + é isso que permite ao JS distinguir "não há voto individual nesta + matéria" de "ainda não votou". + """ + baker.make(ConfiguracoesAplicacao, mostrar_voto=True, mostrar_brasao_painel=False) + sessao, ordem = _ordem_leitura_aberta() + _votante(sessao, admin_user) + + dados = admin_client.get(reverse( + 'sapl.painel:dados_painel', kwargs={'pk': sessao.pk})).json() + + assert dados['tipo_votacao'] == 'Leitura' + assert all(p['voto'] == '' for p in dados['presentes']) + + +@pytest.mark.django_db(transaction=False) +def test_dados_painel_sem_materia_nao_envia_tipo_votacao(admin_client, admin_user): + """ + Sem nenhuma matéria aberta ou já votada/lida (ex.: sessão solene), a + chave tipo_votacao não é enviada — o JS trata isso como "sem voto + individual" da mesma forma que trata 'Leitura'. + """ + baker.make(ConfiguracoesAplicacao, mostrar_voto=True, mostrar_brasao_painel=False) + sessao = _sessao_plenaria() + + dados = admin_client.get(reverse( + 'sapl.painel:dados_painel', kwargs={'pk': sessao.pk})).json() + + assert 'tipo_votacao' not in dados + + @pytest.mark.django_db(transaction=False) def test_votante_status_reflete_estado_e_nao_exige_permissao_do_painel(): """ diff --git a/sapl/templates/painel/index.html b/sapl/templates/painel/index.html index 9be5f19cf..1ac72b669 100644 --- a/sapl/templates/painel/index.html +++ b/sapl/templates/painel/index.html @@ -313,11 +313,17 @@ if (data["status_painel"] == true) { mostrar_voto = data["mostrar_voto"]; + var tem_voto_individual = data['tipo_votacao'] == 'Nominal'; presentes.append(''); $.each(presentes_list, function (index, parlamentar) { - - - if (parlamentar.voto == 'Voto Informado' && mostrar_voto == false){ + if (!tem_voto_individual){ + $('#parlamentares_list').append('') + } + else if (parlamentar.voto == 'Voto Informado' && mostrar_voto == false){ $('#parlamentares_list').append('
' + + parlamentar.nome + + ' ' + + parlamentar.partido + ' ' + + '
' + parlamentar.nome + ' ' +