import unittest from unittest.mock import patch from sn_basis.functions import verfahrensgebiet_manager class _Scope: def __init__(self, value: str): self._value = value def variable(self, _name: str) -> str: return self._value class TestVerfahrensgebietManager(unittest.TestCase): @patch("sn_basis.functions.verfahrensgebiet_manager.get_variable", return_value="layer_123") def test_get_verfahrensgebiet_layer_id_returns_value(self, _mock_get_variable): result = verfahrensgebiet_manager.get_verfahrensgebiet_layer_id() self.assertEqual(result, "layer_123") @patch("sn_basis.functions.verfahrensgebiet_manager.get_variable", return_value="") def test_get_verfahrensgebiet_layer_id_returns_none_for_empty_value(self, _mock_get_variable): result = verfahrensgebiet_manager.get_verfahrensgebiet_layer_id() self.assertIsNone(result) @patch("sn_basis.functions.verfahrensgebiet_manager.set_variable") def test_set_verfahrensgebiet_layer_id_writes_project_variable(self, mock_set_variable): verfahrensgebiet_manager.set_verfahrensgebiet_layer_id("layer_abc") mock_set_variable.assert_called_once_with("verfahrensgebiet_layer", "layer_abc", scope="project") @patch("sn_basis.functions.verfahrensgebiet_manager._find_verfahrensgebiet_layer") @patch("sn_basis.functions.variable_wrapper.QgsProject.instance") @patch("sn_basis.functions.variable_wrapper.QgsExpressionContextUtils.setProjectVariable") @patch("sn_basis.functions.variable_wrapper.QgsExpressionContextUtils.projectScope") def test_update_without_layer_does_not_write_when_already_empty( self, mock_project_scope, mock_set_project_variable, mock_project_instance, mock_find_layer, ): mock_find_layer.return_value = (None, None) mock_project_instance.return_value = object() mock_project_scope.return_value = _Scope("") result = verfahrensgebiet_manager._update_verfahrensgebiet_from_project() self.assertFalse(result) mock_set_project_variable.assert_not_called() @patch("sn_basis.functions.verfahrensgebiet_manager._find_verfahrensgebiet_layer") @patch("sn_basis.functions.verfahrensgebiet_manager.set_variable") def test_update_with_layer_writes_variable(self, mock_set_variable, mock_find_layer): mock_layer = object() mock_find_layer.return_value = (mock_layer, "layer_99") result = verfahrensgebiet_manager._update_verfahrensgebiet_from_project() self.assertTrue(result) mock_set_variable.assert_called_once_with("verfahrensgebiet_layer", "layer_99", scope="project") if __name__ == "__main__": unittest.main()