"""Tests for PersistentLearningStore.""" import tempfile from fusionagi.governance.adaptive_ethics import AdaptiveEthics from fusionagi.governance.consequence_engine import ConsequenceEngine from fusionagi.memory.persistent_learning import PersistentLearningStore def test_save_and_load_consequences() -> None: with tempfile.TemporaryDirectory() as tmpdir: engine = ConsequenceEngine() engine.record_choice( choice_id="c1", actor="test", action_taken="act1", estimated_risk=0.3, estimated_reward=0.7, ) engine.record_consequence("c1", outcome_positive=True, actual_risk_realized=0.1, actual_reward_gained=0.8) store = PersistentLearningStore(data_dir=tmpdir) path = store.save_consequences(engine) assert path.endswith("consequences.json") engine2 = ConsequenceEngine() loaded = store.load_consequences(engine2) assert loaded == 1 def test_save_and_load_ethics() -> None: with tempfile.TemporaryDirectory() as tmpdir: ethics = AdaptiveEthics() ethics.record_experience( action_type="file_read", context_summary="reading file outside scope", advisory_reason="out of scope", proceeded=True, outcome_positive=True, ) store = PersistentLearningStore(data_dir=tmpdir) path = store.save_ethics(ethics) assert path.endswith("ethics.json") ethics2 = AdaptiveEthics() loaded = store.load_ethics(ethics2) assert loaded == 1 def test_save_risk_histories() -> None: with tempfile.TemporaryDirectory() as tmpdir: engine = ConsequenceEngine() engine.record_choice("c1", actor="t", action_taken="act1", estimated_risk=0.5, estimated_reward=0.5) engine.record_consequence("c1", outcome_positive=True, actual_risk_realized=0.2, actual_reward_gained=0.8) store = PersistentLearningStore(data_dir=tmpdir) path = store.save_risk_histories(engine) assert path.endswith("risk_histories.json") def test_load_nonexistent_returns_zero() -> None: with tempfile.TemporaryDirectory() as tmpdir: store = PersistentLearningStore(data_dir=tmpdir) engine = ConsequenceEngine() assert store.load_consequences(engine) == 0 ethics = AdaptiveEthics() assert store.load_ethics(ethics) == 0