mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
This change introduces a new plugin hook, publish_subcommand, which can be used to implement new subcommands for the "datasette publish" command family. I've used this new hook to refactor out the "publish now" and "publish heroku" implementations into separate modules. I've also added unit tests for these two publishers, mocking the subprocess.call and subprocess.check_output functions. As part of this, I introduced a mechanism for loading default plugins. These are defined in the new "default_plugins" list inside datasette/app.py Closes #217 (Plugin support for datasette publish) Closes #348 (Unit tests for "datasette publish") Refs #14, #59, #102, #103, #146, #236, #347
51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
"""
|
|
Tests to ensure certain things are documented.
|
|
"""
|
|
from click.testing import CliRunner
|
|
from datasette import app
|
|
from datasette.cli import cli
|
|
from pathlib import Path
|
|
import pytest
|
|
import re
|
|
|
|
docs_path = Path(__file__).parent.parent / 'docs'
|
|
|
|
|
|
def get_headings(filename, underline="-"):
|
|
markdown = (docs_path / filename).open().read()
|
|
heading_re = re.compile(r'(\S+)\n\{}+\n'.format(underline))
|
|
return set(heading_re.findall(markdown))
|
|
|
|
|
|
@pytest.mark.parametrize('config', app.CONFIG_OPTIONS)
|
|
def test_config_options_are_documented(config):
|
|
assert config.name in get_headings("config.rst")
|
|
|
|
|
|
@pytest.mark.parametrize("name,filename", (
|
|
("serve", "datasette-serve-help.txt"),
|
|
("package", "datasette-package-help.txt"),
|
|
("publish now", "datasette-publish-now-help.txt"),
|
|
("publish heroku", "datasette-publish-heroku-help.txt"),
|
|
))
|
|
def test_help_includes(name, filename):
|
|
expected = open(str(docs_path / filename)).read()
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, name.split() + ["--help"], terminal_width=88)
|
|
actual = "$ datasette {} --help\n\n{}".format(
|
|
name, result.output
|
|
)
|
|
# actual has "Usage: cli package [OPTIONS] FILES"
|
|
# because it doesn't know that cli will be aliased to datasette
|
|
expected = expected.replace("Usage: datasette", "Usage: cli")
|
|
assert expected == actual
|
|
|
|
|
|
@pytest.mark.parametrize('plugin', [
|
|
name for name in dir(app.pm.hook) if not name.startswith('_')
|
|
])
|
|
def test_plugin_hooks_are_documented(plugin):
|
|
headings = [
|
|
s.split("(")[0] for s in get_headings("plugins.rst", "~")
|
|
]
|
|
assert plugin in headings
|