kopia lustrzana https://github.com/simonw/datasette
49 wiersze
1.6 KiB
Python
49 wiersze
1.6 KiB
Python
|
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'
|
||
|
)
|