# -*- coding: utf-8 -*-
"""tests.regression.dispatch_gate.test_prompt_3901_blocked — §17.15 regression.

회장 verbatim: 3901 bytes prompt 는 HARD_BLOCK + 자동 path-only compact mode.
"""
from __future__ import annotations

import json
from pathlib import Path

from utils.prompt_byte_classifier import (
    HARD_BLOCK,
    classify_prompt_bytes,
    is_allowed,
    measure_utf8_bytes,
    requires_path_only_compact,
)


FIXTURE = (
    Path(__file__).parent.parent.parent / "fixtures" / "dispatch_gate" / "prompt_3901_block.json"
)


def test_3901_bytes_prompt_is_hard_blocked_chair_verbatim() -> None:
    fix = json.loads(FIXTURE.read_text())
    n = fix["input"]["prompt_byte_length"]
    assert n == 3901

    prompt = "x" * n
    assert measure_utf8_bytes(prompt) == 3901

    c = classify_prompt_bytes(prompt)
    assert c.verdict == HARD_BLOCK == fix["expected"]["verdict"]
    assert c.allowed is False == fix["expected"]["allowed"]
    assert c.hard_block is True == fix["expected"]["hard_block"]
    assert c.requires_compact_mode is True == fix["expected"]["requires_compact_mode"]

    assert is_allowed(prompt) is False
    assert requires_path_only_compact(prompt) is True
