mirror of
https://github.com/simonw/datasette.git
synced 2026-06-24 09:44:36 +02:00
Isolate test plugins from template context contract tests
Datasette instances created with plugins_dir register their plugins on the global plugin manager for the rest of the process, so the contract tests could see extra_template_vars keys leaked from earlier test modules (e.g. the session-scoped ds_client fixture). A fixture now unregisters non-default plugins implementing extra_template_vars for the duration of each contract test and restores them afterwards. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
a55ae2adfc
commit
3ea7ed8606
1 changed files with 22 additions and 1 deletions
|
|
@ -44,6 +44,27 @@ def test_context_dataclass_fields_all_have_help(klass):
|
|||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def isolate_extra_template_vars_plugins():
|
||||
# Datasette instances created with plugins_dir (e.g. the session-scoped
|
||||
# ds_client fixture) register their plugins on the global plugin manager
|
||||
# for the rest of the process. The contract documents plugin-free
|
||||
# Datasette core, so unregister any non-default plugin that adds
|
||||
# template variables via the extra_template_vars hook
|
||||
from datasette.plugins import pm, DEFAULT_PLUGINS
|
||||
|
||||
hook_plugins = {impl.plugin for impl in pm.hook.extra_template_vars.get_hookimpls()}
|
||||
removed = []
|
||||
for plugin in list(pm.get_plugins()):
|
||||
name = pm.get_name(plugin)
|
||||
if name not in DEFAULT_PLUGINS and plugin in hook_plugins:
|
||||
pm.unregister(plugin)
|
||||
removed.append((plugin, name))
|
||||
yield
|
||||
for plugin, name in removed:
|
||||
pm.register(plugin, name)
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def context_ds(tmp_path_factory):
|
||||
db_path = tmp_path_factory.mktemp("template-context") / "fixtures.db"
|
||||
|
|
@ -94,7 +115,7 @@ async def get_template_context(ds, path):
|
|||
),
|
||||
)
|
||||
async def test_template_context_matches_documented_contract(
|
||||
context_ds, page_name, path
|
||||
context_ds, isolate_extra_template_vars_plugins, page_name, path
|
||||
):
|
||||
# The full contract: every key in the rendered template context is
|
||||
# documented, and every documented key is present in the context
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue