commits
tags
"""Det exporterade fristående scriptet."""
import ast
import types
from rpa.export import generate_standalone_script
FLOW = {
"steps": [{"type": "goto", "url": "https://x.se"}],
"settings": {"headless": True},
"inputs": [{"name": "org_id", "default": "4"}],
"input_sets": {"Test": {"org_id": "9"}, "Prod": {"org_id": "1"}},
}
GRAPH_FLOW = {
"format": "graph",
"nodes": [{"id": "n1", "type": "call_flow", "target": "#sub"}],
"edges": [],
"start": "n1",
"settings": {},
"subflows": [{"id": "sub", "name": "S",
"nodes": [{"id": "s1", "type": "wait", "seconds": 1}], "edges": []}],
}
def _script_module(name="flode"):
src = generate_standalone_script(name, FLOW)
ast.parse(src) # måste vara giltig Python
mod = types.ModuleType("exported")
# kör bara toppnivån utan att importera rpa (klipp bort import-raderna + main-anropet)
body = "\n".join(
line for line in src.splitlines()
if not line.startswith(("import argparse", "from rpa", " main()", 'if __name__'))
)
exec(compile(body, "<exported>", "exec"), mod.__dict__) # noqa: S102
return mod
def test_script_is_valid_python_and_embeds_inputs():
mod = _script_module()
assert mod.INPUTS == FLOW["inputs"]
assert mod.INPUT_SETS == FLOW["input_sets"]
def test_build_initial_vars_merge_order():
mod = _script_module()
assert mod.build_initial_vars(None, []) == {"org_id": "4"} # default
assert mod.build_initial_vars("Test", []) == {"org_id": "9"} # set vinner över default
assert mod.build_initial_vars("Test", ["org_id=99"]) == {"org_id": "99"} # --var vinner över set
assert mod.build_initial_vars(None, ["nytt=x"]) == {"org_id": "4", "nytt": "x"}
def test_build_initial_vars_errors():
mod = _script_module()
import pytest
with pytest.raises(SystemExit):
mod.build_initial_vars("Saknas", [])
with pytest.raises(SystemExit):
mod.build_initial_vars(None, ["utan_likhetstecken"])
def test_script_embeds_subflows():
src = generate_standalone_script("m", GRAPH_FLOW)
ast.parse(src)
mod = types.ModuleType("exported")
body = "\n".join(
line for line in src.splitlines()
if not line.startswith(("import argparse", "from rpa", " main()", 'if __name__'))
)
exec(compile(body, "<exported>", "exec"), mod.__dict__) # noqa: S102
assert mod.SUBFLOWS[0]["id"] == "sub"
assert mod.NODES[0]["type"] == "call_flow"