Código fonte de tests.unit.test_relatorios

import threading
import unittest
from datetime import datetime
from time import sleep
from unittest.mock import patch

import pytz
from mongoengine import connect

from legislei.models.relatorio import Parlamentar, Relatorio
from legislei.services.relatorios import Relatorios


[documentos]class TestRelatorios(unittest.TestCase):
[documentos] def setUp(self): connect('mongoenginetest', host='mongomock://localhost')
[documentos] def tearDown(self): Relatorio.drop_collection()
[documentos] 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)
[documentos] 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))
[documentos] def test_obter_relatorio_json_existente(self): brasilia_tz = pytz.timezone('America/Sao_Paulo') parlamentar = Parlamentar(id='1', cargo='BR1') relatorio = Relatorio( parlamentar=parlamentar, data_final=brasilia_tz.localize(datetime(2019, 1, 8)), data_inicial=brasilia_tz.localize(datetime(2019, 1, 1)), ).save() actual_response = Relatorios().obter_relatorio( '1', '2019-01-08', 'BR1', periodo=7) self.maxDiff = None self.assertEqual( brasilia_tz.normalize(actual_response['dataFinal'].replace(tzinfo=pytz.UTC)), relatorio.to_dict()['dataFinal'] ) actual_response['dataFinal'] = relatorio.to_dict()['dataFinal'] self.assertEqual( brasilia_tz.normalize(actual_response['dataInicial'].replace(tzinfo=pytz.UTC)), relatorio.to_dict()['dataInicial'] ) actual_response['dataInicial'] = relatorio.to_dict()['dataInicial'] self.assertEqual(actual_response, relatorio.to_dict())
[documentos] @patch("legislei.house_selector.house_selector") 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())
[documentos] @patch("legislei.house_selector.house_selector") 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())
[documentos] 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)
[documentos] @patch("legislei.controllers.report_controller.Relatorios.obter_relatorio") 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)
[documentos] def test_solicitar_geracao_relatorio_relatorio_ja_sendo_gerado(self): def fakeLongThread(): sleep(0.1) thread_existente = threading.Thread( name='1BR12019-06-297', target=fakeLongThread ) thread_existente.start() actual_response = Relatorios().solicitar_geracao_relatorio('1', '2019-06-29', 'BR1', 7) self.assertEqual(actual_response, False)