2025-12-18 22:00:31 +01:00
# 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()
# -----------------------------------------------------
2025-12-19 14:29:52 +01:00
@patch ( "sn_basis.functions.settings_logic.get_variable" )
2025-12-18 22:00:31 +01:00
def test_load ( self , mock_get ):
2026-09-16 15:06:16 +02:00
"""Prüft, dass load() jede bekannte Projektvariable genau einmal über get_variable() liest."""
2025-12-18 22:00:31 +01:00
# 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
# -----------------------------------------------------
2025-12-19 14:29:52 +01:00
@patch ( "sn_basis.functions.settings_logic.set_variable" )
2025-12-18 22:00:31 +01:00
def test_save ( self , mock_set ):
2026-09-16 15:06:16 +02:00
"""Prüft, dass save() nur bekannte Variablen-Keys speichert und unbekannte Keys ignoriert."""
2025-12-18 22:00:31 +01:00
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 )
2026-04-20 15:36:38 +02:00
@patch ( "sn_basis.functions.settings_logic.get_variable" )
def test_load_handles_partial_values_with_empty_fallback ( self , mock_get ):
2026-09-17 14:59:50 +02:00
"""Prüft, dass load() für jede Variable den (auch leeren) Wert von get_variable() unverändert übernimmt, selbst wenn nicht alle Variablen im Mock konfiguriert sind."""
2026-04-20 15:36:38 +02:00
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 ):
2026-09-16 15:06:16 +02:00
"""Prüft, dass save() einen leeren String als gültigen Wert speichert, statt ihn wie einen fehlenden Key zu behandeln."""
2026-04-20 15:36:38 +02:00
logic = SettingsLogic ()
logic . save ({ "amt" : "" , "behoerde" : "B2" })
mock_set . assert_any_call ( "amt" , "" , scope = "project" )
mock_set . assert_any_call ( "behoerde" , "B2" , scope = "project" )
2025-12-18 22:00:31 +01:00
if __name__ == "__main__" :
unittest . main ()