kopia lustrzana https://github.com/simonw/datasette
76 wiersze
2.1 KiB
Python
76 wiersze
2.1 KiB
Python
from datasette.cli import cli
|
|
from click.testing import CliRunner
|
|
import urllib
|
|
import sqlite3
|
|
from .fixtures import app_client_two_attached_databases_crossdb_enabled
|
|
|
|
|
|
def test_crossdb_join(app_client_two_attached_databases_crossdb_enabled):
|
|
app_client = app_client_two_attached_databases_crossdb_enabled
|
|
sql = """
|
|
select
|
|
'extra database' as db,
|
|
pk,
|
|
text1,
|
|
text2
|
|
from
|
|
[extra database].searchable
|
|
union all
|
|
select
|
|
'fixtures' as db,
|
|
pk,
|
|
text1,
|
|
text2
|
|
from
|
|
fixtures.searchable
|
|
"""
|
|
response = app_client.get(
|
|
"/_memory.json?" + urllib.parse.urlencode({"sql": sql, "_shape": "array"})
|
|
)
|
|
assert response.status == 200
|
|
assert response.json == [
|
|
{"db": "extra database", "pk": 1, "text1": "barry cat", "text2": "terry dog"},
|
|
{"db": "extra database", "pk": 2, "text1": "terry dog", "text2": "sara weasel"},
|
|
{"db": "fixtures", "pk": 1, "text1": "barry cat", "text2": "terry dog"},
|
|
{"db": "fixtures", "pk": 2, "text1": "terry dog", "text2": "sara weasel"},
|
|
]
|
|
|
|
|
|
def test_crossdb_warning_if_too_many_databases(tmp_path_factory):
|
|
db_dir = tmp_path_factory.mktemp("dbs")
|
|
dbs = []
|
|
for i in range(11):
|
|
path = str(db_dir / "db_{}.db".format(i))
|
|
conn = sqlite3.connect(path)
|
|
conn.execute("vacuum")
|
|
dbs.append(path)
|
|
runner = CliRunner(mix_stderr=False)
|
|
result = runner.invoke(
|
|
cli,
|
|
[
|
|
"serve",
|
|
"--crossdb",
|
|
"--get",
|
|
"/",
|
|
]
|
|
+ dbs,
|
|
catch_exceptions=False,
|
|
)
|
|
assert (
|
|
"Warning: --crossdb only works with the first 10 attached databases"
|
|
in result.stderr
|
|
)
|
|
|
|
|
|
def test_crossdb_attached_database_list_display(
|
|
app_client_two_attached_databases_crossdb_enabled,
|
|
):
|
|
app_client = app_client_two_attached_databases_crossdb_enabled
|
|
response = app_client.get("/_memory")
|
|
for fragment in (
|
|
"databases are attached to this connection",
|
|
"<li><strong>fixtures</strong> - ",
|
|
"<li><strong>extra database</strong> - ",
|
|
):
|
|
assert fragment in response.text
|