Feat/fetch financials (#79)

This commit is contained in:
Tristan Nolde
2023-09-09 17:28:35 +02:00
committed by GitHub
14 changed files with 6343 additions and 5129 deletions

View File

@ -0,0 +1,36 @@
"""Tests for the enrich_company_financials module."""
from unittest.mock import Mock, patch
import pandas as pd
from aki_prj23_transparenzregister.apps import enrich_company_financials
from aki_prj23_transparenzregister.models.auditor import Auditor
def test_import_enrich_company_financials() -> None:
"""Testing if the enrich_company_financials can be imported."""
assert enrich_company_financials
@patch(
"aki_prj23_transparenzregister.apps.enrich_company_financials.Bundesanzeiger.get_information"
)
@patch(
"aki_prj23_transparenzregister.apps.enrich_company_financials.CompanyMongoService"
)
def test_work(mock_compnay_service: Mock, mock_bundesanzeiger: Mock) -> None:
mock_bundesanzeiger.return_value = pd.DataFrame(
[
{
"jahr": "2042",
"auditors": [Auditor(name="", company="")],
"financial_results": [],
}
]
)
# mock_compnay_service.add_yearly_resreturn_value
enrich_company_financials.work(
{"_id": "", "name": "ABC AG", "location": {"city": "Haltern am See"}},
mock_compnay_service,
)
assert enrich_company_financials

View File

@ -0,0 +1 @@
"""Tests for data_extraction."""

View File

@ -0,0 +1,111 @@
from unittest.mock import Mock, patch
import pandas as pd
from aki_prj23_transparenzregister.models.company import FinancialKPIEnum
from aki_prj23_transparenzregister.utils.data_extraction.bundesanzeiger import (
Bundesanzeiger,
)
def test_extract_auditor_company_no_hits() -> None:
input_data = """
<b>
Nothing to see here
</b>
"""
ba = Bundesanzeiger()
result = ba.extract_auditor_company(input_data)
assert result is None
def test_extract_auditor_company() -> None:
company_name = "Korrupte Wirtschaftsprüfer GmbH & Co. KG"
input_data = f"""
<b>
{company_name}
<br>
Max Mustermann
</b>
"""
ba = Bundesanzeiger()
result = ba.extract_auditor_company(input_data)
assert result == company_name
def test_extract_kpis() -> None:
input_data = """
Die Prj23_Transparenzregister GmbH erwirtschaftete einen Jahresüberschuss 10.000,43 €.
Des Weiteren sanken die Gesamtverbindlichkeiten 42,00 €
"""
ba = Bundesanzeiger()
result = ba.__extract_kpis__(input_data)
net_income = 10000.43
liabilities = 42.00
assert result[FinancialKPIEnum.NET_INCOME.value] == net_income
assert result[FinancialKPIEnum.LIABILITIES.value] == liabilities
def test_extracct_financial_results() -> None:
input_data = """
<br>
Die Prj23_Transparenzregister GmbH erwirtschaftete einen Jahresüberschuss 10.000,43 €.
</br>
<h2>Dies ist ein Platzhalter, der ignoriert werden soll</h2>
<b>Des Weiteren sanken die Gesamtverbindlichkeiten 42,00 €</b>
"""
ba = Bundesanzeiger()
result = ba.extract_financial_results(input_data)
net_income = 10000.43
liabilities = 42.00
assert result[FinancialKPIEnum.NET_INCOME.value] == net_income
assert result[FinancialKPIEnum.LIABILITIES.value] == liabilities
def test_filter_reports() -> None:
test_data = [
{"name": "Bedienungsanleitung", "report": "", "raw_report": ""},
{"name": "Jahresabschluss 1998", "report": "", "raw_report": ""},
]
test_df = pd.DataFrame(test_data)
ba = Bundesanzeiger()
result = ba.filter_reports(test_df)
assert len(result) == 1
assert result.iloc[0].jahr == "1998"
@patch(
"aki_prj23_transparenzregister.utils.data_extraction.bundesanzeiger.Ba.get_reports"
)
def test_get_information(mock_bundesanzeiger: Mock) -> None:
mock_bundesanzeiger.return_value = {
"1": {
"name": "Bedienungsanleitung",
"report": "",
"company": "",
"raw_report": "",
},
"2": {
"name": "Jahresabschluss 1998",
"report": "",
"company": "PRJ 23 Transparenzregister GmbH",
"raw_report": "",
},
}
ba = Bundesanzeiger()
result = ba.get_information("PRJ 23 Transparenzregister GmbH", "Iserlohn")
assert len(result) == 1
@patch(
"aki_prj23_transparenzregister.utils.data_extraction.bundesanzeiger.Ba.get_reports"
)
def test_get_information_no_results(mock_bundesanzeiger: Mock) -> None:
mock_bundesanzeiger.return_value = {}
ba = Bundesanzeiger()
result = ba.get_information("PRJ 23 Transparenzregister GmbH", "Iserlohn")
assert len(result) == 0

View File

@ -3,7 +3,7 @@ from unittest.mock import Mock
import pytest
from aki_prj23_transparenzregister.models.company import Company
from aki_prj23_transparenzregister.models.company import Company, CompanyID, Location
from aki_prj23_transparenzregister.utils.mongo.company_mongo_service import (
CompanyMongoService,
)
@ -73,7 +73,7 @@ def test_by_id_no_result(mock_mongo_connector: Mock, mock_collection: Mock) -> N
mock_mongo_connector.database = {"companies": mock_collection}
service = CompanyMongoService(mock_mongo_connector)
mock_collection.find.return_value = []
assert service.get_by_id("Does not exist") is None # type: ignore
assert service.get_by_id("Does not exist") is None
def test_by_id_result(mock_mongo_connector: Mock, mock_collection: Mock) -> None:
@ -87,7 +87,7 @@ def test_by_id_result(mock_mongo_connector: Mock, mock_collection: Mock) -> None
service = CompanyMongoService(mock_mongo_connector)
mock_entry = {"id": "Does exist", "vaue": 42}
mock_collection.find.return_value = [mock_entry]
assert service.get_by_id("Does exist") == mock_entry # type: ignore
assert service.get_by_id("Does exist") == mock_entry
def test_insert(mock_mongo_connector: Mock, mock_collection: Mock) -> None:
@ -101,4 +101,55 @@ def test_insert(mock_mongo_connector: Mock, mock_collection: Mock) -> None:
service = CompanyMongoService(mock_mongo_connector)
mock_result = 42
mock_collection.insert_one.return_value = mock_result
assert service.insert(Company(None, None, "", "", [])) == mock_result # type: ignore
assert (
service.insert(
Company(CompanyID("", ""), Location("Hier und Dort"), "", "", [])
)
== mock_result
)
def test_get_by_object_id_no_result(
mock_mongo_connector: Mock, mock_collection: Mock
) -> None:
mock_mongo_connector.database = {"companies": mock_collection}
service = CompanyMongoService(mock_mongo_connector)
mock_result: list = []
mock_collection.find.return_value = mock_result
assert service.get_by_object_id("649f16a1e198338c3b44299e") is None
def test_get_by_object_id(mock_mongo_connector: Mock, mock_collection: Mock) -> None:
mock_mongo_connector.database = {"companies": mock_collection}
service = CompanyMongoService(mock_mongo_connector)
mock_result: list = [{"_id": "abc", "brille?": "Fielmann", "Hotel?": "Trivago"}]
mock_collection.find.return_value = mock_result
assert service.get_by_object_id("612316a1e198338c3b44299e") == mock_result[0]
def test_get_where_financial_no_results(
mock_mongo_connector: Mock, mock_collection: Mock
) -> None:
mock_mongo_connector.database = {"companies": mock_collection}
service = CompanyMongoService(mock_mongo_connector)
mock_result: list = [{"_id": "abc", "brille?": "Fielmann", "Hotel?": "Trivago"}]
mock_collection.find.return_value = mock_result
assert service.get_where_no_financial_results() == mock_result
def test_get_where_financial_results(
mock_mongo_connector: Mock, mock_collection: Mock
) -> None:
mock_mongo_connector.database = {"companies": mock_collection}
service = CompanyMongoService(mock_mongo_connector)
mock_result: list = [{"_id": "abc", "brille?": "Fielmann", "Hotel?": "Trivago"}]
mock_collection.find.return_value = mock_result
assert service.get_where_yearly_results() == mock_result
def test_add_yearly_reslults(mock_mongo_connector: Mock, mock_collection: Mock) -> None:
mock_mongo_connector.database = {"companies": mock_collection}
service = CompanyMongoService(mock_mongo_connector)
mock_result: list = [{"_id": "abc", "brille?": "Fielmann", "Hotel?": "Trivago"}]
mock_collection.update_one.return_value = mock_result
assert service.add_yearly_results("612316a1e198338c3b44299e", {}) == mock_result