import os import sys sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) from idea70_narrativeweave_real_time.adapters import build_block_from_events, news_adapter_event, transcript_adapter_event from idea70_narrativeweave_real_time.narrative import diff_narrative_blocks, render_narrative_block def test_redacted_rendering_keeps_structure(): events = [ {"ts": "2024-01-01T00:00:00Z", "type": "news", "payload": news_adapter_event("Shares rise", "https://example.com/story", 0.7)}, {"ts": "2024-01-01T00:00:01Z", "type": "transcript", "payload": transcript_adapter_event("CFO", "Revenue improved year over year.", "2024-01-01T00:00:01Z")}, ] block = build_block_from_events(events) clear = render_narrative_block(block) redacted = render_narrative_block(block, redacted=True) assert block.id in clear assert "[redacted]" in redacted assert "https://example.com/story" not in redacted assert "## Claims" in redacted def test_diff_is_deterministic_and_claim_aware(): left_events = [ {"ts": "2024-01-01T00:00:00Z", "type": "news", "payload": news_adapter_event("Shares rise", "https://example.com/story", 0.7)}, ] right_events = [ {"ts": "2024-01-01T00:00:00Z", "type": "news", "payload": news_adapter_event("Shares fall", "https://example.com/story", 0.7)}, {"ts": "2024-01-01T00:00:02Z", "type": "transcript", "payload": transcript_adapter_event("CFO", "Margins compressed.", "2024-01-01T00:00:02Z")}, ] left = build_block_from_events(left_events) right = build_block_from_events(right_events) diff = diff_narrative_blocks(left, right) assert diff.left_block_id == left.id assert diff.right_block_id == right.id assert diff.changed_fields assert diff.added_claims or diff.modified_claims