You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.4 KiB
Python

"""Replay test: running pipeline twice produces no duplicate rows."""
import pytest
@pytest.mark.replay
def test_parser_idempotency():
"""Running parser twice on same text → identical output dict."""
from libs.parser.rule_parser import RuleBasedParser
text = """
Item 2.02 Results of Operations
Revenue guidance raised. Demand remains strong. Margin expansion.
Customer additions accelerating. Adjusted EPS excludes non-GAAP items.
"""
p = RuleBasedParser()
metadata = {"filing_date": "2026-01-29"}
out1 = p.parse("DOC::idem::test", "8-K", text, metadata).model_dump()
out2 = p.parse("DOC::idem::test", "8-K", text, metadata).model_dump()
assert out1 == out2
@pytest.mark.replay
def test_checksum_idempotency(tmp_path, monkeypatch):
"""Writing same exhibit twice: file content unchanged, checksum stable."""
from libs.common import config
config.get_settings.cache_clear()
monkeypatch.setenv("DATA_ROOT", str(tmp_path))
from libs.common.file_store import get_checksum, write_exhibit
content = "Idempotency test content"
c1 = write_exhibit("IDEM001", "EX-99.1", content)
# Second write to same path should overwrite (atomic)
c2 = write_exhibit("IDEM001", "EX-99.1", content)
assert c1 == c2
stored = get_checksum("IDEM001", "EX-99.1")
assert stored == c1
config.get_settings.cache_clear()