aki_prj23_transparenzregister/tests/utils/news_mongo_service_test.py

116 lines
3.2 KiB
Python

from unittest.mock import Mock, patch
import pytest
from aki_prj23_transparenzregister.models.news import News
from aki_prj23_transparenzregister.utils.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.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.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