mirror of
https://github.com/fhswf/aki_prj23_transparenzregister.git
synced 2025-06-22 00:14:01 +02:00
Feat/fetch financials (#79)
This commit is contained in:
36
tests/apps/enrich_company_financials_test.py
Normal file
36
tests/apps/enrich_company_financials_test.py
Normal 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
|
1
tests/utils/data_extraction/__init__.py
Normal file
1
tests/utils/data_extraction/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
"""Tests for data_extraction."""
|
111
tests/utils/data_extraction/bundesanzeiger_test.py
Normal file
111
tests/utils/data_extraction/bundesanzeiger_test.py
Normal 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
|
@ -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
|
||||
|
Reference in New Issue
Block a user