"""The renderer catalog must not advertise what the viewer cannot do. A ``Renderer.capabilities`` entry is served to the browser and read by a person as a statement about what they can do with a scientific artifact. Three of them were fiction: the table renderer declared ``sort`` and ``filter`` while the viewer draws one static capped table, and ``compare_versions`` was declared on five renderers while no version-comparison UI exists at all. The same overclaim listed ``.parquet``/``.arrow`` as viewable tables with no parser for either, so the descriptor promised a table and the fetch then fell through to a download card once the bytes turned out to be binary. These assertions are the enforcement: the implemented set was established by grepping every capability string against its consumer in ``webui/app.js``, and that audit cannot be re-run automatically, so re-adding a name here has to be a deliberate act that also updates this test. """ from __future__ import annotations import pytest from openai4s.server.renderers import RendererRegistry # Capability names with no implementation anywhere in the UI at the time of the # audit. ``sort``/``filter``: the table renderer appends a plain . # ``compare_versions``: the viewer has no version-diff surface of any kind. UNIMPLEMENTED_CAPABILITIES = frozenset({"sort", "filter", "compare_versions"}) def _catalog_by_id() -> dict[str, dict]: return {item["renderer_id"]: item for item in RendererRegistry().catalog()} def test_no_renderer_advertises_an_unimplemented_capability() -> None: offenders = { renderer_id: sorted( UNIMPLEMENTED_CAPABILITIES.intersection(item["capabilities"]) ) for renderer_id, item in _catalog_by_id().items() if UNIMPLEMENTED_CAPABILITIES.intersection(item["capabilities"]) } assert offenders == {} def test_table_renderer_declares_only_viewing() -> None: table = _catalog_by_id()["table"] assert list(table["capabilities"]) == ["view"] def test_flag_off_catalog_does_not_advertise_workbench_table_verbs() -> None: registry = RendererRegistry(workbench_enabled=False, parquet_available=True) catalog = {item["renderer_id"]: item for item in registry.catalog()} assert list(catalog["table"]["capabilities"]) == ["view"] assert "parquet" not in catalog["table"]["capabilities"] assert "profile" not in catalog["table"]["capabilities"] selected = registry.select({"filename": "expression.parquet"}) assert selected["renderer"]["renderer_id"] == "download" assert selected["matched_by"] == "extension" def test_workbench_catalog_declares_profile_only_when_enabled() -> None: registry = RendererRegistry(workbench_enabled=True, parquet_available=False) table = {item["renderer_id"]: item for item in registry.catalog()}["table"] assert "view" in table["capabilities"] assert "sort" in table["capabilities"] assert "filter" in table["capabilities"] assert "profile" in table["capabilities"] assert "export" in table["capabilities"] assert "parquet" not in table["capabilities"] assert "compare_versions" not in table["capabilities"] selected = registry.select({"filename": "expression.parquet"}) assert selected["renderer"]["renderer_id"] == "download" def test_parquet_is_available_only_with_workbench_and_engine() -> None: registry = RendererRegistry(workbench_enabled=True, parquet_available=True) table = {item["renderer_id"]: item for item in registry.catalog()}["table"] assert "parquet" in table["capabilities"] assert ".parquet" in table["extensions"] selected = registry.select({"filename": "expression.parquet"}) assert selected["renderer"]["renderer_id"] == "table" assert selected["matched_by"] == "extension" download = {item["renderer_id"]: item for item in registry.catalog()}["download"] assert ".parquet" not in download["extensions"] def test_unsupported_parquet_engine_never_reports_available() -> None: registry = RendererRegistry(workbench_enabled=True, parquet_available=False) catalog = {item["renderer_id"]: item for item in registry.catalog()} assert "parquet" not in catalog["table"]["capabilities"] assert ".parquet" not in catalog["table"]["extensions"] assert catalog["download"]["extensions"].count(".parquet") == 1 selected = registry.select({"filename": "counts.parquet"}) assert selected["renderer"]["renderer_id"] == "download" @pytest.mark.parametrize( "filename", ["expression.parquet", "cells.arrow", "counts.feather"] ) def test_columnar_binaries_are_declared_download_only(filename: str) -> None: selected = RendererRegistry().select({"filename": filename}) assert selected["renderer"]["renderer_id"] == "download" # ``extension``, not ``fallback``: the format is named as download-only on # purpose, rather than reaching the download renderer by failing to match. assert selected["matched_by"] == "extension" @pytest.mark.parametrize("filename", ["counts.csv", "counts.tsv"]) def test_delimited_text_still_selects_the_table_renderer(filename: str) -> None: selected = RendererRegistry().select({"filename": filename}) assert selected["renderer"]["renderer_id"] == "table" assert selected["matched_by"] == "extension"