"""Unit tests for kb_mail.text.sanitize_surrogates."""
from __future__ import annotations

import json

from kb_mail.text import sanitize_surrogates


def test_none_stays_none():
    assert sanitize_surrogates(None) is None


def test_plain_ascii_unchanged():
    assert sanitize_surrogates("hello") == "hello"


def test_real_unicode_passes_through():
    assert sanitize_surrogates("Kąpała") == "Kąpała"


def test_lone_surrogate_degraded_and_json_safe():
    # A compat32 bytes-parse can leave a lone surrogate (undecodable byte);
    # postgres jsonb and json.dumps().encode('utf-8') both reject it.
    dirty = "Pr\udce9sent"  # 0xe9 smuggled in as a surrogate escape
    cleaned = sanitize_surrogates(dirty)
    assert cleaned == "Pr?sent"
    json.dumps(cleaned, ensure_ascii=False).encode("utf-8")  # must not raise


def test_replacement_char_preserved():
    # U+FFFD is already valid UTF-8 and must survive untouched.
    assert sanitize_surrogates("bad�id") == "bad�id"
