def test_create_from_temp_table_data_when_empenho_already_exists(self):
        self.dao = EmpenhosSOFCacheDao()
        empenho_temp = mommy.make(EmpenhoSOFCacheTemp, _fill_optional=True)
        self.dao.create_from_temp_table_obj(empenho_temp=empenho_temp)

        assert 1 == EmpenhoSOFCache.objects.count()

        self.dao.create_from_temp_table_obj(empenho_temp=empenho_temp)
        assert 1 == EmpenhoSOFCache.objects.count()
Ejemplo n.º 2
0
def get_empenhos_for_contratos_from_sof_api():
    """
    Este método tem como principal responsabilidade
    realizar a junção entre os dados de contratos disponibilizados
    pelo Airflow na tabela contratos_raw e capturar os dados de
    empenhos de acordo com o código do contrato e o ano de empenho.
    """
    contratos_raw_dao = ContratosRawDao()
    empenhos_dao = EmpenhosSOFCacheDao()
    empenhos_temp_dao = EmpenhosSOFCacheTempDao()
    empenhos_failed_requests_dao = EmpenhosFailedRequestsDao()

    empenhos_temp_dao.erase_all()
    empenhos_failed_requests_dao.erase_all()

    print("Fetching empenhos from SOF API and saving to temp table")
    fetch_empenhos_from_sof_and_save_to_temp_table(
        contratos_raw_dao=contratos_raw_dao,
        empenhos_temp_dao=empenhos_temp_dao)

    while empenhos_failed_requests_dao.count_all() > 0:
        print("Retrying failed API requests")
        retry_empenhos_sof_failed_api_requests(
            contratos_raw_dao, empenhos_failed_requests_dao, empenhos_temp_dao)

    print("Verifying count of lines in temp table")
    verify_table_lines_count(
        empenhos_dao=empenhos_dao, empenhos_temp_dao=empenhos_temp_dao)

    print("Moving data from temp table to the real table")
    update_empenho_sof_cache_from_temp_table(
        empenhos_dao=empenhos_dao, empenhos_temp_dao=empenhos_temp_dao)
def test_generate_execucoes_contratos():
    assert 0 == ExecucaoContrato.objects.count()

    empenhos_data = GENERATE_EXECUCOES_CONTRATOS_EMPENHOS_DATA

    for data in empenhos_data:
        mommy.make(EmpenhoSOFCache, **data)

    uc = GenerateExecucoesContratosUseCase(
        empenhos_dao=EmpenhosSOFCacheDao(),
        execucoes_dao=ExecucoesContratosDao(),
        modalidades_dao=ModalidadesContratosDao(),
        objetos_dao=ObjetosContratosDao(),
        fornecedores_dao=FornecedoresDao())
    uc.execute()

    assert 2 == ExecucaoContrato.objects.count()
    assert 1 == ModalidadeContrato.objects.count()
    assert 1 == ObjetoContrato.objects.count()
    assert 1 == Fornecedor.objects.count()
Ejemplo n.º 4
0
def generate_execucoes_contratos_and_apply_fromto():
    """
    Método que gera as execuções (dados a serem exibidos na ferramenta)
    e aplica as junções dos arquivos, gerando ao final a planilha para
    download dos dados
    """
    print("Generating execucões contratos")
    generate_execucoes_uc = GenerateExecucoesContratosUseCase(
        empenhos_dao=EmpenhosSOFCacheDao(),
        execucoes_dao=ExecucoesContratosDao(),
        modalidades_dao=ModalidadesContratosDao(),
        objetos_dao=ObjetosContratosDao(),
        fornecedores_dao=FornecedoresDao())
    generate_execucoes_uc.execute()

    print("Applying from-to")
    apply_fromto_uc = ApplyCategoriasContratosFromToUseCase(
        execucoes_dao=ExecucoesContratosDao(),
        categorias_fromto_dao=CategoriasContratosFromToDao(),
        categorias_dao=CategoriasContratosDao())
    apply_fromto_uc.execute()

    generate_xlsx_files()
Ejemplo n.º 5
0
def retry_failed_requests_and_update_sof_cache_table():
    """
    Executa as etapas pós download de empenhos (fetch_empenhos) do script
    `get_empenhos_for_contratos_from_sof_api`. Utilizado qdo acontece algum
    erro durante o processo, após os empenhos terem sido baixados.
    """
    contratos_raw_dao = ContratosRawDao()
    empenhos_dao = EmpenhosSOFCacheDao()
    empenhos_temp_dao = EmpenhosSOFCacheTempDao()
    empenhos_failed_requests_dao = EmpenhosFailedRequestsDao()

    while empenhos_failed_requests_dao.count_all() > 0:
        print("Retrying failed API requests")
        retry_empenhos_sof_failed_api_requests(
            contratos_raw_dao, empenhos_failed_requests_dao, empenhos_temp_dao)

    print("Verifying count of lines in temp table")
    verify_table_lines_count(
        empenhos_dao=empenhos_dao, empenhos_temp_dao=empenhos_temp_dao)

    print("Moving data from temp table to the real table")
    update_empenho_sof_cache_from_temp_table(
        empenhos_dao=empenhos_dao, empenhos_temp_dao=empenhos_temp_dao)
Ejemplo n.º 6
0
def generate_xlsx_files():
    print("Generating xlsx files")
    generate_xlsx_uc = GenerateXlsxFilesUseCase(
        empenhos_dao=EmpenhosSOFCacheDao(), data_handler=openpyxl)
    generate_xlsx_uc.execute()
 def setUp(self):
     self.dao = EmpenhosSOFCacheDao()
class EmpenhosSOFCacheDaoTestCase(TestCase):
    def setUp(self):
        self.dao = EmpenhosSOFCacheDao()

    @patch.object(EmpenhoSOFCache.objects, 'all')
    def test_get_all(self, mock_all):
        mocked_contratos = [
            Mock(spec=EmpenhoSOFCache),
            Mock(spec=EmpenhoSOFCache)
        ]
        mock_all.return_value = mocked_contratos

        ret = self.dao.get_all()
        assert ret == mocked_contratos
        mock_all.assert_called_once_with()

    @patch.object(EmpenhoSOFCache.objects, 'count')
    def test_count_all(self, mock_count):
        mock_count.return_value = 2

        ret = self.dao.count_all()
        assert ret == 2
        mock_count.assert_called_once_with()

    @patch.object(EmpenhoSOFCache.objects, 'create')
    def test_create(self, mock_create):
        empenho_data = EMPENHOS_DAO_CREATE_DATA
        empenho = mommy.prepare(EmpenhoSOFCache, **empenho_data)
        mock_create.return_value = empenho

        ret = self.dao.create(data=empenho_data)
        mock_create.assert_called_once_with(**empenho_data)
        assert ret == empenho

    @pytest.mark.django_db
    def test_create_from_temp_table_data(self):
        mocked_empenho = Mock(spec=EmpenhoSOFCache)
        self.dao.model = Mock(spec=EmpenhoSOFCache)
        self.dao.model.return_value = mocked_empenho

        empenho_temp = mommy.prepare(EmpenhoSOFCacheTemp, _fill_optional=True)

        empenho = self.dao.create_from_temp_table_obj(
            empenho_temp=empenho_temp)

        for field in empenho_temp._meta.fields:
            if field.primary_key is True:
                continue
            assert (getattr(empenho,
                            field.name) == getattr(empenho_temp, field.name))
        mocked_empenho.save.assert_called_once_with()

    @pytest.mark.django_db
    def test_create_from_temp_table_data_when_empenho_already_exists(self):
        self.dao = EmpenhosSOFCacheDao()
        empenho_temp = mommy.make(EmpenhoSOFCacheTemp, _fill_optional=True)
        self.dao.create_from_temp_table_obj(empenho_temp=empenho_temp)

        assert 1 == EmpenhoSOFCache.objects.count()

        self.dao.create_from_temp_table_obj(empenho_temp=empenho_temp)
        assert 1 == EmpenhoSOFCache.objects.count()