"""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, "", "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, "", "exec"), mod.__dict__) # noqa: S102 assert mod.SUBFLOWS[0]["id"] == "sub" assert mod.NODES[0]["type"] == "call_flow"