|
1 | 1 | from unittest.mock import Mock |
2 | 2 |
|
3 | 3 | from openfeature.exception import GeneralError |
| 4 | +from openfeature.provider import ProviderStatus |
4 | 5 | from openfeature.provider._registry import ProviderRegistry |
5 | 6 | from openfeature.provider.no_op_provider import NoOpProvider |
6 | 7 |
|
@@ -172,3 +173,69 @@ def test_replacing_default_provider_used_as_domain_does_not_shutdown(): |
172 | 173 |
|
173 | 174 | provider1.shutdown.assert_not_called() |
174 | 175 | provider2.shutdown.assert_not_called() |
| 176 | + |
| 177 | + |
| 178 | +def test_shutting_down_registry_shuts_down_providers_once(): |
| 179 | + """Test that shutting down the registry shuts down each provider only once.""" |
| 180 | + |
| 181 | + registry = ProviderRegistry() |
| 182 | + provider1 = Mock() |
| 183 | + provider2 = Mock() |
| 184 | + |
| 185 | + registry.set_default_provider(provider1) |
| 186 | + registry.set_provider("domain1", provider1) |
| 187 | + |
| 188 | + registry.set_provider("domain2a", provider2) |
| 189 | + registry.set_provider("domain2b", provider2) |
| 190 | + |
| 191 | + registry.shutdown() |
| 192 | + |
| 193 | + provider1.shutdown.assert_called_once() |
| 194 | + provider2.shutdown.assert_called_once() |
| 195 | + |
| 196 | + |
| 197 | +def test_initializing_provider_sets_status_ready(): |
| 198 | + """Test that initializing a provider sets its status to READY.""" |
| 199 | + |
| 200 | + registry = ProviderRegistry() |
| 201 | + provider = Mock() |
| 202 | + |
| 203 | + assert registry.get_provider_status(provider) == ProviderStatus.NOT_READY |
| 204 | + |
| 205 | + registry.set_provider("domain", provider) |
| 206 | + |
| 207 | + provider.initialize.assert_called_once() |
| 208 | + assert registry.get_provider_status(provider) == ProviderStatus.READY |
| 209 | + |
| 210 | + |
| 211 | +def test_shutting_down_provider_sets_status_not_ready(): |
| 212 | + """Test that shutting down a provider sets its status to NOT_READY.""" |
| 213 | + |
| 214 | + registry = ProviderRegistry() |
| 215 | + provider = Mock() |
| 216 | + |
| 217 | + registry.set_provider("domain", provider) |
| 218 | + assert registry.get_provider_status(provider) == ProviderStatus.READY |
| 219 | + |
| 220 | + registry.shutdown() |
| 221 | + assert registry.get_provider_status(provider) == ProviderStatus.NOT_READY |
| 222 | + |
| 223 | + |
| 224 | +def test_clearing_registry_resets_providers_and_default(): |
| 225 | + """Test that clearing the registry resets all providers and the default provider.""" |
| 226 | + |
| 227 | + registry = ProviderRegistry() |
| 228 | + provider = Mock() |
| 229 | + |
| 230 | + registry.set_provider("domain", provider) |
| 231 | + registry.set_default_provider(provider) |
| 232 | + |
| 233 | + registry.clear_providers() |
| 234 | + |
| 235 | + default_provider = registry.get_default_provider() |
| 236 | + assert isinstance(default_provider, NoOpProvider) |
| 237 | + assert registry.get_provider("domain") is default_provider |
| 238 | + assert registry.get_provider_status(default_provider) == ProviderStatus.READY |
| 239 | + |
| 240 | + provider.initialize.assert_called_once() |
| 241 | + provider.shutdown.assert_called_once() |
0 commit comments