"""Public ``config_changed``/``config_reset`` signal contract.""" import pytest from infrasynth.configs.registry import ConfigRegistry, ConfigType from infrasynth.configs.services import ConfigService from infrasynth.configs.signals import config_changed, config_reset @pytest.fixture(autouse=True) def clean_registry(clean_config_registry): yield @pytest.fixture def service(): return ConfigService() def _capture(signal): received = [] receiver = lambda **kwargs: received.append(kwargs) # noqa: E731 signal.connect(receiver, weak=False) return received, receiver class TestConfigChanged: def test_tenant_write_emits_with_all_kwargs(self, service, tenant): ConfigRegistry.register("k", type=ConfigType.STRING, default="default") received, receiver = _capture(config_changed) try: service.set("k", "new", tenant=tenant) finally: config_changed.disconnect(receiver) assert len(received) == 1 payload = received[0] assert payload["tenant_id"] == str(tenant.pk) assert payload["key"] == "k" assert payload["scope"] == "tenant" assert payload["new_value"] == "new" assert payload["old_value"] == "default" def test_secret_values_are_masked(self, service, tenant): ConfigRegistry.register("api.token", type=ConfigType.STRING, is_secret=True) received, receiver = _capture(config_changed) try: service.set("api.token", "hunter2", tenant=tenant) finally: config_changed.disconnect(receiver) payload = received[0] assert payload["new_value"] is None assert payload["old_value"] is None def test_global_write_has_global_scope(self, service, tenant): ConfigRegistry.register("k", default="default") received, receiver = _capture(config_changed) try: service.set_global("k", "global") finally: config_changed.disconnect(receiver) payload = received[0] assert payload["tenant_id"] is None assert payload["scope"] == "global" assert payload["new_value"] == "global" class TestConfigReset: def test_reset_emits_previous_value(self, service, tenant): ConfigRegistry.register("k", type=ConfigType.STRING, default="default") service.set("k", "override", tenant=tenant) received, receiver = _capture(config_reset) try: assert service.reset("k", tenant=tenant) is True finally: config_reset.disconnect(receiver) assert len(received) == 1 payload = received[0] assert payload["tenant_id"] == str(tenant.pk) assert payload["key"] == "k" assert payload["scope"] == "tenant" assert payload["previous_value"] == "override" def test_reset_without_override_does_not_emit(self, service, tenant): ConfigRegistry.register("k", default="default") received, receiver = _capture(config_reset) try: assert service.reset("k", tenant=tenant) is False finally: config_reset.disconnect(receiver) assert received == []