fix(settings): rollback restores old_value instead of new_value and supports deletion fallback

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-02-23 12:15:44 +00:00
parent 8fd107a682
commit 862ba99802
4 changed files with 35 additions and 18 deletions
+20 -5
View File
@@ -203,19 +203,34 @@ class TestRollbackSetting:
"""rollback_setting reinstates the value from a given audit log entry."""
def test_rollback_to_previous_value(self, db_session):
"""Rolling back an entry restores the old_value (the value *before* that change)."""
from app.utils.settings_service import get_setting_from_db, rollback_setting, save_setting_to_db
save_setting_to_db(db_session, "workdir", "/v1", changed_by="admin") # entry id 1
save_setting_to_db(db_session, "workdir", "/v2", changed_by="admin") # entry id 2
save_setting_to_db(db_session, "workdir", "/v1", changed_by="admin") # entry 1: old=None, new=/v1
save_setting_to_db(db_session, "workdir", "/v2", changed_by="admin") # entry 2: old=/v1, new=/v2
first_entry = db_session.query(SettingsAuditLog).filter_by(key="workdir").first()
# first entry has new_value="/v1"
success = rollback_setting(db_session, "workdir", first_entry.id, changed_by="rollbacker")
# Rolling back entry 2 should undo the /v1→/v2 change and restore /v1
second_entry = db_session.query(SettingsAuditLog).filter_by(key="workdir").order_by(SettingsAuditLog.id.desc()).first()
success = rollback_setting(db_session, "workdir", second_entry.id, changed_by="rollbacker")
assert success is True
current = get_setting_from_db(db_session, "workdir")
assert current == "/v1"
def test_rollback_deletes_setting_when_old_value_is_none(self, db_session):
"""Rolling back the first-ever entry (old_value=None) deletes the setting from DB."""
from app.utils.settings_service import get_setting_from_db, rollback_setting, save_setting_to_db
save_setting_to_db(db_session, "workdir", "/v1", changed_by="admin") # old=None, new=/v1
first_entry = db_session.query(SettingsAuditLog).filter_by(key="workdir").first()
success = rollback_setting(db_session, "workdir", first_entry.id, changed_by="rollbacker")
assert success is True
# Setting should be removed from DB (fallback to ENV/default)
current = get_setting_from_db(db_session, "workdir")
assert current is None
def test_rollback_creates_new_audit_entry(self, db_session):
from app.utils.settings_service import rollback_setting, save_setting_to_db