Fix #12: roll back mutations when saving fails

This commit is contained in:
Philip Henning 2026-09-04 09:28:37 +02:00
parent 2c5a8d969c
commit d04ab6feaf
9 changed files with 677 additions and 184 deletions

View file

@ -556,6 +556,28 @@ class TestHostsManager:
assert not success
assert "No sudo permissions" in message
def test_save_mutation_failure_restores_hosts_file_and_history(self):
"""The manager owns rollback of model and undo/redo state."""
manager = HostsManager()
manager.edit_mode = True
hosts_file = HostsFile(
entries=[HostEntry("192.0.2.1", ["one.test"], is_active=True)]
)
manager.execute_toggle_command(hosts_file, 0)
manager.undo_last_operation(hosts_file)
state = manager.capture_mutation_state(hosts_file)
manager.execute_toggle_command(hosts_file, 0)
manager.save_hosts_file = Mock(return_value=(False, "Permission denied"))
success, message, restored_hosts_file = manager.save_mutation(hosts_file, state)
assert success is False
assert message == "Permission denied"
assert restored_hosts_file.entries[0].is_active is True
assert not manager.can_undo()
assert manager.can_redo()
@patch("subprocess.run")
def test_restore_backup_success(self, mock_run):
"""Test restoring backup successfully."""