"""Tests about the transfer of news and sentiments from the mongodb to the sql db.""" import pandas as pd import pytest from _pytest.monkeypatch import MonkeyPatch from sqlalchemy.orm import Session from aki_prj23_transparenzregister.models.news import News from aki_prj23_transparenzregister.utils import transfer_news from aki_prj23_transparenzregister.utils.mongo.news_mongo_service import ( MongoEntryTransformer, ) from aki_prj23_transparenzregister.utils.sql import entities NEWS_TEXTS = [ MongoEntryTransformer.transform_outgoing(_) for _ in [ { "_id": "467c0c06-6332-4ab6-8678-666c35388850", "title": "EVG und Deutsche Bahn vertagen sich auf kommende Woche", "date": "2023-06-16T21:53:30.404+02:00", "text": ' Die Tarifverhandlungen zwischen Deutscher Bahn und EVG werden kommende Woche weitergehen. Beide Seiten erklärten, sie hätten "Verständigungen" und "Kompromisslinien" erarbeitet. Bis zur nächsten Gesprächsrunde soll es keine Streiks geben. Die Eisenbahn- und Verkehrsgewerkschaft (EVG) und die Deutschen Bahn (DB) haben die Tarifgespräche auf kommende Woche vertragt. Dies teilten die Verhandlungspartner am späten Abend übereinstimmend mit. "Wir haben intensiv verhandelt und zu vielen Themen eine Verständigung erreicht", erklärte DB-Personalvorstand Martin Seiler. "Das Ziel ist in Sicht." Auch EVG-Tarifvorstand Kristian Loroch sprach von "zahlreichen Kompromisslinien", die erarbeitet worden seien. Diese sollten nun "mit den zuständigen Entscheidergremien" in der Gewerkschaft ausführlich diskutiert werden. Arbeitsniederlegungen bei der Deutschen Bahn sind nach EVG-Angaben bis zur nächsten Gesprächsrunde ausgeschlossen. 14.06.2023 Die Gewerkschaft EVG und die Bahn haben sich bei den Tarifverhandlungen offenbar angenähert. mehr Eigentlich hatten EVG und Bahn ihre Verhandlungen von Montag an auf fünf Tage angesetzt - sie sollten also bis Freitag gehen. In den letzten Stunden der Verhandlungen dürften vor allem mögliche Entgelterhöhungen und die Laufzeit des Tarifvertrags im Mittelpunkt gestanden haben - die beiden kompliziertesten Themen. Die Gewerkschaft hatte bei einer Zwischenbilanz am Mittwoch bereits hervorgehoben, es gebe dabei viel Konfliktpotenzial. Beide Seiten ließen nach dem Ende offen, in welchen Punkten es Einigungen gab und wo noch Differenzen bleiben. Auch über den Ablauf und die Stimmung wurde weiter nichts bekanntgegeben. 12.06.2023 Im Tarifkonflikt bei der Deutschen Bahn wird von heute an wieder für insgesamt 230.000 Beschäftigte verhandelt. mehr Die Tarifverhandlungen laufen bereits seit Ende Februar. Zwei Mal legte die EVG mit begleitenden Warnstreiks den Bahnverkehr weitgehend lahm. Ein geplanter 50-Stunden-Ausstand im Mai wurde nach juristischer Auseinandersetzung beim Arbeitsgericht in Frankfurt am Main kurzfristig abgesagt. Die Bahn bietet bis zu zwölf Prozent mehr Lohn bei einer Laufzeit von 24 Monaten. Für mittlere Einkommen bedeutet es zehn Prozent mehr, für höhere acht Prozent mehr. Dazu kämen 2850 Euro Ausgleichsprämie für die Inflation noch in diesem Jahr. Die EVG hatte das Angebot zuletzt als unzureichend besonders für untere Lohngruppen bezeichnet, sich aber verhandlungsbereit gezeigt. Die Gewerkschaft fordert für gut 180.000 Beschäftigte zwölf Prozent mehr Lohn, mindestens aber 650 Euro im Monat mehr, bei einer Laufzeit von zwölf Monaten. Dieses Thema im Programm: Über dieses Thema berichtete Deutschlandfunk am 16. Juni 2023 um 22:00 Uhr in den Nachrichten. 09.06.2023 • 13:35 Uhr Audio 14.06.2023 • 15:23 Uhr ', "source_url": "https://www.tagesschau.de/wirtschaft/unternehmen/bahn-evg-tarifgespraeche-vertagt-100.html", "sentiment": {"label": "negative", "score": 0.027671935356928575}, "companies": { "Deutscher Bahn": 1, "EVG": 4, "Eisenbahn - und Verkehrsgewerkschaft": 1, "Deutschen Bahn": 3, "DB": 1, "EV": 2, "Deutschlandfunk": 1, "Third Company": 1, }, }, { "_id": "a59fb7be-04d1-4c5b-ba8b-b2cafbd6aba7", "title": "Intel will Chipfabrik im polnischen Breslau bauen", "date": "2023-06-16T14:00:01.950+02:00", "text": ' Der US-Konzern Intel plant eine neue Chipfabrik in Polen. Damit baut der Konzern seine Europa-Präsenz weiter aus. Im Streit über Subventionen für das geplante Werk in Magdeburg rückt eine Einigung offenbar näher. Für Europa könnte es ein weiterer Schritt hin zu mehr Unabhängigkeit in der Chipproduktion sein: Der weltgrößte Halbleiter-Hersteller Intel will im polnischen Breslau eine große Chipfabrik bauen. Neben der Fertigung in Irland und dem geplanten Werk in Magdeburg wäre es der dritte europäische Standort des US-Konzerns. In dem polnischen Werk sollen Mikroprozessoren montiert und getestet werden, wie Konzern-Chef Pat Gelsinger heute in Breslau ankündigte. Das Investitionsvolumen bezifferte er auf umgerechnet 4,2 Milliarden Euro. In der Anlage selbst sollen bis zum Jahr 2027 rund 2000 hoch qualifizierte Arbeitsplätze entstehen. Intel erwartet außerdem, dass indirekt mehrere Tausend weitere Jobs geschaffen werden, zusätzlich zu eventuellen Neueinstellungen bei Zulieferern. 19.04.2023 Mit Milliarden Euro will sich die EU bei Computerchips unabhängiger von Asien machen. mehr Wie bei quasi allen neuen Chip-Fabriken weltweit war die Entscheidung für den Standort Breslau mit einer Subventionszusage durch den Staat verbunden. Intel-Chef Gelsinger sagte laut Nachrichtenagentur Reuters: "Polen war einfach ein bisschen hungriger" und habe sich so gegen andere Länder durchgesetzt, die darum gewetteifert hätten, dass Intel in ihrer Region investiere. Wie hoch die Zuschüsse der polnischen Regierung ausfallen, teilte Intel nicht mit. Der Konzern betonte jedoch, die geplante Investition in Polen werde zusammen mit der bereits bestehenden Wafer-Fertigung im irischen Leixlip und der geplanten Fabrik in Magdeburg dazu beitragen, eine durchgängige Wertschöpfungskette für die Halbleiterproduktion in Europa zu schaffen. Mit Blick auf die Gefahr von Abhängigkeiten hatte der EU-Rat gemeinsam mit dem Europaparlament im April dieses Jahres das sogenannte "Chip-Gesetz" verabschiedet. Demnach soll der europäische Marktanteil an Halbleitern bis 2030 von zehn Prozent auf mindestens 20 Prozent verdoppelt werden. Dahinter steht der Wille der EU, technologisch unabhängiger von China zu werden. Damit sich internationale Chipherstellern mit großen Anlagen in Europa anzusiedeln, hatte sie zuletzt grünes Licht für milliardenschwere Subventionen gegeben. 08.06.2023 Um bei der Chip-Produktion unabhängiger von China zu werden, hat die EU ein Beihilfen-Programm genehmigt. mehr Über die Höhe der Subvention für das geplante Intel-Werks in Magdeburg gab es zuletzt Streit innerhalb der Regierung, nachdem Intel mehr als die genehmigten 6,8 Milliarden Euro Subvention vom Bund verlangte. Finanzminister Christian Lindner (FPD) lehnte dies zunächst ab. Nach Informationen des "Handelsblatts" rückt eine Einigung näher. Das Blatt zitiert Regierungskreise, wonach sich die Subventionen für die Intel-Fabrik in Magdeburg nun auf 9,8 Milliarden Euro belaufen sollen. Der Vertrag stehe kurz vor der Unterzeichnung. Wie ein Regierungssprecher bestätigte, will sich der Intel-Chef am Montag mit Bundeskanzler Olaf Scholz treffen. 07.11.2022 • 22:53 Uhr Weltspiegel 02.10.2022 • 14:45 Uhr ', "source_url": "https://www.tagesschau.de/wirtschaft/unternehmen/intel-chipproduktion-standort-europa-subventionen-100.html", "sentiment": {"label": "negative", "score": 0.030282364810138726}, "companies": { "Intel": 6, "EU": 2, "Reuters": 1, "FPD": 1, "Handelsblatts": 1, "Weltspiegel": 1, "Other Company": 2, "Other Company GmbH": 1, }, }, ] ] def test_get_company_dict(full_db: Session) -> None: """Tests if a company value dict can be queried for the id matching of companies.""" result = transfer_news.get_company_dict(full_db) assert result == { "Other Company GmbH": 2, "Some Company GmbH": 1, "Third Company GmbH": 3, } @pytest.mark.parametrize( ("url", "domain"), [ ( "https://www.tagesschau.de/wirtschaft/unternehmen/intel-chipproduktion-standort-europa-subventionen-100.html", "www.tagesschau.de", ), ( "http://google.de/something", "google.de", ), ], ) def test_get_base_url(url: str, domain: str) -> None: """Tests if the domain can be extracted from an url.""" assert transfer_news.extract_domain(url) == domain @pytest.mark.parametrize( ("ner_name", "company_id"), [ ("Other Company GmbH", 2), ("Other Company", 2), ("Some Company GmbH", 1), ("Some Company", 1), ("I do not exist", None), ("Some Compayn GmbH", None), ], ) def test_get_company_id( ner_name: str, company_id: int | None, full_db: Session ) -> None: """Tests if the company id can be identified correctly.""" assert transfer_news.get_company_id(ner_name, full_db) == company_id @pytest.mark.parametrize( ("raw_company_dict", "company_ids_dict"), [ ({"I do not exist": 3, "Some Compayn GmbH": 2}, {}), ({"Other Company GmbH": 2, "Other Company": 3}, {2: 5}), ], ) def test_translate_company_named_dict( raw_company_dict: dict[str, int], company_ids_dict: dict[int, int], full_db: Session ) -> None: """Tests if a set of companies can be translated into a company id dict.""" assert ( transfer_news.translate_company_named_dict(raw_company_dict, full_db) == company_ids_dict ) @pytest.mark.parametrize("news", NEWS_TEXTS) def test_add_article_to_sql(news: News, full_db: Session) -> None: """Tests if articles can be added to the sql db.""" transfer_news.add_article_to_sql(news, full_db) @pytest.mark.working_on() def test_transfer_news_to_sql(full_db: Session, monkeypatch: MonkeyPatch) -> None: """Tests if a set of news articles / sentiments can be added to the sql db.""" monkeypatch.setattr( "aki_prj23_transparenzregister.utils.transfer_news.get_all_news", lambda _: NEWS_TEXTS, ) transfer_news._transfer_news_to_sql(None, full_db) # type: ignore articles = pd.read_sql_table(entities.News.__tablename__, full_db.bind) # type: ignore assert "text" in articles.columns del articles["text"] assert articles.to_dict(orient="records") == [ { "id": 1, "number_of_companies": 1, "overall_sentiment_certainty": 0.027671935356928575, "overall_sentiment_label": "NEGATIVE", "source_domain": "www.tagesschau.de", "source_url": "https://www.tagesschau.de/wirtschaft/unternehmen/bahn-evg-tarifgespraeche-vertagt-100.html", "sum_of_times_named": 3, "timestamp": pd.Timestamp("2023-06-16 21:53:30.404000"), "title": "EVG und Deutsche Bahn vertagen sich auf kommende Woche", }, { "id": 2, "number_of_companies": 1, "overall_sentiment_certainty": 0.030282364810138726, "overall_sentiment_label": "NEGATIVE", "source_domain": "www.tagesschau.de", "source_url": "https://www.tagesschau.de/wirtschaft/unternehmen/intel-chipproduktion-standort-europa-subventionen-100.html", "sum_of_times_named": 2, "timestamp": pd.Timestamp("2023-06-16 14:00:01.950000"), "title": "Intel will Chipfabrik im polnischen Breslau bauen", }, ] pd.testing.assert_frame_equal( pd.read_sql_table(entities.Sentiment.__tablename__, full_db.bind), # type: ignore pd.DataFrame( [ { "article_id": 1, "company_id": 3, "id": 1, "specific_sentiment_label": None, "specific_sentiment_score": float("NaN"), "times_named": 1, }, { "article_id": 2, "company_id": 2, "id": 2, "specific_sentiment_label": None, "specific_sentiment_score": float("NaN"), "times_named": 3, }, ] ), check_like=True, )