Initial commit: ULPgrammer
- Core Telegram monitoring pipeline (scraper, processor, notifier, downloaders) - Textual TUI frontend with thread-safe event bus - SQLite persistence, severity scoring, dedup cache - Fixed ULP parser: handles https:// truncation, port+path URLs, semicolon separator - Test suite: 88 tests across scorer, cache, database, processor
This commit is contained in:
55
tests/test_cache.py
Normal file
55
tests/test_cache.py
Normal file
@@ -0,0 +1,55 @@
|
||||
"""
|
||||
Tests for utils/cache.py — file-ID deduplication cache.
|
||||
|
||||
Each test gets an isolated cache file via the `isolated_cache` fixture
|
||||
so tests never touch data/cache.json.
|
||||
"""
|
||||
|
||||
import pytest
|
||||
import utils.cache as cache_module
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def isolated_cache(tmp_path, monkeypatch):
|
||||
monkeypatch.setattr(cache_module, "CACHE_FILE", tmp_path / "cache.json")
|
||||
|
||||
|
||||
def test_unseen_id_returns_false():
|
||||
assert cache_module.is_seen(12345) is False
|
||||
|
||||
|
||||
def test_mark_seen_makes_id_seen():
|
||||
cache_module.mark_seen(12345)
|
||||
assert cache_module.is_seen(12345) is True
|
||||
|
||||
|
||||
def test_multiple_ids_stored_independently():
|
||||
cache_module.mark_seen(1)
|
||||
cache_module.mark_seen(2)
|
||||
cache_module.mark_seen(3)
|
||||
assert cache_module.is_seen(1)
|
||||
assert cache_module.is_seen(2)
|
||||
assert cache_module.is_seen(3)
|
||||
assert not cache_module.is_seen(4)
|
||||
|
||||
|
||||
def test_persists_to_disk_between_calls():
|
||||
"""
|
||||
is_seen() and mark_seen() each load from disk independently.
|
||||
This verifies the persist-on-write / load-on-read contract
|
||||
(simulating what happens across separate function calls in the bot loop).
|
||||
"""
|
||||
cache_module.mark_seen(999)
|
||||
assert cache_module.is_seen(999) is True
|
||||
|
||||
|
||||
def test_missing_cache_file_handled_gracefully(tmp_path, monkeypatch):
|
||||
monkeypatch.setattr(cache_module, "CACHE_FILE", tmp_path / "nonexistent.json")
|
||||
assert cache_module.is_seen(42) is False
|
||||
|
||||
|
||||
def test_mark_seen_is_idempotent():
|
||||
cache_module.mark_seen(7)
|
||||
cache_module.mark_seen(7)
|
||||
cache_module.mark_seen(7)
|
||||
assert cache_module.is_seen(7) is True
|
||||
Reference in New Issue
Block a user