Skip to content

Commit

Permalink
Tests for config directory, refs #731
Browse files Browse the repository at this point in the history
  • Loading branch information
simonw committed Apr 27, 2020
1 parent 161dfba commit 79c9cf4
Show file tree
Hide file tree
Showing 2 changed files with 129 additions and 1 deletion.
2 changes: 1 addition & 1 deletion datasette/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ def __init__(
template_dir = str((config_dir / "templates").resolve())
self.template_dir = template_dir
if config_dir and (config_dir / "plugins").is_dir() and not plugins_dir:
template_dir = str((config_dir / "plugins").resolve())
plugins_dir = str((config_dir / "plugins").resolve())
self.plugins_dir = plugins_dir
if config_dir and (config_dir / "static").is_dir() and not static_mounts:
static_mounts = [("static", str((config_dir / "static").resolve()))]
Expand Down
128 changes: 128 additions & 0 deletions tests/test_config_dir.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
import json
import pytest
import sqlite3

from datasette.app import Datasette
from .fixtures import TestClient

PLUGIN = """
from datasette import hookimpl
@hookimpl
def extra_template_vars():
print("this is template vars")
return {
"from_plugin": "hooray"
}
"""
METADATA = {"title": "This is from metadata"}
CONFIG = {
"default_cache_ttl": 60,
"allow_sql": False,
}
CSS = """
body { margin-top: 3em}
"""


@pytest.fixture(scope="session")
def config_dir_client(tmp_path_factory):
config_dir = tmp_path_factory.mktemp("config-dir")

plugins_dir = config_dir / "plugins"
plugins_dir.mkdir()
(plugins_dir / "hooray.py").write_text(PLUGIN, "utf-8")

templates_dir = config_dir / "templates"
templates_dir.mkdir()
(templates_dir / "row.html").write_text(
"Show row here. Plugin says {{ from_plugin }}", "utf-8"
)

static_dir = config_dir / "static"
static_dir.mkdir()
(static_dir / "hello.css").write_text(CSS, "utf-8")

(config_dir / "metadata.json").write_text(json.dumps(METADATA), "utf-8")
(config_dir / "config.json").write_text(json.dumps(CONFIG), "utf-8")

for dbname in ("demo.db", "immutable.db"):
db = sqlite3.connect(str(config_dir / dbname))
db.executescript(
"""
CREATE TABLE cities (
id integer primary key,
name text
);
INSERT INTO cities (id, name) VALUES
(1, 'San Francisco')
;
"""
)

# Mark "immutable.db" as immutable
(config_dir / "inspect-data.json").write_text(
json.dumps(
{
"immutable": {
"hash": "hash",
"size": 8192,
"file": "immutable.db",
"tables": {"cities": {"count": 1}},
}
}
),
"utf-8",
)

ds = Datasette([], config_dir=config_dir)
client = TestClient(ds.app())
client.ds = ds
yield client


def test_metadata(config_dir_client):
response = config_dir_client.get("/-/metadata.json")
assert 200 == response.status
assert METADATA == json.loads(response.text)


def test_config(config_dir_client):
response = config_dir_client.get("/-/config.json")
assert 200 == response.status
config = json.loads(response.text)
assert 60 == config["default_cache_ttl"]
assert not config["allow_sql"]


def test_plugins(config_dir_client):
response = config_dir_client.get("/-/plugins.json")
assert 200 == response.status
assert [
{"name": "hooray.py", "static": False, "templates": False, "version": None}
] == json.loads(response.text)


def test_templates_and_plugin(config_dir_client):
response = config_dir_client.get("/demo/cities/1")
assert 200 == response.status
assert "Show row here. Plugin says hooray" == response.text


def test_static(config_dir_client):
response = config_dir_client.get("/static/hello.css")
assert 200 == response.status
assert CSS == response.text
assert "text/css" == response.headers["content-type"]


def test_databases(config_dir_client):
response = config_dir_client.get("/-/databases.json")
assert 200 == response.status
databases = json.loads(response.text)
assert 2 == len(databases)
databases.sort(key=lambda d: d["name"])
assert "demo" == databases[0]["name"]
assert databases[0]["is_mutable"]
assert "immutable" == databases[1]["name"]
# assert not databases[1]["is_mutable"]

0 comments on commit 79c9cf4

Please sign in to comment.