<filename>tests/test_inspect.py<gh_stars>0
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"]

<filename>tests/test_inspect.py<gh_stars>0
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"]

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 );