| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- from __future__ import annotations
- import json
- import pytest
- from tests import snapshot
- @pytest.fixture
- def snap_dir(tmp_path, monkeypatch):
- target = tmp_path / "snapshots"
- monkeypatch.setattr(snapshot, "SNAPSHOT_DIR", target)
- return target
- def test_missing_snapshot_fails_without_update(snap_dir, monkeypatch):
- monkeypatch.delenv("UPDATE_SNAPSHOTS", raising=False)
- with pytest.raises(AssertionError, match="snapshot missing"):
- snapshot.assert_matches("case/x", {"a": 1})
- def test_create_then_match(snap_dir, monkeypatch):
- monkeypatch.setenv("UPDATE_SNAPSHOTS", "1")
- snapshot.assert_matches("case/x", {"a": 1, "b": 2})
- assert (snap_dir / "case" / "x.json").exists()
- # Second run without update must compare-pass.
- monkeypatch.delenv("UPDATE_SNAPSHOTS", raising=False)
- snapshot.assert_matches("case/x", {"b": 2, "a": 1}) # key order irrelevant
- def test_mismatch_fails(snap_dir, monkeypatch):
- monkeypatch.setenv("UPDATE_SNAPSHOTS", "1")
- snapshot.assert_matches("case/y", {"a": 1})
- monkeypatch.delenv("UPDATE_SNAPSHOTS", raising=False)
- with pytest.raises(AssertionError, match="snapshot mismatch"):
- snapshot.assert_matches("case/y", {"a": 2})
- def test_subset_keys_ignore_volatile(snap_dir, monkeypatch):
- monkeypatch.setenv("UPDATE_SNAPSHOTS", "1")
- snapshot.assert_matches(
- "case/z", {"rejected": 4, "run_id": "v1_run_aaa"}, subset_keys=["rejected"]
- )
- data = json.loads((snap_dir / "case" / "z.json").read_text())
- assert data == {"rejected": 4}
- # Volatile run_id changes but snapshot still matches (not in subset).
- monkeypatch.delenv("UPDATE_SNAPSHOTS", raising=False)
- snapshot.assert_matches(
- "case/z", {"rejected": 4, "run_id": "v1_run_bbb"}, subset_keys=["rejected"]
- )
- def test_update_overwrites_mismatch(snap_dir, monkeypatch):
- monkeypatch.setenv("UPDATE_SNAPSHOTS", "1")
- snapshot.assert_matches("case/w", {"a": 1})
- snapshot.assert_matches("case/w", {"a": 99}) # regenerate
- monkeypatch.delenv("UPDATE_SNAPSHOTS", raising=False)
- snapshot.assert_matches("case/w", {"a": 99})
|