mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-29 19:35:20 +02:00
test(automations/templating): lock render, filters, environment, context
render.py (4): variable substitution, StrictUndefined raises on missing
keys, evaluate_predicate coerces to bool, render_value walks dicts/lists
and renders string leaves.
filters.py (4): slugify produces URL-safe output, date formats datetime
with strftime, date(None) → "" so templates can write
{{ inputs.last_fired_at | date }} on first run, date(str) passes through.
environment.py (4): the sandbox boundary — disallowed Jinja built-ins
(e.g. pprint) raise, and the finalize hook coerces non-string outputs
to predictable wire shapes (datetime → ISO, None → "", dict → JSON).
context.py (1): build_run_context exposes {run, inputs, steps} with the
exact shape every plan template body relies on.
13 tests total, all pure unit.
This commit is contained in:
parent
49af95b652
commit
db4eef651f
5 changed files with 205 additions and 0 deletions
|
|
@ -0,0 +1,53 @@
|
|||
"""Lock the ``{run, inputs, steps}`` namespace exposed to every template."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import UTC, datetime
|
||||
from uuid import UUID
|
||||
|
||||
import pytest
|
||||
|
||||
from app.automations.templating.context import build_run_context
|
||||
|
||||
pytestmark = pytest.mark.unit
|
||||
|
||||
|
||||
def test_build_run_context_exposes_run_inputs_and_steps_namespaces() -> None:
|
||||
"""The namespace handed to templates groups run metadata under ``run``,
|
||||
runtime + static inputs under ``inputs``, and step outputs (keyed by
|
||||
``output_as`` / ``step_id``) under ``steps``. Locks the contract that
|
||||
every plan template body relies on."""
|
||||
creator = UUID("00000000-0000-0000-0000-000000000001")
|
||||
started = datetime(2026, 5, 28, 14, 30, tzinfo=UTC)
|
||||
|
||||
ctx = build_run_context(
|
||||
run_id=42,
|
||||
automation_id=7,
|
||||
automation_name="Weekly digest",
|
||||
automation_version=3,
|
||||
search_space_id=1,
|
||||
creator_id=creator,
|
||||
trigger_id=11,
|
||||
trigger_type="schedule",
|
||||
started_at=started,
|
||||
attempt=2,
|
||||
inputs={"topic": "weekly"},
|
||||
step_outputs={"summarize": {"text": "ok"}},
|
||||
)
|
||||
|
||||
assert ctx == {
|
||||
"run": {
|
||||
"id": 42,
|
||||
"automation_id": 7,
|
||||
"automation_name": "Weekly digest",
|
||||
"automation_version": 3,
|
||||
"search_space_id": 1,
|
||||
"creator_id": creator,
|
||||
"trigger_id": 11,
|
||||
"trigger_type": "schedule",
|
||||
"started_at": started,
|
||||
"attempt": 2,
|
||||
},
|
||||
"inputs": {"topic": "weekly"},
|
||||
"steps": {"summarize": {"text": "ok"}},
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue