aki_prj23_transparenzregister/tests/utils/mongo/news_mongo_service_test.py
Philipp Horstenkamp e4a57c9136
Chore/rework workflow (#52)
* Reworked the lint action
* Removed the file change requirement
* Repaired mypy
* Repaired pip-audit
2023-08-17 22:05:12 +02:00

119 lines
3.4 KiB
Python

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