# sn_basis/test/test_settings_logic.py import unittest from unittest.mock import patch from sn_basis.functions.settings_logic import SettingsLogic class TestSettingsLogic(unittest.TestCase): # ----------------------------------------------------- # Test: load() liest alle Variablen über get_variable() # ----------------------------------------------------- @patch("sn_basis.functions.settings_logic.get_variable") def test_load(self, mock_get): # Mock-Rückgabe für jede Variable mock_get.side_effect = lambda key, scope="project": f"wert_{key}" logic = SettingsLogic() daten = logic.load() # Alle Variablen müssen enthalten sein for key in SettingsLogic.VARIABLEN: self.assertIn(key, daten) self.assertEqual(daten[key], f"wert_{key}") # get_variable muss für jede Variable genau einmal aufgerufen werden self.assertEqual(mock_get.call_count, len(SettingsLogic.VARIABLEN)) # ----------------------------------------------------- # Test: save() ruft set_variable() nur für bekannte Keys auf # ----------------------------------------------------- @patch("sn_basis.functions.settings_logic.set_variable") def test_save(self, mock_set): logic = SettingsLogic() # Eingabedaten enthalten gültige und ungültige Keys daten = { "amt": "A1", "behoerde": "B1", "unbekannt": "IGNORIEREN", "gemeinden": "G1", } logic.save(daten) # set_variable muss nur für gültige Keys aufgerufen werden expected_calls = 3 # amt, behoerde, gemeinden self.assertEqual(mock_set.call_count, expected_calls) # Prüfen, ob die richtigen Keys gespeichert wurden saved_keys = [call.args[0] for call in mock_set.call_args_list] self.assertIn("amt", saved_keys) self.assertIn("behoerde", saved_keys) self.assertIn("gemeinden", saved_keys) self.assertNotIn("unbekannt", saved_keys) @patch("sn_basis.functions.settings_logic.get_variable") def test_load_handles_partial_values_with_empty_fallback(self, mock_get): values = { "amt": "A1", "behoerde": "", "landkreis_user": "L1", } mock_get.side_effect = lambda key, scope="project": values.get(key, "") logic = SettingsLogic() daten = logic.load() self.assertEqual(daten["amt"], "A1") self.assertEqual(daten["behoerde"], "") self.assertEqual(daten["landkreis_user"], "L1") self.assertEqual(daten["sachgebiet"], "") @patch("sn_basis.functions.settings_logic.set_variable") def test_save_empty_string_value_is_persisted(self, mock_set): logic = SettingsLogic() logic.save({"amt": "", "behoerde": "B2"}) mock_set.assert_any_call("amt", "", scope="project") mock_set.assert_any_call("behoerde", "B2", scope="project") if __name__ == "__main__": unittest.main()