test: clarify known limitations in the only xfail case
This commit is contained in:
@@ -49,6 +49,7 @@ def _fetch_and_assert(
|
|||||||
assert result is None
|
assert result is None
|
||||||
else:
|
else:
|
||||||
assert result is not None
|
assert result is not None
|
||||||
|
assert result.status == "SUCCESS_SYNCED"
|
||||||
assert result.lyrics is not None
|
assert result.lyrics is not None
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+27
-8
@@ -213,22 +213,41 @@ def test_cache_trusted_synced_no_fetch(tmp_path):
|
|||||||
@pytest.mark.xfail(
|
@pytest.mark.xfail(
|
||||||
strict=True,
|
strict=True,
|
||||||
reason=(
|
reason=(
|
||||||
"Known limitation: cached unsynced currently blocks live fetch, "
|
"Known limitation: cache stores only one positive slot; after an allow_unsynced=True "
|
||||||
"so allow_unsynced=False may return None instead of fresh synced"
|
"request caches unsynced, later allow_unsynced=False request does not re-fetch synced"
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
def test_xfail_cached_unsynced_should_not_block_live_synced_when_unsynced_disallowed(
|
def test_xfail_cached_unsynced_should_not_block_live_synced_when_unsynced_disallowed(
|
||||||
tmp_path,
|
tmp_path,
|
||||||
):
|
):
|
||||||
"""Known gap: cached unsynced prevents re-fetch, so this expected behavior is xfailed."""
|
"""Known gap reproduced with strategy switch across two requests.
|
||||||
fetcher = MockFetcher("src", _fr(synced=_synced("src", confidence=90.0)))
|
|
||||||
|
1) Fetcher returns both synced and unsynced.
|
||||||
|
2) allow_unsynced=True picks/caches higher-confidence unsynced.
|
||||||
|
3) allow_unsynced=False should re-fetch synced, but currently short-circuits on cache.
|
||||||
|
"""
|
||||||
|
fetcher = MockFetcher(
|
||||||
|
"src",
|
||||||
|
_fr(
|
||||||
|
synced=_synced("src", confidence=85.0),
|
||||||
|
unsynced=_unsynced("src", confidence=95.0),
|
||||||
|
),
|
||||||
|
)
|
||||||
manager = make_manager(tmp_path)
|
manager = make_manager(tmp_path)
|
||||||
track = _track()
|
track = _track()
|
||||||
manager.cache.set(track, "src", _unsynced("src", confidence=85.0), ttl_seconds=3600)
|
|
||||||
|
|
||||||
|
# First request: permissive strategy, unsynced wins and is cached.
|
||||||
with patch("lrx_cli.core.build_plan", return_value=[[fetcher]]):
|
with patch("lrx_cli.core.build_plan", return_value=[[fetcher]]):
|
||||||
result = manager.fetch_for_track(track, allow_unsynced=False)
|
first = manager.fetch_for_track(track, allow_unsynced=True)
|
||||||
|
assert first is not None
|
||||||
|
assert first.status == CacheStatus.SUCCESS_UNSYNCED
|
||||||
|
|
||||||
|
fetcher.called = False
|
||||||
|
|
||||||
|
# Second request: stricter strategy should recover synced via re-fetch.
|
||||||
|
with patch("lrx_cli.core.build_plan", return_value=[[fetcher]]):
|
||||||
|
second = manager.fetch_for_track(track, allow_unsynced=False)
|
||||||
|
|
||||||
assert fetcher.called
|
assert fetcher.called
|
||||||
assert result is not None
|
assert second is not None
|
||||||
assert result.status == CacheStatus.SUCCESS_SYNCED
|
assert second.status == CacheStatus.SUCCESS_SYNCED
|
||||||
|
|||||||
Reference in New Issue
Block a user