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 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_collection): """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_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.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_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.mongo.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