diff --git a/src/aki_prj23_transparenzregister/utils/data_extraction/news/handelsblatt.py b/src/aki_prj23_transparenzregister/utils/data_extraction/news/handelsblatt.py index 98cba65..ada112b 100644 --- a/src/aki_prj23_transparenzregister/utils/data_extraction/news/handelsblatt.py +++ b/src/aki_prj23_transparenzregister/utils/data_extraction/news/handelsblatt.py @@ -47,7 +47,6 @@ class HandelsblattRSS(BaseNewsExtractor): source_url=article["link"], ) ) - break return news def __get_news_details_text__(self, url: str) -> str: diff --git a/tests/utils/data_extraction/news/handelsblatt_test.py b/tests/utils/data_extraction/news/handelsblatt_test.py new file mode 100644 index 0000000..d91a0c1 --- /dev/null +++ b/tests/utils/data_extraction/news/handelsblatt_test.py @@ -0,0 +1,89 @@ +"""Testing module for Handelsblatt RSS API.""" +from unittest.mock import Mock, patch + +from aki_prj23_transparenzregister.models.news import News +from aki_prj23_transparenzregister.utils.data_extraction.news.handelsblatt import ( + HandelsblattRSS, +) + + +def test_init() -> None: + api = HandelsblattRSS() + assert api is not None + assert api.base_url == "https://www.handelsblatt.com/contentexport/feed" + + +@patch( + "aki_prj23_transparenzregister.utils.data_extraction.news.handelsblatt.requests.get" +) +def test_get_news_for_category_error(mock_requests_get: Mock) -> None: + mock_requests_get.return_value = Mock(ok=False) + api = HandelsblattRSS() + assert api.get_news_for_category() is None + + +@patch( + "aki_prj23_transparenzregister.utils.data_extraction.news.handelsblatt.requests.get" +) +@patch( + "aki_prj23_transparenzregister.utils.data_extraction.news.handelsblatt.HandelsblattRSS.__get_news_details_text__" +) +def test_get_news_for_category(mock_get_details: Mock, mock_requests_get: Mock) -> None: + mock_get_details.return_value = ( + "Es war einmal vor langer Zeit, in einer weit, weit entfernten Galaxis..." + ) + mock_response = """ + + + test + Test + Fri, 10 Nov 2023 09:10:27 +0100 + https://www.handelsblatt.com/test + + + test + Test + Fri, 10 Nov 2023 09:10:27 +0100 + https://www.handelsblatt.com/test + + + + """ + mock_requests_get.return_value = Mock(ok=True, text=mock_response) + + api = HandelsblattRSS() + assert api.get_news_for_category() == [ + News( + id="test", + title="Test", + date="2023-11-10T09:10:27+0100", + source_url="https://www.handelsblatt.com/test", + text="Es war einmal vor langer Zeit, in einer weit, weit entfernten Galaxis...", + ), + News( + id="test", + title="Test", + date="2023-11-10T09:10:27+0100", + source_url="https://www.handelsblatt.com/test", + text="Es war einmal vor langer Zeit, in einer weit, weit entfernten Galaxis...", + ), + ] + + +@patch( + "aki_prj23_transparenzregister.utils.data_extraction.news.handelsblatt.webdriver.Chrome" +) +def test_get_news_details_text(mock_driver: Mock) -> None: + mock_response = """ + + +

Hallo Welt.

+

Dies ist ein Text.

+ + + + """ + mock_driver.return_value = Mock(page_source=mock_response) + + api = HandelsblattRSS() + assert api.__get_news_details_text__("test") == "Hallo Welt. Dies ist ein Text." diff --git a/tests/utils/data_extraction/news/tagesschau_test.py b/tests/utils/data_extraction/news/tagesschau_test.py new file mode 100644 index 0000000..a786203 --- /dev/null +++ b/tests/utils/data_extraction/news/tagesschau_test.py @@ -0,0 +1,76 @@ +"""Testing module for Tagesschau API.""" +from unittest.mock import Mock, patch + +from aki_prj23_transparenzregister.models.news import News +from aki_prj23_transparenzregister.utils.data_extraction.news.tagesschau import ( + TagesschauAPI, +) + + +def test_init() -> None: + api = TagesschauAPI() + assert api is not None + assert api.base_url == "https://www.tagesschau.de/api2" + + +@patch( + "aki_prj23_transparenzregister.utils.data_extraction.news.tagesschau.requests.get" +) +def test_get_news_for_category_error(mock_requests_get: Mock) -> None: + mock_requests_get.return_value = Mock(ok=False) + api = TagesschauAPI() + assert api.get_news_for_category() is None + + +@patch( + "aki_prj23_transparenzregister.utils.data_extraction.news.tagesschau.requests.get" +) +@patch( + "aki_prj23_transparenzregister.utils.data_extraction.news.tagesschau.TagesschauAPI.__get_news_details_text__" +) +def test_get_news_for_category(mock_get_details: Mock, mock_requests_get: Mock) -> None: + mock_get_details.return_value = ( + "Es war einmal vor langer Zeit, in einer weit, weit entfernten Galaxis..." + ) + mock_response = { + "news": [ + { + "externalId": "test", + "title": "Test", + "date": "2021-07-05", + "detailsweb": "https://www.tagesschau.de/test", + } + ] + } + mock_requests_get.return_value = Mock(ok=True, json=lambda: mock_response) + + api = TagesschauAPI() + assert api.get_news_for_category() == [ + News( + id="test", + title="Test", + date="2021-07-05", + source_url="https://www.tagesschau.de/test", + text="Es war einmal vor langer Zeit, in einer weit, weit entfernten Galaxis...", + ) + ] + + +@patch( + "aki_prj23_transparenzregister.utils.data_extraction.news.tagesschau.requests.get" +) +def test_get_news_details_text(mock_requests_get: Mock) -> None: + mock_response = """ + + +

Title to be ignored

+

Hallo Welt.

+

Dies ist ein Text.

+ + + + """ + mock_requests_get.return_value = Mock(ok=True, text=mock_response) + + api = TagesschauAPI() + assert api.__get_news_details_text__("test") == "Hallo Welt. Dies ist ein Text."