diff --git a/src/aki_prj23_transparenzregister/utils/news_mongo_service.py b/src/aki_prj23_transparenzregister/utils/news_mongo_service.py index 1bc6239..a2ea4ec 100644 --- a/src/aki_prj23_transparenzregister/utils/news_mongo_service.py +++ b/src/aki_prj23_transparenzregister/utils/news_mongo_service.py @@ -38,7 +38,7 @@ class MongoNewsService: """ result = list(self.collection.find({"_id": id})) if len(result) == 1: - return MongoEntryTransformer.transform_outgoing(list(result)[0]) + return MongoEntryTransformer.transform_outgoing(result[0]) return None def insert(self, news: News): diff --git a/tests/utils/news_mongo_service_test.py b/tests/utils/news_mongo_service_test.py index 4fb5d08..0d337d6 100644 --- a/tests/utils/news_mongo_service_test.py +++ b/tests/utils/news_mongo_service_test.py @@ -1,8 +1,12 @@ -from unittest.mock import Mock +from unittest.mock import Mock, patch import pytest -from aki_prj23_transparenzregister.utils.news_mongo_service import MongoNewsService +from aki_prj23_transparenzregister.models.news import News +from aki_prj23_transparenzregister.utils.news_mongo_service import ( + MongoEntryTransformer, + MongoNewsService, +) @pytest.fixture() @@ -42,3 +46,70 @@ def test_init(mock_mongo_connector, mock_collection): mock_mongo_connector.database = {"news": mock_collection} service = MongoNewsService(mock_mongo_connector) assert service.collection == mock_collection + + +def test_get_all(mock_mongo_connector, mock_collection): + mock_mongo_connector.database = {"news": mock_collection} + service = MongoNewsService(mock_mongo_connector) + + mock_collection.find.return_value = [] + assert service.get_all() == [] + + +def test_get_by_id_with_result(mock_mongo_connector, mock_collection): + mock_mongo_connector.database = {"news": mock_collection} + service = MongoNewsService(mock_mongo_connector) + + with patch( + "aki_prj23_transparenzregister.utils.news_mongo_service.MongoEntryTransformer.transform_outgoing" + ) as mock_out: + mock_collection.find.return_value = [{}] + mock_out.return_value = {} + assert service.get_by_id("foadh") == {} + + +def test_get_by_id_no_result(mock_mongo_connector, mock_collection): + mock_mongo_connector.database = {"news": mock_collection} + service = MongoNewsService(mock_mongo_connector) + + mock_collection.find.return_value = [] + assert service.get_by_id("foadh") is None + + +def test_insert(mock_mongo_connector, mock_collection): + mock_mongo_connector.database = {"news": mock_collection} + service = MongoNewsService(mock_mongo_connector) + + with patch( + "aki_prj23_transparenzregister.utils.news_mongo_service.MongoEntryTransformer.transform_ingoing" + ) as mock_in: + mock_collection.insert_one.return_value = {} + mock_in.return_value = {} + assert service.insert({}) == {} + + +def test_transform_ingoing(): + news = News("42", None, None, None, None) + result = MongoEntryTransformer.transform_ingoing(news) + assert result["_id"] == "42" + assert "id" not in result + + +def test_transform_outgoing(): + data = { + "_id": "4711", + "title": "Hello", + "date": "Today", + "text": "World", + "source_url": "chat.openai.com", + } + expected_result = News( + **{ + "id": "4711", + "title": "Hello", + "date": "Today", + "text": "World", + "source_url": "chat.openai.com", + } + ) + assert MongoEntryTransformer.transform_outgoing(data) == expected_result