diff --git a/tests/test_plugins.py b/tests/test_plugins.py new file mode 100644 index 00000000..147050ac --- /dev/null +++ b/tests/test_plugins.py @@ -0,0 +1,48 @@ +from bs4 import BeautifulSoup as Soup +from .fixtures import ( + app_client, +) +import pytest + +pytest.fixture(scope='session')(app_client) + + +def test_plugins_dir_plugin(app_client): + response = app_client.get( + "/test_tables.json?sql=select+convert_units(100%2C+'m'%2C+'ft')", + gather_request=False + ) + assert pytest.approx(328.0839) == response.json['rows'][0][0] + + +def test_plugins_with_duplicate_js_urls(app_client): + # If two plugins both require jQuery, jQuery should be loaded only once + response = app_client.get( + "/test_tables", + gather_request=False + ) + # This test is a little tricky, as if the user has any other plugins in + # their current virtual environment those may affect what comes back too. + # What matters is that https://example.com/jquery.js is only there once + # and it comes before plugin1.js and plugin2.js which could be in either + # order + scripts = Soup(response.body, 'html.parser').findAll('script') + srcs = [s['src'] for s in scripts if s.get('src')] + # No duplicates allowed: + assert len(srcs) == len(set(srcs)) + # jquery.js loaded once: + assert 1 == srcs.count('https://example.com/jquery.js') + # plugin1.js and plugin2.js are both there: + assert 1 == srcs.count('https://example.com/plugin1.js') + assert 1 == srcs.count('https://example.com/plugin2.js') + # jquery comes before them both + assert srcs.index( + 'https://example.com/jquery.js' + ) < srcs.index( + 'https://example.com/plugin1.js' + ) + assert srcs.index( + 'https://example.com/jquery.js' + ) < srcs.index( + 'https://example.com/plugin2.js' + )