"""anu_v2.tests.test_owner_trigger_redaction_case_insensitive_2568plus3.

Phase B PR #117 fresh Gemini finding (review id 4280385248, 2026-05-13 09:51:37Z)
case-sensitivity 회귀 박제:
  - owner_trigger_only.py:228 (str path)
  - owner_trigger_only.py:259 (fallback non-standard object path)
"""

from __future__ import annotations

import sys
from pathlib import Path

import pytest

WORKSPACE_ROOT = Path(__file__).resolve().parents[2]
if str(WORKSPACE_ROOT) not in sys.path:
    sys.path.insert(0, str(WORKSPACE_ROOT))

from anu_v2.owner_trigger_only import _redact_diagnostics, _REDACTED_PLACEHOLDER  # noqa: E402


class _FakeObj:
    def __init__(self, payload: str) -> None:
        self._payload = payload

    def __str__(self) -> str:
        return self._payload


# ─── str path × case variants ──────────────────────────────────

@pytest.mark.parametrize("payload", [
    "bearer XYZTOKEN",
    "Bearer XYZTOKEN",
    "BEARER XYZTOKEN",
    "bEaReR XYZTOKEN",
])
def test_str_path_bearer_case_variants_all_redacted(payload):
    assert _redact_diagnostics(payload) == _REDACTED_PLACEHOLDER


@pytest.mark.parametrize("payload", [
    "ghp_abcDEF",
    "GHP_abcDEF",
    "GhP_abcDEF",
])
def test_str_path_ghp_prefix_case_variants_all_redacted(payload):
    assert _redact_diagnostics(payload) == _REDACTED_PLACEHOLDER


def test_str_path_safe_text_preserved():
    assert _redact_diagnostics("safe text no token") == "safe text no token"


# ─── fallback path (non-standard object) × case variants ──────

@pytest.mark.parametrize("payload", [
    "bearer XYZ",
    "BEARER XYZ",
    "GhP_abc",
])
def test_fallback_path_case_variants_all_redacted(payload):
    obj = _FakeObj(payload)
    assert _redact_diagnostics(obj) == _REDACTED_PLACEHOLDER


def test_fallback_path_safe_text_preserved():
    obj = _FakeObj("ordinary diagnostic payload")
    assert _redact_diagnostics(obj) == "ordinary diagnostic payload"


# ─── recursive dict / list cover ──────────────────────────────

def test_dict_value_case_variant_redacted():
    out = _redact_diagnostics({"foo": "bearer xyz"})
    assert out == {"foo": _REDACTED_PLACEHOLDER}


def test_list_with_dict_case_variant_redacted():
    out = _redact_diagnostics([{"k": "BEARER abc"}, "plain"])
    assert out == [{"k": _REDACTED_PLACEHOLDER}, "plain"]
