from unittest.mock import Mock, patch import pytest from aki_prj23_transparenzregister.models.news import News from aki_prj23_transparenzregister.utils.mongo.news_mongo_service import ( MongoEntryTransformer, MongoNewsService, ) @pytest.fixture() def mock_mongo_connector(mocker: Mock) -> Mock: """Mock MongoConnector class. Args: mocker (any): Library mocker Returns: Mock: Mocked MongoConnector """ mock = Mock() mocker.patch( "aki_prj23_transparenzregister.utils.mongo.connector.MongoConnector", return_value=mock, ) return mock @pytest.fixture() def mock_collection() -> Mock: """Mock mongo collection. Returns: Mock: Mock object """ return Mock() def test_init(mock_mongo_connector: Mock, mock_collection: Mock) -> None: """Test CompanyMongoService constructor. Args: mock_mongo_connector (Mock): Mocked MongoConnector library mock_collection (Mock): Mocked pymongo 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, mock_collection: Mock) -> None: 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, mock_collection: Mock ) -> None: mock_mongo_connector.database = {"news": mock_collection} service = MongoNewsService(mock_mongo_connector) with patch( "aki_prj23_transparenzregister.utils.mongo.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, mock_collection: Mock) -> None: 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, mock_collection: Mock) -> None: mock_mongo_connector.database = {"news": mock_collection} service = MongoNewsService(mock_mongo_connector) with patch( "aki_prj23_transparenzregister.utils.mongo.news_mongo_service.MongoEntryTransformer.transform_ingoing" ) as mock_in: mock_collection.insert_one.return_value = {} mock_in.return_value = {} assert service.insert({}) == {} # type: ignore def test_transform_ingoing() -> None: news = News("42", None, None, None, None) # type: ignore result = MongoEntryTransformer.transform_ingoing(news) assert result["_id"] == "42" assert "id" not in result def test_transform_outgoing() -> None: 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