"""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