Código fonte de tests.unit.test_camara_deputados_helper

import logging
import unittest
from datetime import datetime
from unittest.mock import patch

from legislei.houses.camara_deputados_helper import CamaraDeputadosHelper
from legislei.models.relatorio import (Evento, Orgao, Parlamentar, Proposicao,
                                       Relatorio)
from legislei.SDKs.CamaraDeputados.entidades import Deputados
from legislei.SDKs.CamaraDeputados.exceptions import (
    CamaraDeputadosConnectionError, CamaraDeputadosError)
from legislei.SDKs.CamaraDeputados.mock import Mocker


[documentos]class TestCamaraDeputadosHelper(unittest.TestCase):
[documentos] def setUp(self): self.dep = CamaraDeputadosHelper() logging.disable(logging.CRITICAL)
[documentos] def tearDown(self): logging.disable(logging.NOTSET)
[documentos] @patch("legislei.houses.camara_deputados.CasaLegislativa.obterDataInicialEFinal") def test_get_commissions( self, mock_obterDataInicialEFinal ): mock = Mocker(self.dep.dep) mock.add_response( "obterOrgaosDeputado", [[ {'nomeOrgao': 'Comissão A', 'dataFim': None}, {'nomeOrgao': 'Comissão B', 'dataFim': '2018-08-31'}, {'nomeOrgao': 'Comissão C', 'dataFim': '2018-12-31'} ]], '1234', dataInicio='2018-10-21', dataFim='2018-10-28' ) mock_obterDataInicialEFinal.return_value = ('2018-10-21', '2018-10-28') actual_response = self.dep.get_commissions( '1234', datetime(2018, 10, 28)) self.assertIn(Orgao(nome='Comissão A'), actual_response) self.assertIn(Orgao(nome='Comissão C'), actual_response) self.assertEqual(len(actual_response), 2) mock.assert_no_pending_responses() mock_obterDataInicialEFinal.assert_called_once_with( datetime(2018, 10, 28))
[documentos] def test_get_commissions_fail_case(self): mock = Mocker(self.dep.dep) mock.add_exception('obterOrgaosDeputado', CamaraDeputadosError('teste')) actual_response = self.dep.get_commissions('1234', datetime(2018, 10, 28)) self.assertEqual(actual_response, [{'nomeOrgao': None}]) mock.assert_no_pending_responses()
[documentos] @patch("legislei.houses.camara_deputados.CasaLegislativa.obterDataInicialEFinal") def test_get_all_events( self, mock_obterDataInicialEFinal ): mock = Mocker(self.dep.ev) mock.add_response( "obterTodosEventos", [ [ { 'id': '123', 'dataHoraInicio': '2018-10-24T10:00', 'dataHoraFim': '2018-10-24T12:00', 'situacao': 'Encerrada', 'descricao': 'Sessão Ordinária', 'uri': 'uri', 'orgaos': [ {'nome': 'Plenário', 'apelido': 'PLEN'} ] }, { 'id': '1234', 'dataHoraInicio': '2018-10-24T14:00', 'dataHoraFim': '2018-10-24T18:45', 'situacao': 'Encerrada', 'descricao': 'Sessão Extraordinária', 'uri': 'uri', 'orgaos': [ {'nome': 'Plenário', 'apelido': 'PLEN'} ] } ], [ { 'id': '12345', 'dataHoraInicio': '2018-10-25T10:00', 'dataHoraFim': None, 'situacao': 'Cancelada', 'descricao': 'Sessão Ordinária', 'uri': 'uri', 'orgaos': [ {'nome': 'Comissão de Constituição e Justiça', 'apelido': 'CCJ'} ] } ] ], dataInicio='2018-10-21', dataFim='2018-10-28' ) mock_obterDataInicialEFinal.return_value = ('2018-10-21', '2018-10-28') actual_response = self.dep.get_all_events(datetime(2018, 10, 28)) self.assertEqual([ Evento( id='123', data_inicial=self.dep.get_brt(datetime(2018, 10, 24, 10, 0)), data_final=self.dep.get_brt(datetime(2018, 10, 24, 12, 0)), situacao='Encerrada', nome='Sessão Ordinária', url='uri', orgaos=[ Orgao(nome='Plenário', apelido='PLEN') ] ), Evento( id='1234', data_inicial=self.dep.get_brt(datetime(2018, 10, 24, 14, 0)), data_final=self.dep.get_brt(datetime(2018, 10, 24, 18, 45)), situacao='Encerrada', nome='Sessão Extraordinária', url='uri', orgaos=[ Orgao(nome='Plenário', apelido='PLEN') ] ), Evento( id='12345', data_inicial=self.dep.get_brt(datetime(2018, 10, 25, 10, 0)), data_final=None, situacao='Cancelada', nome='Sessão Ordinária', url='uri', orgaos=[ Orgao(nome='Comissão de Constituição e Justiça', apelido='CCJ') ] ), ], actual_response) mock_obterDataInicialEFinal.assert_called_once_with( datetime(2018, 10, 28)) mock.assert_no_pending_responses()
[documentos] def test_build_event(self): event = { 'id': '123', 'dataHoraInicio': '2019-08-10T10:00', 'dataHoraFim': '2019-08-10T12:00', 'situacao': 'Encerrada', 'descricao': 'Sessão Ordinária', 'uri': 'uri', 'orgaos': [ {'nome': 'Plenário', 'apelido': 'PLEN'} ] } expected = Evento( id='123', data_inicial=self.dep.get_brt(datetime(2019, 8, 10, 10)), data_final=self.dep.get_brt(datetime(2019, 8, 10, 12)), situacao='Encerrada', nome='Sessão Ordinária', url='uri', orgaos=[ Orgao(nome='Plenário', apelido='PLEN') ] ) actual = self.dep.build_event(event) self.assertEqual(expected, actual)
[documentos] def test_get_attended_events(self): mock = Mocker(self.dep.ev) mock.add_response( "obterDeputadosEvento", [{'id': '12345'}, {'id': '98765'}], "123" ) mock.add_response( "obterDeputadosEvento", [{'id': '98765'}, {'id': '34567'}], "1234" ) mock.add_response( "obterDeputadosEvento", [{'id': '12345'}, {'id': '98765'}], "12345" ) events = [ {'id': '123'}, {'id': '1234'}, {'id': '12345'} ] dep_id = '12345' actual_response = self.dep.get_attended_events(events, dep_id) self.assertEqual([ {'id': '123'}, {'id': '12345'} ], actual_response) mock.assert_no_pending_responses()
[documentos] @patch("legislei.houses.camara_deputados.CasaLegislativa.obterDataInicialEFinal") def test_get_expected_events( self, mock_obterDataInicialEFinal, ): events = [ {'id': 1, 'descricao': 'Evento 1'}, {'id': 2, 'descricao': 'Evento 2'}, {'id': 3, 'descricao': 'Evento 3'} ] dep_id = '12345' mock = Mocker(self.dep.dep) mock.add_response( "obterEventosDeputado", [events], dep_id, dataInicio='2018-10-21', dataFim='2018-10-28' ) mock_obterDataInicialEFinal.return_value = ('2018-10-21', '2018-10-28') actual_response = self.dep.get_expected_events( dep_id, datetime(2018, 10, 28)) self.assertEqual(actual_response, [ Evento(id='1', nome='Evento 1'), Evento(id='2', nome='Evento 2'), Evento(id='3', nome='Evento 3'), ]) mock_obterDataInicialEFinal.assert_called_once_with( datetime(2018, 10, 28)) mock.assert_no_pending_responses()
[documentos] def test_get_expected_events_fail_case(self): mock = Mocker(self.dep.dep) mock.add_exception("obterEventosDeputado", CamaraDeputadosError) actual_response = self.dep.get_expected_events("123", datetime(2018, 10, 28)) self.assertEqual(actual_response, [{'id': None}]) mock.assert_no_pending_responses()
[documentos] def test_get_event_program( self, ): ev_id = '1234' mock_ev = Mocker(self.dep.ev) mock_ev.add_response( "obterPautaEvento", [ { 'codRegime': '123', 'proposicao_': { 'id': '12345' } }, { 'codRegime': '123', 'proposicao_': { 'id': '12345' } }, { 'codRegime': '987', 'proposicao_': { 'id': '98765' } }, { 'codRegime': '987', 'proposicao_': { 'id': '56789' } }, ], ev_id ) mock_prop = Mocker(self.dep.prop) mock_prop.add_response( "obterProposicao", {'nome': 'Proposição I'}, "12345" ) mock_prop.add_response( "obterProposicao", {'nome': 'Proposição II'}, "98765" ) mock_prop.add_exception("obterProposicao", CamaraDeputadosError, "56789") actual_response = self.dep.get_event_program(ev_id) self.assertEqual(actual_response, [ { 'codRegime': '123', 'proposicao_': { 'id': '12345' }, 'proposicao_detalhes': {'nome': 'Proposição I'} }, { 'codRegime': '987', 'proposicao_': { 'id': '98765' }, 'proposicao_detalhes': {'nome': 'Proposição II'} }, { 'codRegime': '987', 'proposicao_': { 'id': '56789' }, 'proposicao_detalhes': [{'error': True}] }, ]) mock_ev.assert_no_pending_responses() mock_prop.assert_no_pending_responses()
[documentos] def test_get_event_program_fail_case(self): mock = Mocker(self.dep.ev) mock.add_exception("obterPautaEvento", CamaraDeputadosError, "12345") actual_response = self.dep.get_event_program("12345") self.assertEqual(actual_response, [{'error': True}]) mock.assert_no_pending_responses()
[documentos] def test_get_event_program_program_none(self): mock = Mocker(self.dep.ev) mock.add_response("obterPautaEvento", None, "12345") actual_response = self.dep.get_event_program("12345") self.assertEqual(actual_response, []) mock.assert_no_pending_responses()
[documentos] def test_get_votes( self, ): votings = [ { 'data': '12/5/2019', 'hora': '12:00', 'resumo': 'Votação 1', 'votos': [ {'id': '23456', 'voto': 'Não'}, {'id': '12345', 'voto': 'Sim'}, {'id': '34567', 'voto': 'Abstenção'}, ] }, { 'data': '12/5/2019', 'hora': '18:00', 'resumo': 'Votação 2', 'votos': [ {'id': '23456', 'voto': 'Sim'}, {'id': '12345', 'voto': 'Não'}, {'id': '34567', 'voto': 'Obstrução'}, ] }, ] mock = Mocker(self.dep.prop) mock.add_response( "obterVotacoesProposicao", votings ) actual_response = self.dep.get_votes( '12345', proposition={ 'tipo': 'PL', 'numero': '1', 'ano': '2019' }, event_dates={ 'data_inicial': self.dep.get_brt(datetime(2019, 5, 12, 10)), 'data_final': self.dep.get_brt(datetime(2019, 5, 12, 14)) } ) self.assertEqual(('Sim', 'Votação 1'), actual_response) mock.assert_no_pending_responses()
[documentos] def test_get_votes_fail_case(self): mock = Mocker(self.dep.prop) mock.add_exception("obterVotacoesProposicao", CamaraDeputadosError) actual_response = self.dep.get_votes( '12345', proposition={ 'tipo': 'PL', 'numero': '1', 'ano': '2019' }, event_dates={ 'data_inicial': datetime(2019, 5, 12, 10), 'data_final': datetime(2019, 5, 12, 14) } ) self.assertIsNone(actual_response[0]) self.assertIsNone(actual_response[1]) mock.assert_no_pending_responses()
[documentos] def test_get_absent_events(self): expected_events = [self.dep.build_event(e) for e in [ {'id': '2'}, {'id': '3'}, {'id': '4'}, ] ] events = [self.dep.build_event(e) for e in [ {'id': '1', 'orgaos': [{'nome': 'Órgão 1', 'apelido': ''}]}, {'id': '2', 'orgaos': [{'nome': 'Órgão 1', 'apelido': ''}]}, {'id': '3', 'orgaos': [{'nome': 'Órgão 2', 'apelido': ''}]}, {'id': '4', 'orgaos': [{'nome': 'Órgão 2', 'apelido': ''}]}, {'id': '5', 'orgaos': [{'nome': 'Órgão 4', 'apelido': ''}]}, {'id': '6', 'orgaos': [{'nome': 'Órgão 4', 'apelido': 'PLEN'}]}, ] ] events_attended = [self.dep.build_event(e) for e in [ {'id': '3', 'orgaos': [{'nome': 'Órgão 2', 'apelido': ''}]}, {'id': '4', 'orgaos': [{'nome': 'Órgão 2', 'apelido': ''}]}, ] ] commissions = [ Orgao(nome='Órgão 1'), Orgao(nome='Órgão 2'), Orgao(nome='Órgão 3'), ] actual_response = self.dep.get_absent_events( events, events_attended, expected_events, commissions, ) self.assertEqual([ Evento( id='1', presenca=2, orgaos=[Orgao(nome='Órgão 1', apelido='')] ), Evento( id='2', presenca=3, orgaos=[Orgao(nome='Órgão 1', apelido='')] ), Evento( id='5', presenca=1, orgaos=[Orgao(nome='Órgão 4', apelido='')] ), Evento( id='6', presenca=2, orgaos=[Orgao(nome='Órgão 4', apelido='PLEN')] ), ], actual_response)
[documentos] @patch("legislei.houses.camara_deputados.CasaLegislativa.obterDataInicialEFinal") def test_get_propositions( self, mock_obterDataInicialEFinal, ): propositions = [ {'id': '1', 'ementa': 'Teste1'}, {'id': '2', 'ementa': 'Teste2'}, {'id': '3', 'ementa': 'Teste3'}, ] mock = Mocker(self.dep.prop) mock.add_response( "obterTodasProposicoes", [propositions], idDeputadoAutor='123', dataApresentacaoInicio='2018-10-21', dataApresentacaoFim='2018-10-28' ) mock.add_response( "obterAutoresProposicao", [{'nome': 'Fulano da Silva'}], "1" ) mock.add_response( "obterAutoresProposicao", [{'nome': 'Sicrano'}], "2" ) mock.add_response( "obterAutoresProposicao", [{'nome': 'Fulano da Silva'}], "3" ) mock.add_response( "obterProposicao", propositions[0], "1" ) mock.add_response( "obterProposicao", propositions[2], "3" ) mock_obterDataInicialEFinal.return_value = ('2018-10-21', '2018-10-28') assemblyman = Parlamentar() assemblyman.id = '123' assemblyman.nome = 'Fulano da Silva' actual_response = self.dep.get_propositions( assemblyman, datetime(2018, 10, 28)) self.assertEqual(2, len(actual_response)) self.assertEqual('Teste1', actual_response[0]['ementa']) self.assertEqual('Teste3', actual_response[1]['ementa']) mock_obterDataInicialEFinal.assert_called_once_with( datetime(2018, 10, 28)) mock.assert_no_pending_responses()
[documentos] def test_build_proposition(self): proposition = { 'id': 123, 'dataApresentacao': '2018-10-25T00:00', 'ementa': 'Dá nova redação ao artigo tal da Constituição Federal', 'numero': 14, 'ano': 2019, 'siglaTipo': 'PEC', 'urlInteiroTeor': 'http://www.camara.gov.br/proposicoesWeb/prop_mostrarintegra?codteor=141414', 'uriAutores': 'https://dadosabertos.camara.leg.br/api/v2/proposicoes/123/autores' } expected = Proposicao( id='123', data_apresentacao=self.dep.get_brt(datetime(2018, 10, 25)), ementa=proposition['ementa'], numero='14', tipo='PEC', url_documento=proposition['urlInteiroTeor'], url_autores=proposition['uriAutores'], pauta=proposition['ementa'] ) actual = self.dep.build_proposition(proposition) self.assertEqual(expected, actual)