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
|