kopia lustrzana https://github.com/simonw/datasette
93 wiersze
2.7 KiB
Python
93 wiersze
2.7 KiB
Python
from datasette.app import Datasette
|
|
from datasette.utils import sqlite3
|
|
import os
|
|
import pytest
|
|
import tempfile
|
|
|
|
|
|
TABLES = """
|
|
CREATE TABLE "election_results" (
|
|
"county" INTEGER,
|
|
"party" INTEGER,
|
|
"office" INTEGER,
|
|
"votes" INTEGER,
|
|
FOREIGN KEY (county) REFERENCES county(id),
|
|
FOREIGN KEY (party) REFERENCES party(id),
|
|
FOREIGN KEY (office) REFERENCES office(id)
|
|
);
|
|
|
|
CREATE VIRTUAL TABLE "election_results_fts" USING FTS4 ("county", "party");
|
|
|
|
CREATE TABLE "county" (
|
|
"id" INTEGER PRIMARY KEY ,
|
|
"name" TEXT
|
|
);
|
|
|
|
CREATE TABLE "party" (
|
|
"id" INTEGER PRIMARY KEY ,
|
|
"name" TEXT
|
|
);
|
|
|
|
CREATE TABLE "office" (
|
|
"id" INTEGER PRIMARY KEY ,
|
|
"name" TEXT
|
|
);
|
|
"""
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def ds_instance():
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
filepath = os.path.join(tmpdir, "fixtures.db")
|
|
conn = sqlite3.connect(filepath)
|
|
conn.executescript(TABLES)
|
|
yield Datasette([filepath])
|
|
|
|
|
|
def test_inspect_hidden_tables(ds_instance):
|
|
info = ds_instance.inspect()
|
|
tables = info["fixtures"]["tables"]
|
|
expected_hidden = (
|
|
"election_results_fts",
|
|
"election_results_fts_content",
|
|
"election_results_fts_docsize",
|
|
"election_results_fts_segdir",
|
|
"election_results_fts_segments",
|
|
"election_results_fts_stat",
|
|
)
|
|
expected_visible = ("election_results", "county", "party", "office")
|
|
assert sorted(expected_hidden) == sorted(
|
|
[table for table in tables if tables[table]["hidden"]]
|
|
)
|
|
assert sorted(expected_visible) == sorted(
|
|
[table for table in tables if not tables[table]["hidden"]]
|
|
)
|
|
|
|
|
|
def test_inspect_foreign_keys(ds_instance):
|
|
info = ds_instance.inspect()
|
|
tables = info["fixtures"]["tables"]
|
|
for table_name in ("county", "party", "office"):
|
|
assert 0 == tables[table_name]["count"]
|
|
foreign_keys = tables[table_name]["foreign_keys"]
|
|
assert [] == foreign_keys["outgoing"]
|
|
assert [
|
|
{
|
|
"column": "id",
|
|
"other_column": table_name,
|
|
"other_table": "election_results",
|
|
}
|
|
] == foreign_keys["incoming"]
|
|
|
|
election_results = tables["election_results"]
|
|
assert 0 == election_results["count"]
|
|
assert sorted(
|
|
[
|
|
{"column": "county", "other_column": "id", "other_table": "county"},
|
|
{"column": "party", "other_column": "id", "other_table": "party"},
|
|
{"column": "office", "other_column": "id", "other_table": "office"},
|
|
],
|
|
key=lambda d: d["column"],
|
|
) == sorted(election_results["foreign_keys"]["outgoing"], key=lambda d: d["column"])
|
|
assert [] == election_results["foreign_keys"]["incoming"]
|