import pytest def test_run_select_indicators_returns_dict(): from core.runner import run_skill_script result = run_skill_script("select_indicators.py", ["--sectors", "WASH"]) assert isinstance(result, dict) assert "selected" in result assert "count_by_sector" in result def test_run_select_indicators_sectors_present(): from core.runner import run_skill_script result = run_skill_script( "select_indicators.py", ["--sectors", "WASH", "Food Security", "Shelter"], ) assert result["count_by_sector"].get("WASH", 0) > 0 def test_run_skill_script_raises_on_bad_script(): from core.runner import run_skill_script with pytest.raises((RuntimeError, FileNotFoundError)): run_skill_script("does_not_exist.py", []) def test_run_select_indicators_unknown_sector_returns_empty(): from core.runner import run_skill_script result = run_skill_script("select_indicators.py", ["--sectors", "INVALID_SECTOR_XYZ_NOT_REAL"]) assert isinstance(result, dict) assert result.get("count_by_sector", {}).get("INVALID_SECTOR_XYZ_NOT_REAL", 0) == 0 def test_run_skill_script_raw_via_subprocess(tmp_path, monkeypatch): """run_skill_script_raw: stdout returned as string; non-zero exit raises.""" import core.runner as runner_mod helper_ok = tmp_path / "ok.py" helper_ok.write_text('import sys; sys.stdout.write("wrote /tmp/out.json")') helper_fail = tmp_path / "fail.py" helper_fail.write_text('import sys; sys.stderr.write("boom"); sys.exit(1)') monkeypatch.setattr(runner_mod, "_SCRIPTS", tmp_path) assert runner_mod.run_skill_script_raw("ok.py", []) == "wrote /tmp/out.json" import pytest with pytest.raises(RuntimeError, match="boom"): runner_mod.run_skill_script_raw("fail.py", [])