"""Rendering review uses synthetic notes and never accepts private corpus fidelity."""
import hashlib
import json
import os
import subprocess
import sys
from pathlib import Path
from coulomb_social.apps.spaces.content import render_markdown
from coulomb_social.apps.spaces.rendering_audit import audit_body, review_card
def test_audit_uses_product_renderer_and_reports_custom_tags_attributes_and_schemes():
body = ('# Synthetic\n\n
Text\n'
'
'
'Unsafe')
audit, rendered = audit_body(body)
assert rendered == render_markdown(body)
assert audit["sanitization_changed_html"]
assert audit["markup_changed_by_sanitization"]
assert not audit["serialization_only_change"]
assert audit["removed_tag_counts"] == {"topic": 1}
assert {a["attribute"] for a in audit["removed_attributes"]} == {"onerror", "href"}
assert "assets/picture.png" in rendered and "
" in rendered
assert audit["body_sha256"] == hashlib.sha256(body.encode()).hexdigest()
assert not audit["original_bubble_render_compared"]
assert not audit["productive_fidelity_accepted"]
assert audit["reference_occurrences_before"] == 2
assert audit["reference_occurrences_after"] == 1
assert not audit["reference_attributes_preserved"]
assert audit["removed_reference_occurrences"] == 1
def test_link_entities_duplicates_and_relative_assets_preserve_exact_reference_attributes():
body = ('[first](https://example.invalid/?a=1&b=2#part)\n\n'
'[second](https://example.invalid/?a=1&b=2#part)\n\n'
'third'
'
')
audit, _ = audit_body(body)
assert audit['reference_occurrences_before'] == 4
assert audit['reference_occurrences_after'] == 4
assert audit['reference_attributes_preserved']
assert audit['removed_reference_occurrences'] == 0
assert audit['added_reference_occurrences'] == 0
def test_serialized_line_break_difference_is_not_reported_as_lost_markup():
audit, _ = audit_body("First
Second")
assert audit["serialization_only_change"]
assert not audit["markup_changed_by_sanitization"]
assert not audit["visible_text_changed_by_sanitization"]
def test_continued_numbered_lists_keep_their_starts_through_sanitization():
body = "2. Second item\n3. Third item\n\nSeparate paragraph.\n\n8. Eighth item"
audit, rendered = audit_body(body)
assert '