"""Tests for `app.rag.pipeline_version` (Task 8, Step 1). Two things must be provably true before any dedup mechanism gets built on top of this registry: 1. `rag-naive-v1` is frozen -- exactly `dedup_enabled=False`, `overfetch_factor=1` -- forever. If someone edits the registry entry by accident while working on `rag-dedup-v2`, this test catches it. 2. The unspecified/default path (`get_pipeline_version(None)`) resolves to that exact frozen v1 behavior, so every ordinary product call site that never passes a pipeline version is provably unaffected by anything registered here. An unknown, explicitly-requested version name is a hard error, never a silent fallback to v1 -- see `UnknownPipelineVersionError`. """ from __future__ import annotations import pytest from app.rag.pipeline_version import ( DEFAULT_PIPELINE_VERSION, PipelineVersion, UnknownPipelineVersionError, get_pipeline_version, registered_versions, ) def test_naive_v1_is_registered_and_frozen(): pv = get_pipeline_version("rag-naive-v1") assert pv == PipelineVersion( name="rag-naive-v1", dedup_enabled=False, overfetch_factor=1 ) def test_dedup_v2_is_registered_with_overfetch_and_dedup_enabled(): pv = get_pipeline_version("rag-dedup-v2") assert pv.dedup_enabled is True assert pv.overfetch_factor > 1 def test_default_none_resolves_to_naive_v1_exactly(): default_pv = get_pipeline_version(None) explicit_v1 = get_pipeline_version("rag-naive-v1") assert default_pv == explicit_v1 assert default_pv.name == DEFAULT_PIPELINE_VERSION assert default_pv.dedup_enabled is False assert default_pv.overfetch_factor == 1 def test_unknown_explicit_version_raises(): with pytest.raises(UnknownPipelineVersionError): get_pipeline_version("rag-reranked-v3-does-not-exist") def test_unknown_version_error_message_lists_registered_versions(): with pytest.raises(UnknownPipelineVersionError) as exc_info: get_pipeline_version("not-a-real-version") message = str(exc_info.value) assert "rag-naive-v1" in message assert "rag-dedup-v2" in message def test_registered_versions_contains_both_known_versions(): versions = registered_versions() assert "rag-naive-v1" in versions assert "rag-dedup-v2" in versions