| | |
| | """ |
| | Testes para o IntelligentCache (cache.py). |
| | """ |
| |
|
| | import pytest |
| | import time |
| | from unittest.mock import patch |
| |
|
| | from superezio_enterprise.cache import IntelligentCache |
| | from superezio_enterprise.config import EnterpriseConfig |
| |
|
| | @pytest.fixture |
| | def mock_config(): |
| | """Fornece uma configuração mockada para isolar os testes do cache.""" |
| | return EnterpriseConfig( |
| | cache_max_items=3, |
| | cache_ttl_seconds=10, |
| | caching_enabled=True |
| | ) |
| |
|
| | @pytest.fixture |
| | def cache_instance(mock_config): |
| | """Fornece uma instância limpa do IntelligentCache para cada teste.""" |
| | |
| | |
| | with patch('superezio_enterprise.cache.CONFIG', mock_config): |
| | instance = IntelligentCache() |
| | instance.max_size = mock_config.cache_max_items |
| | instance.default_ttl = mock_config.cache_ttl_seconds |
| | instance.clear() |
| | yield instance |
| | instance.clear() |
| |
|
| | def test_cache_singleton(cache_instance): |
| | """Testa se o IntelligentCache segue o padrão singleton.""" |
| | instance1 = cache_instance |
| | instance2 = IntelligentCache() |
| | assert instance1 is instance2 |
| |
|
| | def test_set_and_get(cache_instance): |
| | """Testa a funcionalidade básica de adicionar e recuperar um item.""" |
| | cache_instance.set("key1", "value1") |
| | assert cache_instance.get("key1") == "value1" |
| |
|
| | def test_get_nonexistent_key(cache_instance): |
| | """Testa a recuperação de uma chave que não existe.""" |
| | assert cache_instance.get("nonexistent") is None |
| |
|
| | def test_cache_expiration(cache_instance): |
| | """Testa se um item do cache expira após o seu TTL.""" |
| | cache_instance.set("key_exp", "value_exp", ttl=0.02) |
| | time.sleep(0.05) |
| | assert cache_instance.get("key_exp") is None |
| |
|
| | def test_lru_eviction(cache_instance): |
| | """Testa se a política de evicção LRU remove o item menos usado.""" |
| | cache_instance.set("key1", "value1") |
| | time.sleep(0.01) |
| | cache_instance.set("key2", "value2") |
| | time.sleep(0.01) |
| | cache_instance.set("key3", "value3") |
| |
|
| | |
| | cache_instance.get("key1") |
| | time.sleep(0.01) |
| |
|
| | |
| | cache_instance.set("key4", "value4") |
| |
|
| | assert cache_instance.get("key1") == "value1" |
| | assert cache_instance.get("key2") is None |
| | assert cache_instance.get("key3") is not None |
| | assert cache_instance.get("key4") is not None |
| |
|
| | def test_clear_cache(cache_instance): |
| | """Testa se o método clear remove todos os itens.""" |
| | cache_instance.set("key1", "value1") |
| | cache_instance.set("key2", "value2") |
| | cache_instance.clear() |
| | assert cache_instance.get("key1") is None |
| | assert cache_instance.get("key2") is None |
| | assert len(cache_instance._cache) == 0 |
| | assert len(cache_instance._access_times) == 0 |
| |
|
| | def test_cache_disabled(mock_config): |
| | """Testa se as operações do cache são ignoradas quando ele está desabilitado.""" |
| | mock_config.caching_enabled = False |
| | with patch('superezio_enterprise.cache.CONFIG', mock_config): |
| | cache_instance = IntelligentCache() |
| | cache_instance.clear() |
| |
|
| | cache_instance.set("key1", "value1") |
| | assert cache_instance.get("key1") is None |
| | assert len(cache_instance._cache) == 0 |
| |
|
| | cache_instance.clear() |
| |
|