mirror of
https://github.com/koloideal/Argenta.git
synced 2026-06-10 10:05:28 +03:00
ce7e24b924
The entire public api is covered with documentation in two languages - Russian and English. the library now supports the latest three versions of python - 3.12, 3.13 and 3.14 minor design changes: now, when a Boolean flag is entered, its value is an empty string, not None. tests have been adapted to the supported versions of python, readmi has been redesigned in two languages, German is no longer available.
103 lines
4.1 KiB
Python
103 lines
4.1 KiB
Python
import unittest
|
|
from datetime import date, datetime
|
|
|
|
from argenta.data_bridge import DataBridge
|
|
from argenta.command.flag.models import InputFlag
|
|
from argenta.command.flag.flags.models import InputFlags
|
|
from argenta.response.entity import EMPTY_INPUT_FLAGS, Response
|
|
from argenta.response.status import ResponseStatus
|
|
|
|
|
|
class TestDataBridge(unittest.TestCase):
|
|
def setUp(self):
|
|
"""Create a new DataBridge instance for each test"""
|
|
self.data_bridge = DataBridge()
|
|
|
|
def test_update_data_basic(self):
|
|
"""Test basic data update functionality"""
|
|
test_data = {"key1": "value1", "key2": "value2"}
|
|
self.data_bridge.update(test_data)
|
|
self.assertEqual(self.data_bridge.get_all(), test_data)
|
|
|
|
def test_update_data_with_datetime(self):
|
|
"""Test updating data with datetime objects"""
|
|
test_datetime = datetime(2024, 1, 15, 10, 30, 45)
|
|
test_data = {"created_at": test_datetime, "name": "test"}
|
|
self.data_bridge.update(test_data)
|
|
|
|
result = self.data_bridge.get_all()
|
|
self.assertEqual(result["created_at"], test_datetime)
|
|
self.assertEqual(result["name"], "test")
|
|
|
|
def test_update_data_multiple_calls(self):
|
|
"""Test multiple update calls merge data"""
|
|
first_data = {"key1": "value1"}
|
|
second_data = {"key2": "value2"}
|
|
self.data_bridge.update(first_data)
|
|
self.data_bridge.update(second_data)
|
|
self.assertEqual(len(self.data_bridge.get_all()), 2)
|
|
|
|
def test_get_data_empty(self):
|
|
"""Test get_all returns empty dict when no data"""
|
|
self.assertEqual(self.data_bridge.get_all(), {})
|
|
|
|
def test_clear_data(self):
|
|
"""Test clear_all removes all data"""
|
|
self.data_bridge.update({"key": "value"})
|
|
self.assertNotEqual(self.data_bridge.get_all(), {})
|
|
self.data_bridge.clear_all()
|
|
self.assertEqual(self.data_bridge.get_all(), {})
|
|
|
|
def test_delete_from_data(self):
|
|
"""Test delete_by_key removes specific key"""
|
|
test_data = {"key1": "value1", "key2": "value2"}
|
|
self.data_bridge.update(test_data)
|
|
self.data_bridge.delete_by_key("key1")
|
|
result = self.data_bridge.get_all()
|
|
self.assertNotIn("key1", result)
|
|
self.assertIn("key2", result)
|
|
|
|
def test_delete_from_data_nonexistent_key(self):
|
|
"""Test delete_by_key with nonexistent key raises KeyError"""
|
|
with self.assertRaises(KeyError):
|
|
self.data_bridge.delete_by_key("nonexistent_key")
|
|
|
|
def test_get_by_key(self):
|
|
"""Test get_by_key retrieves correct value"""
|
|
test_data = {"key1": "value1", "key2": date(2024, 1, 1)}
|
|
self.data_bridge.update(test_data)
|
|
self.assertEqual(self.data_bridge.get_by_key("key1"), "value1")
|
|
self.assertEqual(self.data_bridge.get_by_key("key2"), date(2024, 1, 1))
|
|
self.assertIsNone(self.data_bridge.get_by_key("nonexistent"))
|
|
|
|
|
|
class TestResponse(unittest.TestCase):
|
|
def test_response_initialization_basic(self):
|
|
"""Test basic Response initialization"""
|
|
response = Response(ResponseStatus.ALL_FLAGS_VALID)
|
|
self.assertEqual(response.status, ResponseStatus.ALL_FLAGS_VALID)
|
|
self.assertEqual(response.input_flags, EMPTY_INPUT_FLAGS)
|
|
|
|
def test_response_initialization_with_flags(self):
|
|
"""Test Response initialization with input flags"""
|
|
input_flags = InputFlags([InputFlag('test', input_value='value', status=None)])
|
|
response = Response(ResponseStatus.INVALID_VALUE_FLAGS, input_flags)
|
|
self.assertEqual(response.status, ResponseStatus.INVALID_VALUE_FLAGS)
|
|
self.assertEqual(response.input_flags, input_flags)
|
|
|
|
def test_response_status_types(self):
|
|
"""Test Response with different status types"""
|
|
statuses = [
|
|
ResponseStatus.ALL_FLAGS_VALID,
|
|
ResponseStatus.UNDEFINED_FLAGS,
|
|
ResponseStatus.INVALID_VALUE_FLAGS,
|
|
ResponseStatus.UNDEFINED_AND_INVALID_FLAGS
|
|
]
|
|
for status in statuses:
|
|
with self.subTest(status=status):
|
|
response = Response(status)
|
|
self.assertEqual(response.status, status)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main() |