mirror of
https://github.com/fhswf/aki_prj23_transparenzregister.git
synced 2025-04-22 08:02:53 +02:00
240 lines
7.9 KiB
Python
240 lines
7.9 KiB
Python
"""Test for the Home Page."""
|
|
import datetime
|
|
from collections.abc import Generator
|
|
from typing import Any
|
|
from unittest.mock import patch
|
|
|
|
import dash
|
|
import pandas as pd
|
|
import pytest
|
|
from sqlalchemy.orm import Session
|
|
|
|
from aki_prj23_transparenzregister.ui.pages import home
|
|
from aki_prj23_transparenzregister.ui.session_handler import SessionHandler
|
|
|
|
|
|
def test_import() -> None:
|
|
"""Checks if an import co company_stats_dash can be made."""
|
|
assert home is not None
|
|
|
|
|
|
def test_person_relation_type_filter() -> None:
|
|
with patch(
|
|
"aki_prj23_transparenzregister.ui.pages.home.get_all_person_relations"
|
|
) as mock_filter:
|
|
data = [
|
|
{"relation_type": "Eigentümer"},
|
|
{"relation_type": "Inhaber"},
|
|
{"relation_type": "Eigentümer"},
|
|
]
|
|
mock_filter.return_value = pd.DataFrame(data)
|
|
assert list(home.person_relation_type_filter()) == ["Eigentümer", "Inhaber"]
|
|
|
|
|
|
def test_company_relation_type_filter() -> None:
|
|
with patch(
|
|
"aki_prj23_transparenzregister.ui.pages.home.get_all_company_relations"
|
|
) as mock_filter:
|
|
data = [
|
|
{"relation_type": "Eigentümer"},
|
|
{"relation_type": "Inhaber"},
|
|
{"relation_type": "Eigentümer"},
|
|
]
|
|
mock_filter.return_value = pd.DataFrame(data)
|
|
assert list(home.company_relation_type_filter()) == ["Eigentümer", "Inhaber"]
|
|
|
|
|
|
def test_update_table() -> None:
|
|
metrics = pd.DataFrame(
|
|
[
|
|
{
|
|
"designation": "Mustermann, Max",
|
|
"category": "Person",
|
|
"centrality": 3.14,
|
|
"betweenness": 42,
|
|
},
|
|
{
|
|
"designation": "Musterfrau, Martina",
|
|
"category": "Person",
|
|
"centrality": 42,
|
|
"betweenness": 3.14,
|
|
},
|
|
]
|
|
)
|
|
selected_metric = "centrality"
|
|
|
|
expected_result_df = [
|
|
{
|
|
"Unternehmen/Person": "Musterfrau, Martina",
|
|
"Kategorie": "Person",
|
|
"Maß: centrality": 42.0,
|
|
},
|
|
{
|
|
"Unternehmen/Person": "Mustermann, Max",
|
|
"Kategorie": "Person",
|
|
"Maß: centrality": 3.14,
|
|
},
|
|
]
|
|
expected_result_columns = [
|
|
{"name": "Unternehmen/Person", "id": "Unternehmen/Person"},
|
|
{"name": "Kategorie", "id": "Kategorie"},
|
|
{"name": "Maß: centrality", "id": "Maß: centrality"},
|
|
]
|
|
|
|
result_df, result_columns = home.update_table(selected_metric, metrics)
|
|
assert result_df == expected_result_df
|
|
assert result_columns == expected_result_columns
|
|
|
|
|
|
@pytest.fixture(scope="session", autouse=True)
|
|
def _get_person_relations() -> Generator:
|
|
data = [
|
|
{
|
|
"id_company": 1,
|
|
"name_company": "0 10 24 Telefondienste GmbH",
|
|
"relation_type": "GESCHAEFTSFUEHRER",
|
|
"id_person": 1,
|
|
"lastname": "Tetau",
|
|
"firstname": "Nicolas",
|
|
"date_of_birth": datetime.date(1971, 1, 2),
|
|
},
|
|
{
|
|
"id_company": 1,
|
|
"name_company": "0 10 24 Telefondienste GmbH",
|
|
"relation_type": "PROKURIST",
|
|
"id_person": 2,
|
|
"lastname": "Dammast",
|
|
"firstname": "Lutz",
|
|
"date_of_birth": datetime.date(1966, 12, 6),
|
|
},
|
|
{
|
|
"id_company": 2,
|
|
"name_company": "1. Staiger Grundstücksverwaltung GmbH & Co. KG",
|
|
"relation_type": "KOMMANDITIST",
|
|
"id_person": 3,
|
|
"lastname": "Tutsch",
|
|
"firstname": "Rosemarie",
|
|
"date_of_birth": datetime.date(1941, 10, 9),
|
|
},
|
|
{
|
|
"id_company": 2,
|
|
"name_company": "1. Staiger Grundstücksverwaltung GmbH & Co. KG",
|
|
"relation_type": "HAFTENDER_GESELLSCHAFTER",
|
|
"id_person": 4,
|
|
"lastname": "Staiger",
|
|
"firstname": "Marc",
|
|
"date_of_birth": datetime.date(1969, 10, 22),
|
|
},
|
|
{
|
|
"id_company": 2,
|
|
"name_company": "1. Staiger Grundstücksverwaltung GmbH & Co. KG",
|
|
"relation_type": "HAFTENDER_GESELLSCHAFTER",
|
|
"id_person": 5,
|
|
"lastname": "Staiger",
|
|
"firstname": "Michaela",
|
|
"date_of_birth": datetime.date(1971, 3, 3),
|
|
},
|
|
]
|
|
with patch(
|
|
"aki_prj23_transparenzregister.ui.pages.home.get_all_person_relations"
|
|
) as mock_get_person_relations:
|
|
mock_get_person_relations.return_value = pd.DataFrame(data)
|
|
yield
|
|
|
|
|
|
@pytest.fixture(scope="session", autouse=True)
|
|
def _get_company_relations() -> Generator:
|
|
data = [
|
|
{
|
|
"id_company_to": 2,
|
|
"name_company_to": "1. Staiger Grundstücksverwaltung GmbH & Co. KG",
|
|
"relation_type": "GESCHAEFTSFUEHRER",
|
|
"name_company_from": "Staiger I. Verwaltung-GmbH",
|
|
"id_company_from": 3226,
|
|
},
|
|
{
|
|
"id_company_to": 3,
|
|
"name_company_to": "1 A Autenrieth Kunststofftechnik GmbH & Co. KG",
|
|
"relation_type": "GESCHAEFTSFUEHRER",
|
|
"name_company_from": "Autenrieth Verwaltungs-GmbH",
|
|
"id_company_from": 3324,
|
|
},
|
|
{
|
|
"id_company_to": 5,
|
|
"name_company_to": "2. Schaper Objekt GmbH & Co. Kiel KG",
|
|
"relation_type": "KOMMANDITIST",
|
|
"name_company_from": "Multi-Center Warenvertriebs GmbH",
|
|
"id_company_from": 2213,
|
|
},
|
|
{
|
|
"id_company_to": 6,
|
|
"name_company_to": "AASP Filmproduktionsgesellschaft mbH & Co. Leonie KG",
|
|
"relation_type": "INHABER",
|
|
"name_company_from": "ABN AMRO Structured Products Gesellschaft für Fondsbeteiligungen mbH",
|
|
"id_company_from": 3332,
|
|
},
|
|
{
|
|
"id_company_to": 6,
|
|
"name_company_to": "AASP Filmproduktionsgesellschaft mbH & Co. Leonie KG",
|
|
"relation_type": "KOMMANDITIST",
|
|
"name_company_from": "Kallang GmbH",
|
|
"id_company_from": 3316,
|
|
},
|
|
]
|
|
with patch(
|
|
"aki_prj23_transparenzregister.ui.pages.home.get_all_company_relations"
|
|
) as mock_get_person_relations:
|
|
mock_get_person_relations.return_value = pd.DataFrame(data)
|
|
yield
|
|
|
|
|
|
def test_update_graph_data() -> None:
|
|
graph_result, metrics_result, nodes_result, edges_result = home.update_graph_data(
|
|
frozenset({"HAFTENDER_GESELLSCHAFTER"}), frozenset("GESCHAEFTSFUEHRER")
|
|
)
|
|
assert graph_result is not None
|
|
|
|
|
|
@pytest.fixture()
|
|
def _set_session(full_db: Session) -> Generator[None, None, None]:
|
|
"""Sets a session for the dash application to be used."""
|
|
SessionHandler.session = full_db
|
|
yield
|
|
SessionHandler.session = None
|
|
|
|
|
|
@pytest.mark.usefixtures("_set_session")
|
|
def test_layout() -> None:
|
|
"""Checks if layout can be executed."""
|
|
home.layout()
|
|
|
|
|
|
@pytest.mark.usefixtures("_set_session")
|
|
@pytest.mark.parametrize("empty", ["", None, {}])
|
|
def test_redirect_empty(empty: Any) -> None:
|
|
"""Tests the redirection on clicking on the plot with an empty argument."""
|
|
assert home.redirect_from_home_graph(empty) == dash.no_update # type: ignore
|
|
|
|
|
|
def test_redirect_content_without_db() -> None:
|
|
"""Tests the error when no SQL session is defined."""
|
|
with pytest.raises(ValueError, match="No SQL session defined."):
|
|
assert home.redirect_from_home_graph({"empty": ""})
|
|
|
|
|
|
@pytest.mark.usefixtures("_set_session")
|
|
@pytest.mark.parametrize(
|
|
("click_on", "redirect_to"),
|
|
[
|
|
(
|
|
{"text": "Some Company GmbH"},
|
|
"/unternehmensdetails/1",
|
|
),
|
|
({"text": "Max Mustermann"}, "/personendetails/1"),
|
|
({"text": "I do not exist"}, dash.no_update),
|
|
],
|
|
)
|
|
def test_redirect(click_on: dict, redirect_to: Any) -> None:
|
|
"""Tests the redirection when clicking on a plot."""
|
|
assert home.redirect_from_home_graph({"points": [click_on]}) == redirect_to
|