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
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()
|