First commit with entire first rendition of the project
This commit is contained in:
106
tests/test_trigger.py
Normal file
106
tests/test_trigger.py
Normal file
@@ -0,0 +1,106 @@
|
||||
import json
|
||||
import os
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from spectra.trigger import (
|
||||
_trigger_path,
|
||||
cache_dir,
|
||||
clear_trigger,
|
||||
read_and_clear_trigger,
|
||||
read_trigger,
|
||||
write_trigger,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def isolate_cache(monkeypatch, tmp_path):
|
||||
cache = tmp_path / "cache"
|
||||
cache.mkdir()
|
||||
monkeypatch.setenv("SPECTRA_CACHE_DIR", str(cache))
|
||||
yield
|
||||
monkeypatch.delenv("SPECTRA_CACHE_DIR", raising=False)
|
||||
|
||||
|
||||
class TestWriteRead:
|
||||
def test_write_then_read(self):
|
||||
write_trigger({"action": "refresh"})
|
||||
data = read_trigger()
|
||||
assert data == {"action": "refresh"}
|
||||
|
||||
def test_read_empty(self):
|
||||
assert read_trigger() is None
|
||||
|
||||
def test_write_overwrites(self):
|
||||
write_trigger({"action": "refresh"})
|
||||
write_trigger({"action": "clear"})
|
||||
data = read_trigger()
|
||||
assert data == {"action": "clear"}
|
||||
|
||||
def test_write_complex_data(self):
|
||||
write_trigger({"action": "show_upload", "path": "/tmp/test.png", "image_id": 42})
|
||||
data = read_trigger()
|
||||
assert data["action"] == "show_upload"
|
||||
assert data["path"] == "/tmp/test.png"
|
||||
assert data["image_id"] == 42
|
||||
|
||||
|
||||
class TestClear:
|
||||
def test_clear_trigger(self):
|
||||
write_trigger({"action": "refresh"})
|
||||
clear_trigger()
|
||||
assert read_trigger() is None
|
||||
|
||||
def test_clear_missing_trigger(self):
|
||||
clear_trigger()
|
||||
|
||||
def test_clear_then_read(self):
|
||||
write_trigger({"action": "refresh"})
|
||||
clear_trigger()
|
||||
assert read_trigger() is None
|
||||
|
||||
|
||||
class TestReadAndClear:
|
||||
def test_read_and_clear_returns_data(self):
|
||||
write_trigger({"action": "refresh"})
|
||||
data = read_and_clear_trigger()
|
||||
assert data == {"action": "refresh"}
|
||||
|
||||
def test_read_and_clear_removes_file(self):
|
||||
write_trigger({"action": "refresh"})
|
||||
read_and_clear_trigger()
|
||||
assert read_trigger() is None
|
||||
|
||||
def test_read_and_clear_nonexistent(self):
|
||||
assert read_and_clear_trigger() is None
|
||||
|
||||
def test_read_and_clear_is_atomic(self):
|
||||
write_trigger({"action": "refresh"})
|
||||
data = read_and_clear_trigger()
|
||||
assert data == {"action": "refresh"}
|
||||
assert read_trigger() is None
|
||||
|
||||
|
||||
class TestCacheDir:
|
||||
def test_cache_dir_uses_env(self, monkeypatch):
|
||||
monkeypatch.setenv("SPECTRA_CACHE_DIR", "/tmp/spectra-test-cache")
|
||||
d = cache_dir()
|
||||
assert d == "/tmp/spectra-test-cache"
|
||||
|
||||
def test_trigger_path_uses_cache_dir(self):
|
||||
d = cache_dir()
|
||||
path = _trigger_path()
|
||||
assert path.startswith(d)
|
||||
assert path.endswith("trigger.json")
|
||||
|
||||
|
||||
class TestCorruptFile:
|
||||
def test_corrupt_json_returns_none(self):
|
||||
path = _trigger_path()
|
||||
os.makedirs(os.path.dirname(path), exist_ok=True)
|
||||
with open(path, "w") as f:
|
||||
f.write("{invalid json")
|
||||
assert read_trigger() is None
|
||||
assert read_and_clear_trigger() is None
|
||||
Reference in New Issue
Block a user