test: Add unit test for news api wrapper

This commit is contained in:
TrisNol 2023-11-10 16:03:42 +01:00
parent ae41cf61bc
commit ac6ca3547b
3 changed files with 165 additions and 1 deletions

View File

@ -47,7 +47,6 @@ class HandelsblattRSS(BaseNewsExtractor):
source_url=article["link"], source_url=article["link"],
) )
) )
break
return news return news
def __get_news_details_text__(self, url: str) -> str: def __get_news_details_text__(self, url: str) -> str:

View File

@ -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 = """<rss version="2.0">
<channel>
<item>
<guid>test</guid>
<title>Test</title>
<pubDate>Fri, 10 Nov 2023 09:10:27 +0100</pubDate>
<link>https://www.handelsblatt.com/test</link>
</item>
<item>
<guid>test</guid>
<title>Test</title>
<pubDate>Fri, 10 Nov 2023 09:10:27 +0100</pubDate>
<link>https://www.handelsblatt.com/test</link>
</item>
</channel>
</rss>
"""
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 = """
<html>
<body>
<p>Hallo Welt.</p>
<p>Dies ist ein Text.</p>
</body>
</html>
"""
mock_driver.return_value = Mock(page_source=mock_response)
api = HandelsblattRSS()
assert api.__get_news_details_text__("test") == "Hallo Welt. Dies ist ein Text."

View File

@ -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 = """
<html>
<body>
<p>Title to be ignored</p>
<p>Hallo Welt.</p>
<p>Dies ist ein Text.</p>
</body>
</html>
"""
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."