commits
tags
"""initial_vars: värden som matas in vid körning (flödets 'inputs' / värde-set)."""
import json
import pytest
from rpa import flow_engine, runs
def test_run_flow_seeds_initial_vars(tmp_path, monkeypatch):
monkeypatch.setattr(flow_engine, "launch_context", lambda *a, **k: (_ for _ in ()).throw(AssertionError()))
monkeypatch.setattr(flow_engine.config, "EXPORT_DIR", tmp_path)
result: dict = {}
flow_engine.run_flow(
[
{"type": "set_var", "var": "hälsning", "text": "Hej {namn}"},
{"type": "save_var", "var": "hälsning", "filename": "ut.json"},
],
log=lambda _m: None,
initial_vars={"namn": "Världen"},
on_finished=lambda err, v: result.update({"err": err, "vars": v}),
)
assert result["err"] is None
assert result["vars"]["namn"] == "Världen"
assert result["vars"]["hälsning"] == "Hej Världen"
assert json.loads((tmp_path / "ut.json").read_text(encoding="utf-8")) == "Hej Världen"
def test_initial_vars_stringified():
"""Motorn tvingar nycklar till str (frontend kan skicka annat)."""
result: dict = {}
flow_engine.run_flow(
[{"type": "set_var", "var": "x", "text": "{a}-{b}"}],
log=lambda _m: None,
initial_vars={"a": 1, "b": True},
on_finished=lambda err, v: result.update({"vars": v}),
)
assert result["vars"]["x"] == "1-True"
def test_start_run_propagates_initial_vars(monkeypatch):
seen: dict = {}
def fake_run_flow(steps, **kw):
seen.update(kw)
kw.get("on_finished") and kw["on_finished"](None, {})
monkeypatch.setattr(runs, "run_flow", fake_run_flow)
runs.start_run([], initial_vars={"k": "v"}, entry_subflow="sub1")
import time
time.sleep(0.1)
assert seen.get("initial_vars") == {"k": "v"}
assert seen.get("entry_subflow") == "sub1"
def test_entry_subflow_runs_only_that_subgraph():
flow = {
"format": "graph",
"nodes": [{"id": "a", "type": "set_var", "var": "main_ran", "text": "yes"}],
"edges": [], "start": "a", "settings": {},
"subflows": [{
"id": "calc", "name": "Calc",
"nodes": [{"id": "s", "type": "set_var", "var": "y", "text": "{x}!"}],
"edges": [], "start": "s", "inputs": [{"name": "x"}],
}],
}
result: dict = {}
flow_engine.run_flow(
flow, log=lambda _m: None, initial_vars={"x": "hej"}, entry_subflow="calc",
on_finished=lambda err, v: result.update({"err": err, "vars": v}),
)
assert result["err"] is None
assert result["vars"]["y"] == "hej!"
assert "main_ran" not in result["vars"]
def test_entry_subflow_unknown_id_errors():
result: dict = {}
flow_engine.run_flow(
{"format": "graph", "nodes": [], "edges": [], "subflows": []},
log=lambda _m: None, entry_subflow="nope",
on_finished=lambda err, v: result.update({"err": err}),
)
assert result["err"] is not None