Files
FabledGrimoire/tests/test_gate_settings.py
T
bvandeusenandClaude Opus 5.5 79de8938b9 docs(6209): forty test files — design cascade and stylesheet, embeddings, family canon, forge, backup round trips, inception, placement, platforms, moments, rule move and verification, search scope, facets
Module and test docstrings state what is pinned without the record number
or step that introduced it. Incident accounts become the failure shape in
the present tense: the pipefail head, the code_shapes import, the export
order, the facet dialects, the cross-kind repeat, the write-once kind.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 21:40:25 -04:00

79 lines
2.5 KiB
Python

"""The create gate's similarity bars are settings, clamped and fail-open."""
from unittest.mock import AsyncMock, patch
import pytest
from scribe.services.dedup import (
_GATE_MIN_BLOCK,
_GATE_MIN_OVERLAP,
GATE_DEFAULT_THRESHOLDS,
_gate_setting,
)
# Bound at import, before the autouse stub in conftest replaces the module
# attribute — so these tests exercise the real read.
_real_gate_setting = _gate_setting
def _setting(value):
return patch("scribe.services.settings.get_setting", AsyncMock(return_value=value))
@pytest.mark.asyncio
async def test_a_set_value_is_used():
with _setting("0.95"):
assert await _real_gate_setting(7, "note_copy", _GATE_MIN_BLOCK) == 0.95
@pytest.mark.asyncio
async def test_a_block_bar_cannot_be_set_low_enough_to_refuse_everything():
with _setting("0.1"):
assert await _real_gate_setting(7, "general", _GATE_MIN_BLOCK) == _GATE_MIN_BLOCK
@pytest.mark.asyncio
async def test_the_overlap_floor_has_its_own_lower_clamp():
with _setting("0.1"):
assert await _real_gate_setting(7, "note_overlap", _GATE_MIN_OVERLAP) == _GATE_MIN_OVERLAP
@pytest.mark.asyncio
async def test_an_unparseable_value_falls_back_to_the_default():
with _setting("lots"):
got = await _real_gate_setting(7, "snippet", _GATE_MIN_BLOCK)
assert got == GATE_DEFAULT_THRESHOLDS["snippet"]
@pytest.mark.asyncio
async def test_an_unreadable_setting_falls_back_to_the_default():
with patch("scribe.services.settings.get_setting",
AsyncMock(side_effect=RuntimeError("db down"))):
got = await _real_gate_setting(7, "lesson", _GATE_MIN_BLOCK)
assert got == GATE_DEFAULT_THRESHOLDS["lesson"]
@pytest.mark.asyncio
async def test_the_overlap_floor_never_sits_above_the_block_bar():
from scribe.services.dedup import gate_bars
async def _set(user_id, key, lo):
return {"note_copy": 0.85, "note_overlap": 0.90}[key]
with patch("scribe.services.dedup._gate_setting", AsyncMock(side_effect=_set)):
assert await gate_bars(7, "note") == (0.85, 0.85)
@pytest.mark.asyncio
async def test_a_kind_outside_the_copy_band_reads_no_overlap_floor():
from scribe.services.dedup import gate_bars
seen = []
async def _set(user_id, key, lo):
seen.append(key)
return GATE_DEFAULT_THRESHOLDS[key]
with patch("scribe.services.dedup._gate_setting", AsyncMock(side_effect=_set)):
assert await gate_bars(7, "process") == (0.90, 0.90)
assert seen == ["general"]