phi-drift / tests /test_self_modify.py
crexs's picture
Upload folder using huggingface_hub
914e970 verified
Raw
History Blame Contribute Delete
2.98 kB
"""Tests for the self-modification module."""
import os
import tempfile
from pathlib import Path
import pytest
from infj_bot.core.self_modify import (
SelfModification,
IMPROVEMENT_AREAS,
MAX_PENDING_PROPOSALS,
)
@pytest.fixture
def tmp_db():
fd, path = tempfile.mkstemp(suffix=".db")
os.close(fd)
yield Path(path)
os.unlink(path)
class TestSelfModification:
def test_init_creates_db(self, tmp_db):
SelfModification(db_path=tmp_db)
assert tmp_db.exists()
def test_propose_improvement(self, tmp_db):
sm = SelfModification(db_path=tmp_db)
p = sm.propose_improvement()
assert p is not None
assert "id" in p
assert p["status"] == "pending"
assert p["area"] in IMPROVEMENT_AREAS
assert len(p["description"]) > 10
assert "observed_need" in p
assert len(sm.proposals) == 1
def test_propose_improvement_specific_area(self, tmp_db):
sm = SelfModification(db_path=tmp_db)
p = sm.propose_improvement(area="creativity")
assert p["area"] == "creativity"
def test_approve_reject_apply(self, tmp_db):
sm = SelfModification(db_path=tmp_db)
p = sm.propose_improvement()
pid = p["id"]
sm.approve_proposal(pid)
sm2 = SelfModification(db_path=tmp_db)
loaded = [x for x in sm2.proposals if x["id"] == pid]
assert loaded[0]["status"] == "approved"
sm.reject_proposal(pid)
sm3 = SelfModification(db_path=tmp_db)
loaded = [x for x in sm3.proposals if x["id"] == pid]
assert loaded[0]["status"] == "rejected"
sm.apply_proposal(pid)
sm4 = SelfModification(db_path=tmp_db)
loaded = [x for x in sm4.proposals if x["id"] == pid]
assert loaded[0]["status"] == "applied"
def test_get_pending_proposals(self, tmp_db):
sm = SelfModification(db_path=tmp_db)
assert sm.get_pending_proposals() == []
p = sm.propose_improvement()
assert len(sm.get_pending_proposals()) == 1
sm.approve_proposal(p["id"])
# Reload to see DB changes
sm2 = SelfModification(db_path=tmp_db)
assert len(sm2.get_pending_proposals()) == 0
def test_max_pending_limit(self, tmp_db):
sm = SelfModification(db_path=tmp_db)
for _ in range(MAX_PENDING_PROPOSALS + 2):
sm.propose_improvement()
assert sm._count_pending() <= MAX_PENDING_PROPOSALS
def test_format_self_modify_prompt(self, tmp_db):
sm = SelfModification(db_path=tmp_db)
assert sm.format_self_modify_prompt() == ""
sm.propose_improvement()
prompt = sm.format_self_modify_prompt()
assert "IMPROVEMENTS" in prompt
assert "pending" not in prompt # status not in prompt format
def test_format_self_modify_prompt_empty(self, tmp_db):
sm = SelfModification(db_path=tmp_db)
assert sm.format_self_modify_prompt() == ""