def test_obter_parlamentares(self, mock_obterVereadores): mock_obterVereadores.return_value = [ { 'chave': '1', 'nome': 'Fulano', 'mandatos': [ {'fim': datetime(2020, 12, 31), 'partido': {'sigla': 'TESTE'}} ] }, { 'chave': '2', 'nome': 'Fulana', 'mandatos': [ {'fim': datetime(2020, 12, 31), 'partido': {'sigla': 'TESTE'}}, {'fim': datetime(2018, 12, 31)}, ] }, { 'chave': '3', 'nome': 'Joana', 'mandatos': [ {'fim': datetime(2020, 12, 31), 'partido': {'sigla': 'TESTE'}}, {'fim': datetime(2018, 12, 31)}, ] }, ] actual = self.cmsp.obter_parlamentares() self.assertEqual(actual, [ Parlamentar(**{'nome': 'Fulano', 'id': '1', 'partido': 'TESTE', 'uf': 'SP', 'cargo': 'SÃO PAULO', 'foto': 'https://www.99luca11.com/Users/usuario_sem_foto.png'}), Parlamentar(**{'nome': 'Fulana', 'id': '2', 'partido': 'TESTE', 'uf': 'SP', 'cargo': 'SÃO PAULO', 'foto': 'https://www.99luca11.com/Users/usuario_sem_foto.png'}), Parlamentar(**{'nome': 'Joana', 'id': '3', 'partido': 'TESTE', 'uf': 'SP', 'cargo': 'SÃO PAULO', 'foto': 'https://www.99luca11.com/Users/usuario_sem_foto.png'}) ])
def test_parlamentares_casa_sucesso(self, mock_obter_parlamentares): mock_obter_parlamentares.return_value = [ Parlamentar(id='123', nome='ParlamentarTeste'), Parlamentar(id='12345', nome='Parlamentar2Teste') ] actual = self.app.get("/v1/parlamentares/BR2") actual_data = actual.data.decode('utf-8') self.assertEqual(actual.status_code, 200) self.assertIn("ParlamentarTeste", actual_data) self.assertIn("Parlamentar2Teste", actual_data) json.loads(actual_data)
def test_buscar_por_parlamentar(self): parlamentar_1 = Parlamentar(id='1', cargo='BR1') parlamentar_2 = Parlamentar(id='2', cargo='BR1') parlamentar_3 = Parlamentar(id='1', cargo='BR2') relatorio_1 = Relatorio(parlamentar=parlamentar_1, data_inicial=datetime(2019, 1, 1)).save() relatorio_2 = Relatorio(parlamentar=parlamentar_2, data_inicial=datetime(2019, 1, 1)).save() relatorio_3 = Relatorio(parlamentar=parlamentar_3, data_inicial=datetime(2019, 1, 1)).save() relatorio_4 = Relatorio(parlamentar=parlamentar_1, data_inicial=datetime(2019, 1, 1)).save() relatorio_5 = Relatorio(parlamentar=parlamentar_3, data_inicial=datetime(2019, 1, 1)).save() relatorio_6 = Relatorio(parlamentar=parlamentar_2, data_inicial=datetime(2019, 1, 1)).save() actual = Relatorios().buscar_por_parlamentar('BR1', '1') expected = [relatorio_1.to_dict(), relatorio_4.to_dict()] self.assertEqual(len(actual), len(expected))
def test_obter_relatorio_json_inexistente_por_periodos_diferentes( self, mock_model_selector ): parlamentar = Parlamentar(id='1', cargo='BR1') brasilia_tz = pytz.timezone('America/Sao_Paulo') relatorio_inicial = Relatorio( parlamentar=parlamentar, data_final=brasilia_tz.localize(datetime(2019, 6, 29)), data_inicial=brasilia_tz.localize(datetime(2019, 6, 15)) ).save() relatorio_gerado = Relatorio( parlamentar=parlamentar, data_final=datetime(2019, 6, 29), data_inicial=datetime(2019, 6, 22) ) class FakeModel: def obter_relatorio(self, *args, **kwargs): return relatorio_gerado mock_model_selector.return_value = FakeModel actual_response = Relatorios().obter_relatorio('1', '2019-06-29', 'BR1', periodo=7) actual_response['_id'] = 'id' relatorio_gerado.pk = 'id' self.assertEqual(mock_model_selector.call_count, 1) self.assertEqual(actual_response, relatorio_gerado.to_dict())
def test_avaliacoes_de_parlamentar(self): parlamentar = Parlamentar(id='id', cargo='BR1') avaliacao1 = Avaliacoes( parlamentar=parlamentar, email='*****@*****.**', relatorioId='4c264b5e3a5efd576ecaf48e', avaliacao='-1', avaliado={'id': '1'} ).save() avaliacao2 = Avaliacoes( parlamentar=parlamentar, email='*****@*****.**', relatorioId='4c264b5e3a5efd576ecaf48e', avaliacao='2', avaliado={'id': '2'} ).save() actual = Avaliacao().avaliacoes('BR1', 'id', '*****@*****.**') self.assertEqual(actual[0], parlamentar) self.assertEqual(actual[1], { '2': [avaliacao2.to_mongo().to_dict()], '1': [], '-1': [avaliacao1.to_mongo().to_dict()], '-2': [] }) self.assertEqual(actual[2], 9)
def set_up_parlamentar(): par = Parlamentar() par.nome = "ParlamentarTeste" par.foto = "url" par.id = "123" par.partido = "Partido" par.cargo = "BR1" par.uf = "ES" return par
def test_obter_parlamentares(self): def fakeObterDeputados(): yield [{ 'nome': 'CESAR DA SILVA', 'id': '1', 'siglaPartido': 'P1', 'siglaUf': 'UF', 'urlFoto': 'foto', }, { 'nome': 'FULANO PESSOA', 'id': '2', 'siglaPartido': 'P2', 'siglaUf': 'UF', 'urlFoto': 'foto2', }] yield [{ 'nome': 'SICRANO PINTO', 'id': '3', 'siglaPartido': 'P1', 'siglaUf': 'UF2', 'urlFoto': 'foto3', }] expected = [ Parlamentar(nome='CESAR DA SILVA', id='1', partido='P1', uf='UF', foto='foto', cargo='BR1'), Parlamentar(nome='FULANO PESSOA', id='2', partido='P2', uf='UF', foto='foto2', cargo='BR1'), Parlamentar(nome='SICRANO PINTO', id='3', partido='P1', uf='UF2', foto='foto3', cargo='BR1') ] mock = Mocker(self.dep.dep) mock.add_response('obterTodosDeputados', fakeObterDeputados()) actual_response = self.dep.obter_parlamentares() self.assertEqual(actual_response, expected)
def test_send_push_notification_message_too_big_sucess(self, mock_urllib3): def assert_equal(actual, expected): self.assertEqual(actual, expected) class FakePoolManager: def __init__(self, *args, **kwargs): FakePoolManager.call_count = 0 def request(self, method, url, headers, body): class responseFail(): status = 200 data = json.dumps({ 'results': [{ 'error': 'MessageTooBig' }] }).encode('utf-8') class responseSucess(): status = 200 data = json.dumps({ 'results': [{ 'id': '123' }] }).encode('utf-8') FakePoolManager.call_count += 1 assert_equal(method, "POST") assert_equal(url, "https://fcm.googleapis.com/fcm/send") if 'reportsIds' in body.decode('utf-8'): return responseSucess() return responseFail() data_inicial = datetime(2019, 10, 12) data_final = datetime(2019, 10, 19) parlamentar1 = Parlamentar(id='1', cargo='BR1', nome='AMANDA') relatorio1 = Relatorio( id="123", parlamentar=parlamentar1, data_final=data_final, data_inicial=data_inicial, proposicoes=[ Proposicao(id="1"), Proposicao(id="2"), Proposicao(id="3"), Proposicao(id="4") ], eventos_presentes=[Evento(id="1"), Evento(id="2")], eventos_previstos=None, eventos_ausentes=[Evento(id="4"), Evento(id="5"), Evento(id="6")]) mock_urllib3.side_effect = FakePoolManager result = send_push_notification("token", [relatorio1.to_dict()]) self.assertTrue(mock_urllib3.called) self.assertEqual(2, mock_urllib3.side_effect.call_count) self.assertTrue(result)
def test_obter_por_id(self): parlamentar = Parlamentar(id='id') relatorio = Relatorio(parlamentar=parlamentar, data_inicial='2019-01-01') relatorio.save() actual = Relatorios().obter_por_id(relatorio.pk) self.assertEqual(relatorio, actual)
def test_minhas_avaliacoes(self): parlamentar = Parlamentar(id='id', cargo='BR1') avaliacao = Avaliacoes(parlamentar=parlamentar, email='*****@*****.**') avaliacao.save() actual = Avaliacao().minhas_avaliacoes('BR1', 'id', '*****@*****.**') self.assertEqual(actual.first(), avaliacao)
def test_avaliacoes_de_parlamentar_sem_avaliacoes(self): parlamentar = Parlamentar(id='id', cargo='BR1') actual = Avaliacao().avaliacoes('BR1', 'id', '*****@*****.**') self.assertIsNone(actual[0]) self.assertIsNone(actual[1]) self.assertIsNone(actual[2])
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()
def test_generate_reports_multiplos_parlamentares( self, mock_send_email ): brasilia_tz = pytz.timezone('America/Sao_Paulo') agora = datetime.now() data_final = datetime(agora.year, agora.month, agora.day) data_final = brasilia_tz.localize(data_final) data_inicial = data_final - timedelta(days=7) parlamentar1 = Parlamentar(id='1', cargo='BR1') parlamentar2 = Parlamentar(id='2', cargo='BR2') parlamentar3 = Parlamentar(id='3', cargo='BR1') relatorio1 = Relatorio( parlamentar=parlamentar1, data_final=data_final, data_inicial=data_inicial ).save().reload() relatorio2 = Relatorio( parlamentar=parlamentar2, data_final=data_final, data_inicial=data_inicial ).save().reload() relatorio3 = Relatorio( parlamentar=parlamentar3, data_final=data_final, data_inicial=data_inicial ).save().reload() mock_send_email.return_value = True user = [User( username='******', password='******', email='*****@*****.**', inscricoes=Inscricoes( parlamentares=[parlamentar1, parlamentar2, parlamentar3], intervalo=7 ) )] generate_reports(user, data_final=agora) mock_send_email.assert_called_once_with( "*****@*****.**", [relatorio1.to_dict(), relatorio2.to_dict(), relatorio3.to_dict()], dates=ANY )
def test_parlamentares_casa_parlamentar_sucesso(self, mock_obter_parlamentar): mock_obter_parlamentar.return_value = Parlamentar(id='1', nome='Parlamentar') actual = self.app.get("/v1/parlamentares/BR2/1") actual_data = json.loads(actual.data.decode('utf-8')) self.assertEqual(actual.status_code, 200) self.assertEqual(actual_data["id"], "1") self.assertEqual(actual_data["nome"], "Parlamentar")
def test_avaliar_item_not_found(self): parlamentar = Parlamentar(id='id', cargo='BR1') relatorio = Relatorio( parlamentar=parlamentar, data_inicial='2019-01-01' ) relatorio.save() with self.assertRaises(ItemNotFound): Avaliacao().avaliar('123', '1', '*****@*****.**', relatorio.pk)
def test_generate_reports_one_obter_relatorio_fails( self, mock_Relatorios, mock_send_email ): class FakeRelatorios(): def obter_relatorio(self, parlamentar, *args, **kwargs): if parlamentar == '2': raise ModelError('msg') return {"nice": "JSON"} mock_Relatorios.side_effect = FakeRelatorios mock_send_email.return_value = True parlamentar1 = Parlamentar(id='1', cargo='BR1') parlamentar2 = Parlamentar(id='2', cargo='BR2') parlamentar3 = Parlamentar(id='3', cargo='BR1') user = [User( username='******', password='******', email='*****@*****.**', inscricoes=Inscricoes( parlamentares=[parlamentar1, parlamentar2, parlamentar3], intervalo=7 ) )] generate_reports(user) self.assertEqual(mock_Relatorios.call_count, 3) mock_send_email.assert_called_once_with( "*****@*****.**", [ {"nice": "JSON"}, { 'parlamentar': parlamentar2.to_dict(), 'orgaos': [], 'eventosPresentes': [], 'eventosPrevistos': [], 'eventosAusentes': [], 'proposicoes': [], '_id': None }, {"nice": "JSON"}, ], dates=ANY)
def obter_parlamentar(self, parlamentar_id): for deputado in self.dep.obterTodosDeputados(): if deputado["id"] == parlamentar_id: parlamentar = Parlamentar() parlamentar.cargo = 'SP' parlamentar.id = deputado['id'] parlamentar.nome = deputado['nome'] parlamentar.partido = deputado['siglaPartido'] parlamentar.uf = 'SP' parlamentar.foto = deputado['urlFoto'] self.relatorio.parlamentar = parlamentar return parlamentar return None
def test_deletar_avaliacao_sucesso(self): warnings.simplefilter("ignore") parlamentar = Parlamentar(id='id', cargo='BR1') avaliacao = Avaliacoes(parlamentar=parlamentar, email='*****@*****.**') avaliacao.save() avaliacao_id = str(avaliacao.pk) Avaliacao().deletar_avaliacao(avaliacao_id) actual = Avaliacoes.objects() self.assertEqual(len(actual), 0)
def obter_parlamentares(self): deputados = [] for page in self.dep.obterTodosDeputados(): for item in page: parlamentar = Parlamentar() parlamentar.cargo = 'BR1' parlamentar.id = str(item['id']) parlamentar.nome = item['nome'] parlamentar.partido = item['siglaPartido'] parlamentar.uf = item['siglaUf'] parlamentar.foto = item['urlFoto'] deputados.append(parlamentar) return deputados
def test_solicitar_geracao_relatorio_relatorio_existente(self): parlamentar = Parlamentar(id='1', cargo='BR1') brasilia_tz = pytz.timezone('America/Sao_Paulo') relatorio_inicial = Relatorio( parlamentar=parlamentar, data_final=brasilia_tz.localize(datetime(2019, 6, 29)), data_inicial=brasilia_tz.localize(datetime(2019, 6, 22)) ).save() actual_response = Relatorios().solicitar_geracao_relatorio('1', '2019-06-29', 'BR1', 7) self.assertEqual(actual_response, relatorio_inicial)
def obter_parlamentar(self, parlamentar_id): try: deputado_info = self.dep.obterDeputado(parlamentar_id) except CamaraDeputadosConnectionError: return None parlamentar = Parlamentar() parlamentar.cargo = 'BR1' parlamentar.id = str(deputado_info['id']) parlamentar.nome = deputado_info['ultimoStatus']['nome'] parlamentar.partido = deputado_info['ultimoStatus']['siglaPartido'] parlamentar.uf = deputado_info['ultimoStatus']['siglaUf'] parlamentar.foto = deputado_info['ultimoStatus']['urlFoto'] self.relatorio.parlamentar = parlamentar return parlamentar
def test_obterParlamentares(self): mock = Mocker(self.dep.dep) mock_response = [ {'id': '12', 'nome': 'Teste2', 'siglaPartido': 'P1'}, {'id': '11', 'nome': 'Teste1', 'siglaPartido': 'P2'}, {'id': '14', 'nome': 'Teste4', 'siglaPartido': 'P1'}, ] expected_response = [ Parlamentar( id='12', nome='Teste2', partido='P1', cargo='SP', uf='SP', foto=None ), Parlamentar( id='11', nome='Teste1', partido='P2', cargo='SP', uf='SP', foto=None ), Parlamentar( id='14', nome='Teste4', partido='P1', cargo='SP', uf='SP', foto=None ) ] mock.add_response("obterTodosDeputados", mock_response) actual_response = self.dep.obter_parlamentares() self.assertEqual(expected_response, actual_response) mock.assert_no_pending_responses()
def test_minhas_avaliacoes_parlamentar_parlamentar_fora_inscricoes(self): parlamentar = Parlamentar(nome="ParlamentarTeste2", id="1234", cargo="BR1") Avaliacoes(email="*****@*****.**", parlamentar=parlamentar, avaliacao="-1", avaliado={}).save() login(self.app, "test", "123") actual = self.app.get( "/minhasAvaliacoes?parlamentarTipo=BR1&parlamentar=1234") self.assertEqual(actual.status_code, 200) self.assertIn(b"ParlamentarTeste2", actual.data) self.assertIn(b"Saldo total: -1", actual.data)
def obter_parlamentares(self): vereadores = self.ver.obterVereadores() lista = [] for v in vereadores: lista.append( Parlamentar( id=v['chave'], nome=v['nome'], partido=v['mandatos'][0]['partido']['sigla'], uf='SP', cargo='SÃO PAULO', foto='https://www.99luca11.com/Users/usuario_sem_foto.png') ) return lista
def obter_parlamentar(self, parlamentar_id): for item in self.ver.obterVereadores(): if str(item['chave']) == parlamentar_id: parlamentar = Parlamentar() parlamentar.cargo = 'SÃO PAULO' parlamentar.nome = item['nome'] parlamentar.id = str(item['chave']) for mandato in item['mandatos']: if mandato['fim'] > datetime.now(): parlamentar.partido = mandato['partido']['sigla'] parlamentar.uf = 'SP' parlamentar.foto = \ 'https://www.99luca11.com/Users/usuario_sem_foto.png' self.obter_cargos_parlamentar(item['cargos']) self.relatorio.parlamentar = parlamentar return parlamentar return None
def obter_parlamentares(self): try: parlamentares = [] for deputado in self.dep.obterTodosDeputados(): parlamentar = Parlamentar() parlamentar.cargo = 'SP' parlamentar.id = deputado['id'] parlamentar.nome = deputado['nome'] parlamentar.partido = deputado['siglaPartido'] parlamentar.uf = 'SP' parlamentar.foto = deputado[ 'urlFoto'] if 'urlFoto' in deputado else None parlamentares.append(parlamentar) return parlamentares except ALESPError as e: logging.error("[ALESP] {}".format(e)) raise ModelError("Erro da API da ALESP")
def test_post_usuarios_inscricoes_sucesso(self, mock_obter_parlamentar): warnings.simplefilter("ignore") mock_obter_parlamentar.return_value = Parlamentar(id="12345", cargo="BR1") login_header = login_api(self.app, "test", "123") actual = self.app.post("/v1/usuarios/inscricoes", data=json.dumps({ 'casa': 'BR1', 'parlamentar': '12345' }), content_type='application/json', headers=login_header) actual_data = json.loads(actual.data.decode("utf-8")) self.assertEqual(actual.status_code, 201) self.assertEqual(actual_data, {"message": "Criada"})
def test_obter_relatorio_json_inexistente_funcao_sem_erro( self, mock_model_selector ): parlamentar = Parlamentar(id='1', cargo='BR1') relatorio = Relatorio(parlamentar=parlamentar, data_final=datetime(2019, 1, 1)) class FakeModel: def obter_relatorio(self, *args, **kwargs): return relatorio mock_model_selector.return_value = FakeModel actual_response = Relatorios().obter_relatorio('1', '2019-01-01', 'BR1', periodo=7) actual_response['_id'] = 'id' relatorio.pk = 'id' self.assertEqual(mock_model_selector.call_count, 1) self.assertEqual(actual_response, relatorio.to_dict())
def test_send_push_notification_invalid_json_response(self, mock_urllib3): def assert_equal(actual, expected): self.assertEqual(actual, expected) class FakePoolManager: def __init__(self, *args, **kwargs): FakePoolManager.call_count = 0 def request(self, method, url, headers, body): class response(): status = 401 data = '<HTML><HEAD><TITLE>Invalid (legacy) Server-key delivered or Sender is not authorized to perform request.</TITLE></HEAD><BODY BGCOLOR="#FFFFFF" TEXT="#000000"><H1>Invalid (legacy) Server-key delivered or Sender is not authorized to perform request.</H1><H2>Error 401</H2></BODY></HTML>'.encode( 'utf-8') FakePoolManager.call_count += 1 assert_equal(method, "POST") assert_equal(url, "https://fcm.googleapis.com/fcm/send") return response() data_inicial = datetime(2019, 10, 12) data_final = datetime(2019, 10, 19) parlamentar1 = Parlamentar(id='1', cargo='BR1', nome='AMANDA') relatorio1 = Relatorio( id="123", parlamentar=parlamentar1, data_final=data_final, data_inicial=data_inicial, proposicoes=[ Proposicao(id="1"), Proposicao(id="2"), Proposicao(id="3"), Proposicao(id="4") ], eventos_presentes=[Evento(id="1"), Evento(id="2")], eventos_previstos=None, eventos_ausentes=[Evento(id="4"), Evento(id="5"), Evento(id="6")]) mock_urllib3.side_effect = FakePoolManager result = send_push_notification("token", [relatorio1.to_dict()]) self.assertTrue(mock_urllib3.called) self.assertEqual(1, mock_urllib3.side_effect.call_count) self.assertFalse(result)
def test_solicitar_geracao_relatorio_nova_thread( self, mock_model_selector ): brasilia_tz = pytz.timezone('America/Sao_Paulo') parlamentar = Parlamentar(id='1', cargo='BR1') relatorio_gerado = Relatorio( parlamentar=parlamentar, data_final=brasilia_tz.localize(datetime(2019, 6, 29)), data_inicial=brasilia_tz.localize(datetime(2019, 6, 22)) ) def obter_relatorio(self, *args, **kwargs): return relatorio_gerado mock_model_selector.return_value = obter_relatorio actual_response = Relatorios().solicitar_geracao_relatorio('1', '2019-06-29', 'BR1', 7) self.assertEqual(actual_response, True)