mirror of
https://github.com/fhswf/aki_prj23_transparenzregister.git
synced 2025-04-22 22:12:53 +02:00
116 lines
3.2 KiB
Python
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
|