From 7c6a9c35299f251f9abfb03fd8e85143e4361709 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Fri, 21 Feb 2020 18:27:07 -0800 Subject: [PATCH] Better tests for prepare_connection() plugin hook, refs #678 --- tests/fixtures.py | 7 ++++++- tests/test_plugins.py | 11 ++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/tests/fixtures.py b/tests/fixtures.py index bb01d171..ac1fec1f 100644 --- a/tests/fixtures.py +++ b/tests/fixtures.py @@ -329,11 +329,16 @@ ureg = pint.UnitRegistry() @hookimpl -def prepare_connection(conn): +def prepare_connection(conn, database, datasette): def convert_units(amount, from_, to_): "select convert_units(100, 'm', 'ft');" return (amount * ureg(from_)).to(to_).to_tuple()[0] conn.create_function('convert_units', 3, convert_units) + def prepare_connection_args(): + return 'database={}, datasette.plugin_config("name-of-plugin")={}'.format( + database, datasette.plugin_config("name-of-plugin") + ) + conn.create_function('prepare_connection_args', 0, prepare_connection_args) @hookimpl diff --git a/tests/test_plugins.py b/tests/test_plugins.py index 42d063f4..44ac0b8e 100644 --- a/tests/test_plugins.py +++ b/tests/test_plugins.py @@ -10,13 +10,22 @@ import pytest import urllib -def test_plugins_dir_plugin(app_client): +def test_plugins_dir_plugin_prepare_connection(app_client): response = app_client.get( "/fixtures.json?sql=select+convert_units(100%2C+'m'%2C+'ft')" ) assert pytest.approx(328.0839) == response.json["rows"][0][0] +def test_plugin_prepare_connection_arguments(app_client): + response = app_client.get( + "/fixtures.json?sql=select+prepare_connection_args()&_shape=arrayfirst" + ) + assert [ + "database=fixtures, datasette.plugin_config(\"name-of-plugin\")={'depth': 'root'}" + ] == response.json + + @pytest.mark.parametrize( "path,expected_decoded_object", [