refactor: allow event to receive keyword arguments

This change also replaces the dataclass implementation of the class to
custom one
This commit is contained in:
2024-08-27 15:12:26 +03:00
parent f167ce7d3b
commit 4fa44b0532
11 changed files with 183 additions and 30 deletions

View File

@ -8,7 +8,7 @@ def test_event_insert_get(database: SQLite, package_ahriman: Package) -> None:
"""
must insert and get event
"""
event = Event(EventType.PackageUpdated, package_ahriman.base, "Updated", {"key": "value"})
event = Event(EventType.PackageUpdated, package_ahriman.base, "Updated", key="value")
database.event_insert(event)
assert database.event_get() == [event]

View File

@ -1,17 +1,57 @@
from ahriman.models.event import Event, EventType
def test_post_init() -> None:
def test_init() -> None:
"""
must replace event type for known types
"""
assert Event("random", "")
assert isinstance(Event(str(EventType.PackageUpdated), "").event, EventType)
assert Event("", "", key="value").data == {"key": "value"}
assert Event("", "").created > 0
def test_from_json_view() -> None:
"""
must construct and serialize event to json
"""
event = Event("event", "object", "message", {"key": "value"})
event = Event("event", "object", "message", key="value")
assert Event.from_json(event.view()) == event
def test_get() -> None:
"""
must return property correctly
"""
assert Event("event", "object", "message", key="value").get("key") == "value"
assert Event("event", "object").get("key") is None
def test_view_empty() -> None:
"""
must skip empty fields during (de-)serialization
"""
event = Event("event", "object")
assert Event.from_json(event.view()) == event
assert "message" not in event.view()
assert "data" not in event.view()
def test_eq() -> None:
"""
must compare two events
"""
event1 = Event("1", "1", "1", 1, key="value")
assert event1 == event1
event2 = Event("2", "2", "2", 2, key="value")
assert event1 != event2
def test_eq_other() -> None:
"""
must return False in case if object is not an instance of event
"""
assert Event("1", "1") != 42

View File

@ -27,7 +27,7 @@ async def test_get(client: TestClient) -> None:
"""
must return all events
"""
event1 = Event("event1", "object1", "message", {"key": "value"})
event1 = Event("event1", "object1", "message", key="value")
event2 = Event("event2", "object2")
await client.post("/api/v1/events", json=event1.view())
await client.post("/api/v1/events", json=event2.view())
@ -46,7 +46,7 @@ async def test_get_with_pagination(client: TestClient) -> None:
"""
must get events with pagination
"""
event1 = Event("event1", "object1", "message", {"key": "value"})
event1 = Event("event1", "object1", "message", key="value")
event2 = Event("event2", "object2")
await client.post("/api/v1/events", json=event1.view())
await client.post("/api/v1/events", json=event2.view())
@ -83,7 +83,7 @@ async def test_post(client: TestClient) -> None:
"""
must create event
"""
event = Event("event1", "object1", "message", {"key": "value"})
event = Event("event1", "object1", "message", key="value")
request_schema = pytest.helpers.schema_request(EventsView.post)
payload = event.view()