mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-31 19:45:15 +02:00
feat(automations): add event trigger match and inputs
This commit is contained in:
parent
3ba18c7750
commit
4ba637ea44
4 changed files with 98 additions and 0 deletions
|
|
@ -0,0 +1,26 @@
|
|||
"""An event hands its payload + metadata to the run as inputs."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
from app.automations.triggers.builtin.event.inputs import event_runtime_inputs
|
||||
from app.event_bus import Event
|
||||
|
||||
pytestmark = pytest.mark.unit
|
||||
|
||||
|
||||
def test_runtime_inputs_flatten_payload_with_event_metadata() -> None:
|
||||
event = Event(
|
||||
event_type="document.indexed",
|
||||
payload={"document_id": 42, "document_type": "FILE"},
|
||||
search_space_id=7,
|
||||
)
|
||||
|
||||
inputs = event_runtime_inputs(event)
|
||||
|
||||
assert inputs["document_id"] == 42
|
||||
assert inputs["document_type"] == "FILE"
|
||||
assert inputs["event_type"] == "document.indexed"
|
||||
assert inputs["event_id"] == event.event_id
|
||||
assert inputs["occurred_at"] == event.occurred_at.isoformat()
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
"""Which triggers an event fires: event_type equality + filter match."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
from app.automations.triggers.builtin.event.match import trigger_matches_event
|
||||
from app.event_bus import Event
|
||||
|
||||
pytestmark = pytest.mark.unit
|
||||
|
||||
|
||||
def _event(event_type: str = "document.indexed", **payload) -> Event:
|
||||
return Event(event_type=event_type, payload=payload, search_space_id=7)
|
||||
|
||||
|
||||
def test_matches_when_event_type_equal_and_filter_passes() -> None:
|
||||
params = {"event_type": "document.indexed", "filter": {"document_type": "FILE"}}
|
||||
assert trigger_matches_event(params, _event(document_type="FILE")) is True
|
||||
|
||||
|
||||
def test_no_match_when_event_type_differs() -> None:
|
||||
params = {"event_type": "document.indexed", "filter": {}}
|
||||
assert trigger_matches_event(params, _event("podcast.generated")) is False
|
||||
|
||||
|
||||
def test_no_match_when_filter_rejects_payload() -> None:
|
||||
params = {"event_type": "document.indexed", "filter": {"document_type": "FILE"}}
|
||||
assert trigger_matches_event(params, _event(document_type="WEBPAGE")) is False
|
||||
|
||||
|
||||
def test_empty_filter_matches_any_payload_of_that_type() -> None:
|
||||
params = {"event_type": "document.indexed", "filter": {}}
|
||||
assert trigger_matches_event(params, _event(document_type="ANYTHING")) is True
|
||||
|
||||
|
||||
def test_missing_filter_key_is_treated_as_empty() -> None:
|
||||
params = {"event_type": "document.indexed"}
|
||||
assert trigger_matches_event(params, _event(document_type="X")) is True
|
||||
Loading…
Add table
Add a link
Reference in a new issue