import importlib.util import pytest from pam_deploy_graph.graph import build_graph_or_none, build_langgraph from pam_deploy_graph.params_loader import load_params_file def test_build_graph_or_none_without_langgraph_is_safe(): graph = build_graph_or_none() if importlib.util.find_spec("langgraph"): assert graph is not None else: assert graph is None def test_build_langgraph_error_without_dependency_is_clear(): if importlib.util.find_spec("langgraph"): pytest.skip("langgraph installed") with pytest.raises(RuntimeError, match="langgraph is not installed"): build_langgraph() def test_langgraph_invokes_global_flow_when_installed(tmp_path): if not importlib.util.find_spec("langgraph"): pytest.skip("langgraph not installed") graph = build_langgraph(flow="global") result = graph.invoke( { "params": load_params_file("doc_scripts/config.txt.example"), "execution_strategy": "fake", "config_path": str(tmp_path / "config.txt"), } ) state = result["agent_state"] assert state.completed_global_steps[-1] == "poll-download-progress" assert state.action_backends["get-online-ips"] == "fake"