forked from github.com/blag
reformatted code
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
# remove when we don't support py38 anymore
|
||||
from __future__ import annotations
|
||||
from argparse import Namespace
|
||||
from typing import Iterator, Callable
|
||||
from tempfile import TemporaryDirectory
|
||||
|
||||
import os
|
||||
from argparse import Namespace
|
||||
from tempfile import TemporaryDirectory
|
||||
from typing import Callable, Iterator
|
||||
|
||||
import pytest
|
||||
from jinja2 import Environment, Template
|
||||
@@ -14,43 +15,43 @@ from blag import blag, quickstart
|
||||
@pytest.fixture
|
||||
def environment(cleandir: str) -> Iterator[Environment]:
|
||||
site = {
|
||||
'base_url': 'site base_url',
|
||||
'title': 'site title',
|
||||
'description': 'site description',
|
||||
'author': 'site author',
|
||||
"base_url": "site base_url",
|
||||
"title": "site title",
|
||||
"description": "site description",
|
||||
"author": "site author",
|
||||
}
|
||||
env = blag.environment_factory('templates', globals_=dict(site=site))
|
||||
env = blag.environment_factory("templates", globals_=dict(site=site))
|
||||
yield env
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def page_template(environment: Environment) -> Iterator[Template]:
|
||||
yield environment.get_template('page.html')
|
||||
yield environment.get_template("page.html")
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def article_template(environment: Environment) -> Iterator[Template]:
|
||||
yield environment.get_template('article.html')
|
||||
yield environment.get_template("article.html")
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def index_template(environment: Environment) -> Iterator[Template]:
|
||||
yield environment.get_template('index.html')
|
||||
yield environment.get_template("index.html")
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def archive_template(environment: Environment) -> Iterator[Template]:
|
||||
yield environment.get_template('archive.html')
|
||||
yield environment.get_template("archive.html")
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def tags_template(environment: Environment) -> Iterator[Template]:
|
||||
yield environment.get_template('tags.html')
|
||||
yield environment.get_template("tags.html")
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def tag_template(environment: Environment) -> Iterator[Template]:
|
||||
yield environment.get_template('tag.html')
|
||||
yield environment.get_template("tag.html")
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -65,8 +66,8 @@ author = a. u. thor
|
||||
"""
|
||||
|
||||
with TemporaryDirectory() as dir:
|
||||
os.mkdir(f'{dir}/build')
|
||||
with open(f'{dir}/config.ini', 'w') as fh:
|
||||
os.mkdir(f"{dir}/build")
|
||||
with open(f"{dir}/config.ini", "w") as fh:
|
||||
fh.write(config)
|
||||
# change directory
|
||||
old_cwd = os.getcwd()
|
||||
@@ -79,11 +80,10 @@ author = a. u. thor
|
||||
|
||||
@pytest.fixture
|
||||
def args(cleandir: Callable[[], Iterator[str]]) -> Iterator[Namespace]:
|
||||
|
||||
args = Namespace(
|
||||
input_dir='content',
|
||||
output_dir='build',
|
||||
static_dir='static',
|
||||
template_dir='templates',
|
||||
input_dir="content",
|
||||
output_dir="build",
|
||||
static_dir="static",
|
||||
template_dir="templates",
|
||||
)
|
||||
yield args
|
||||
|
||||
@@ -1,73 +1,73 @@
|
||||
# remove when we don't support py38 anymore
|
||||
from __future__ import annotations
|
||||
from tempfile import TemporaryDirectory
|
||||
|
||||
import os
|
||||
from datetime import datetime
|
||||
from typing import Any
|
||||
from argparse import Namespace
|
||||
from datetime import datetime
|
||||
from tempfile import TemporaryDirectory
|
||||
from typing import Any
|
||||
|
||||
import pytest
|
||||
from pytest import CaptureFixture, LogCaptureFixture
|
||||
from jinja2 import Template
|
||||
from pytest import CaptureFixture, LogCaptureFixture
|
||||
|
||||
from blag import __VERSION__
|
||||
from blag import blag
|
||||
from blag import __VERSION__, blag
|
||||
|
||||
|
||||
def test_generate_feed(cleandir: str) -> None:
|
||||
articles: list[tuple[str, dict[str, Any]]] = []
|
||||
blag.generate_feed(articles, 'build', ' ', ' ', ' ', ' ')
|
||||
assert os.path.exists('build/atom.xml')
|
||||
blag.generate_feed(articles, "build", " ", " ", " ", " ")
|
||||
assert os.path.exists("build/atom.xml")
|
||||
|
||||
|
||||
def test_feed(cleandir: str) -> None:
|
||||
articles: list[tuple[str, dict[str, Any]]] = [
|
||||
(
|
||||
'dest1.html',
|
||||
"dest1.html",
|
||||
{
|
||||
'title': 'title1',
|
||||
'date': datetime(2019, 6, 6),
|
||||
'content': 'content1',
|
||||
"title": "title1",
|
||||
"date": datetime(2019, 6, 6),
|
||||
"content": "content1",
|
||||
},
|
||||
),
|
||||
(
|
||||
'dest2.html',
|
||||
"dest2.html",
|
||||
{
|
||||
'title': 'title2',
|
||||
'date': datetime(1980, 5, 9),
|
||||
'content': 'content2',
|
||||
"title": "title2",
|
||||
"date": datetime(1980, 5, 9),
|
||||
"content": "content2",
|
||||
},
|
||||
),
|
||||
]
|
||||
|
||||
blag.generate_feed(
|
||||
articles,
|
||||
'build',
|
||||
'https://example.com/',
|
||||
'blog title',
|
||||
'blog description',
|
||||
'blog author',
|
||||
"build",
|
||||
"https://example.com/",
|
||||
"blog title",
|
||||
"blog description",
|
||||
"blog author",
|
||||
)
|
||||
with open('build/atom.xml') as fh:
|
||||
with open("build/atom.xml") as fh:
|
||||
feed = fh.read()
|
||||
|
||||
assert '<title>blog title</title>' in feed
|
||||
assert "<title>blog title</title>" in feed
|
||||
# enable when https://github.com/getpelican/feedgenerator/issues/22
|
||||
# is fixed
|
||||
# assert '<subtitle>blog description</subtitle>' in feed
|
||||
assert '<author><name>blog author</name></author>' in feed
|
||||
assert "<author><name>blog author</name></author>" in feed
|
||||
|
||||
# article 1
|
||||
assert '<title>title1</title>' in feed
|
||||
assert "<title>title1</title>" in feed
|
||||
assert '<summary type="html">title1' in feed
|
||||
assert '<published>2019-06-06' in feed
|
||||
assert "<published>2019-06-06" in feed
|
||||
assert '<content type="html">content1' in feed
|
||||
assert '<link href="https://example.com/dest1.html"' in feed
|
||||
|
||||
# article 2
|
||||
assert '<title>title2</title>' in feed
|
||||
assert "<title>title2</title>" in feed
|
||||
assert '<summary type="html">title2' in feed
|
||||
assert '<published>1980-05-09' in feed
|
||||
assert "<published>1980-05-09" in feed
|
||||
assert '<content type="html">content2' in feed
|
||||
assert '<link href="https://example.com/dest2.html"' in feed
|
||||
|
||||
@@ -77,57 +77,57 @@ def test_generate_feed_with_description(cleandir: str) -> None:
|
||||
# the feed, otherwise we simply use the title of the article
|
||||
articles: list[tuple[str, dict[str, Any]]] = [
|
||||
(
|
||||
'dest.html',
|
||||
"dest.html",
|
||||
{
|
||||
'title': 'title',
|
||||
'description': 'description',
|
||||
'date': datetime(2019, 6, 6),
|
||||
'content': 'content',
|
||||
"title": "title",
|
||||
"description": "description",
|
||||
"date": datetime(2019, 6, 6),
|
||||
"content": "content",
|
||||
},
|
||||
)
|
||||
]
|
||||
blag.generate_feed(articles, 'build', ' ', ' ', ' ', ' ')
|
||||
blag.generate_feed(articles, "build", " ", " ", " ", " ")
|
||||
|
||||
with open('build/atom.xml') as fh:
|
||||
with open("build/atom.xml") as fh:
|
||||
feed = fh.read()
|
||||
|
||||
assert '<title>title</title>' in feed
|
||||
assert "<title>title</title>" in feed
|
||||
assert '<summary type="html">description' in feed
|
||||
assert '<published>2019-06-06' in feed
|
||||
assert "<published>2019-06-06" in feed
|
||||
assert '<content type="html">content' in feed
|
||||
|
||||
|
||||
def test_parse_args_build() -> None:
|
||||
# test default args
|
||||
args = blag.parse_args(['build'])
|
||||
assert args.input_dir == 'content'
|
||||
assert args.output_dir == 'build'
|
||||
assert args.template_dir == 'templates'
|
||||
assert args.static_dir == 'static'
|
||||
args = blag.parse_args(["build"])
|
||||
assert args.input_dir == "content"
|
||||
assert args.output_dir == "build"
|
||||
assert args.template_dir == "templates"
|
||||
assert args.static_dir == "static"
|
||||
|
||||
# input dir
|
||||
args = blag.parse_args(['build', '-i', 'foo'])
|
||||
assert args.input_dir == 'foo'
|
||||
args = blag.parse_args(['build', '--input-dir', 'foo'])
|
||||
assert args.input_dir == 'foo'
|
||||
args = blag.parse_args(["build", "-i", "foo"])
|
||||
assert args.input_dir == "foo"
|
||||
args = blag.parse_args(["build", "--input-dir", "foo"])
|
||||
assert args.input_dir == "foo"
|
||||
|
||||
# output dir
|
||||
args = blag.parse_args(['build', '-o', 'foo'])
|
||||
assert args.output_dir == 'foo'
|
||||
args = blag.parse_args(['build', '--output-dir', 'foo'])
|
||||
assert args.output_dir == 'foo'
|
||||
args = blag.parse_args(["build", "-o", "foo"])
|
||||
assert args.output_dir == "foo"
|
||||
args = blag.parse_args(["build", "--output-dir", "foo"])
|
||||
assert args.output_dir == "foo"
|
||||
|
||||
# template dir
|
||||
args = blag.parse_args(['build', '-t', 'foo'])
|
||||
assert args.template_dir == 'foo'
|
||||
args = blag.parse_args(['build', '--template-dir', 'foo'])
|
||||
assert args.template_dir == 'foo'
|
||||
args = blag.parse_args(["build", "-t", "foo"])
|
||||
assert args.template_dir == "foo"
|
||||
args = blag.parse_args(["build", "--template-dir", "foo"])
|
||||
assert args.template_dir == "foo"
|
||||
|
||||
# static dir
|
||||
args = blag.parse_args(['build', '-s', 'foo'])
|
||||
assert args.static_dir == 'foo'
|
||||
args = blag.parse_args(['build', '--static-dir', 'foo'])
|
||||
assert args.static_dir == 'foo'
|
||||
args = blag.parse_args(["build", "-s", "foo"])
|
||||
assert args.static_dir == "foo"
|
||||
args = blag.parse_args(["build", "--static-dir", "foo"])
|
||||
assert args.static_dir == "foo"
|
||||
|
||||
|
||||
def test_get_config() -> None:
|
||||
@@ -140,24 +140,24 @@ author = a. u. thor
|
||||
"""
|
||||
# happy path
|
||||
with TemporaryDirectory() as dir:
|
||||
configfile = f'{dir}/config.ini'
|
||||
with open(configfile, 'w') as fh:
|
||||
configfile = f"{dir}/config.ini"
|
||||
with open(configfile, "w") as fh:
|
||||
fh.write(config)
|
||||
|
||||
config_parsed = blag.get_config(configfile)
|
||||
assert config_parsed['base_url'] == 'https://example.com/'
|
||||
assert config_parsed['title'] == 'title'
|
||||
assert config_parsed['description'] == 'description'
|
||||
assert config_parsed['author'] == 'a. u. thor'
|
||||
assert config_parsed["base_url"] == "https://example.com/"
|
||||
assert config_parsed["title"] == "title"
|
||||
assert config_parsed["description"] == "description"
|
||||
assert config_parsed["author"] == "a. u. thor"
|
||||
|
||||
# a missing required config causes a sys.exit
|
||||
for x in 'base_url', 'title', 'description', 'author':
|
||||
config2 = '\n'.join(
|
||||
for x in "base_url", "title", "description", "author":
|
||||
config2 = "\n".join(
|
||||
[line for line in config.splitlines() if not line.startswith(x)]
|
||||
)
|
||||
with TemporaryDirectory() as dir:
|
||||
configfile = f'{dir}/config.ini'
|
||||
with open(configfile, 'w') as fh:
|
||||
configfile = f"{dir}/config.ini"
|
||||
with open(configfile, "w") as fh:
|
||||
fh.write(config2)
|
||||
with pytest.raises(SystemExit):
|
||||
config_parsed = blag.get_config(configfile)
|
||||
@@ -171,19 +171,19 @@ description = description
|
||||
author = a. u. thor
|
||||
"""
|
||||
with TemporaryDirectory() as dir:
|
||||
configfile = f'{dir}/config.ini'
|
||||
with open(configfile, 'w') as fh:
|
||||
configfile = f"{dir}/config.ini"
|
||||
with open(configfile, "w") as fh:
|
||||
fh.write(config)
|
||||
|
||||
config_parsed = blag.get_config(configfile)
|
||||
assert config_parsed['base_url'] == 'https://example.com/'
|
||||
assert config_parsed["base_url"] == "https://example.com/"
|
||||
|
||||
|
||||
def test_environment_factory(cleandir: str) -> None:
|
||||
globals_: dict[str, object] = {'foo': 'bar', 'test': 'me'}
|
||||
globals_: dict[str, object] = {"foo": "bar", "test": "me"}
|
||||
env = blag.environment_factory("templates", globals_=globals_)
|
||||
assert env.globals['foo'] == 'bar'
|
||||
assert env.globals['test'] == 'me'
|
||||
assert env.globals["foo"] == "bar"
|
||||
assert env.globals["test"] == "me"
|
||||
|
||||
|
||||
def test_process_markdown(
|
||||
@@ -216,12 +216,12 @@ foo bar
|
||||
|
||||
convertibles = []
|
||||
for i, txt in enumerate((page1, article1, article2)):
|
||||
with open(f'content/{str(i)}', 'w') as fh:
|
||||
with open(f"content/{str(i)}", "w") as fh:
|
||||
fh.write(txt)
|
||||
convertibles.append((str(i), str(i)))
|
||||
|
||||
articles, pages = blag.process_markdown(
|
||||
convertibles, 'content', 'build', page_template, article_template
|
||||
convertibles, "content", "build", page_template, article_template
|
||||
)
|
||||
|
||||
assert isinstance(articles, list)
|
||||
@@ -229,14 +229,14 @@ foo bar
|
||||
for dst, context in articles:
|
||||
assert isinstance(dst, str)
|
||||
assert isinstance(context, dict)
|
||||
assert 'content' in context
|
||||
assert "content" in context
|
||||
|
||||
assert isinstance(pages, list)
|
||||
assert len(pages) == 1
|
||||
for dst, context in pages:
|
||||
assert isinstance(dst, str)
|
||||
assert isinstance(context, dict)
|
||||
assert 'content' in context
|
||||
assert "content" in context
|
||||
|
||||
|
||||
def test_build(args: Namespace) -> None:
|
||||
@@ -268,63 +268,63 @@ foo bar
|
||||
# write some convertibles
|
||||
convertibles = []
|
||||
for i, txt in enumerate((page1, article1, article2)):
|
||||
with open(f'{args.input_dir}/{str(i)}.md', 'w') as fh:
|
||||
with open(f"{args.input_dir}/{str(i)}.md", "w") as fh:
|
||||
fh.write(txt)
|
||||
convertibles.append((str(i), str(i)))
|
||||
|
||||
# some static files
|
||||
with open(f'{args.static_dir}/test', 'w') as fh:
|
||||
fh.write('hello')
|
||||
with open(f"{args.static_dir}/test", "w") as fh:
|
||||
fh.write("hello")
|
||||
|
||||
os.mkdir(f'{args.input_dir}/testdir')
|
||||
with open(f'{args.input_dir}/testdir/test', 'w') as fh:
|
||||
fh.write('hello')
|
||||
os.mkdir(f"{args.input_dir}/testdir")
|
||||
with open(f"{args.input_dir}/testdir/test", "w") as fh:
|
||||
fh.write("hello")
|
||||
|
||||
blag.build(args)
|
||||
|
||||
# test existence of the three converted files
|
||||
for i in range(3):
|
||||
assert os.path.exists(f'{args.output_dir}/{i}.html')
|
||||
assert os.path.exists(f"{args.output_dir}/{i}.html")
|
||||
# ... static file
|
||||
assert os.path.exists(f'{args.output_dir}/test')
|
||||
assert os.path.exists(f"{args.output_dir}/test")
|
||||
# ... directory
|
||||
assert os.path.exists(f'{args.output_dir}/testdir/test')
|
||||
assert os.path.exists(f"{args.output_dir}/testdir/test")
|
||||
# ... feed
|
||||
assert os.path.exists(f'{args.output_dir}/atom.xml')
|
||||
assert os.path.exists(f"{args.output_dir}/atom.xml")
|
||||
# ... index
|
||||
assert os.path.exists(f'{args.output_dir}/index.html')
|
||||
assert os.path.exists(f"{args.output_dir}/index.html")
|
||||
# ... archive
|
||||
assert os.path.exists(f'{args.output_dir}/archive.html')
|
||||
assert os.path.exists(f"{args.output_dir}/archive.html")
|
||||
# ... tags
|
||||
assert os.path.exists(f'{args.output_dir}/tags/index.html')
|
||||
assert os.path.exists(f'{args.output_dir}/tags/foo.html')
|
||||
assert os.path.exists(f'{args.output_dir}/tags/bar.html')
|
||||
assert os.path.exists(f"{args.output_dir}/tags/index.html")
|
||||
assert os.path.exists(f"{args.output_dir}/tags/foo.html")
|
||||
assert os.path.exists(f"{args.output_dir}/tags/bar.html")
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
'template',
|
||||
"template",
|
||||
[
|
||||
'page.html',
|
||||
'article.html',
|
||||
'index.html',
|
||||
'archive.html',
|
||||
'tags.html',
|
||||
'tag.html',
|
||||
]
|
||||
"page.html",
|
||||
"article.html",
|
||||
"index.html",
|
||||
"archive.html",
|
||||
"tags.html",
|
||||
"tag.html",
|
||||
],
|
||||
)
|
||||
def test_missing_template_raises(template: str, args: Namespace) -> None:
|
||||
os.remove(f'templates/{template}')
|
||||
os.remove(f"templates/{template}")
|
||||
with pytest.raises(SystemExit):
|
||||
blag.build(args)
|
||||
|
||||
|
||||
def test_main(cleandir: str) -> None:
|
||||
blag.main(['build'])
|
||||
blag.main(["build"])
|
||||
|
||||
|
||||
def test_cli_version(capsys: CaptureFixture[str]) -> None:
|
||||
with pytest.raises(SystemExit) as ex:
|
||||
blag.main(['--version'])
|
||||
blag.main(["--version"])
|
||||
# normal system exit
|
||||
assert ex.value.code == 0
|
||||
# proper version reported
|
||||
@@ -333,8 +333,8 @@ def test_cli_version(capsys: CaptureFixture[str]) -> None:
|
||||
|
||||
|
||||
def test_cli_verbose(cleandir: str, caplog: LogCaptureFixture) -> None:
|
||||
blag.main(['build'])
|
||||
assert 'DEBUG' not in caplog.text
|
||||
blag.main(["build"])
|
||||
assert "DEBUG" not in caplog.text
|
||||
|
||||
blag.main(['--verbose', 'build'])
|
||||
assert 'DEBUG' in caplog.text
|
||||
blag.main(["--verbose", "build"])
|
||||
assert "DEBUG" in caplog.text
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# remove when we don't support py38 anymore
|
||||
from __future__ import annotations
|
||||
import time
|
||||
|
||||
import threading
|
||||
import time
|
||||
from argparse import Namespace
|
||||
|
||||
import pytest
|
||||
@@ -11,17 +12,17 @@ from blag import devserver
|
||||
|
||||
def test_get_last_modified(cleandir: str) -> None:
|
||||
# take initial time
|
||||
t1 = devserver.get_last_modified(['content'])
|
||||
t1 = devserver.get_last_modified(["content"])
|
||||
|
||||
# wait a bit, create a file and measure again
|
||||
time.sleep(0.1)
|
||||
with open('content/test', 'w') as fh:
|
||||
fh.write('boo')
|
||||
t2 = devserver.get_last_modified(['content'])
|
||||
with open("content/test", "w") as fh:
|
||||
fh.write("boo")
|
||||
t2 = devserver.get_last_modified(["content"])
|
||||
|
||||
# wait a bit and take time again
|
||||
time.sleep(0.1)
|
||||
t3 = devserver.get_last_modified(['content'])
|
||||
t3 = devserver.get_last_modified(["content"])
|
||||
|
||||
assert t2 > t1
|
||||
assert t2 == t3
|
||||
@@ -29,20 +30,20 @@ def test_get_last_modified(cleandir: str) -> None:
|
||||
|
||||
def test_autoreload_builds_immediately(args: Namespace) -> None:
|
||||
# create a dummy file that can be build
|
||||
with open('content/test.md', 'w') as fh:
|
||||
fh.write('boo')
|
||||
with open("content/test.md", "w") as fh:
|
||||
fh.write("boo")
|
||||
|
||||
t = threading.Thread(
|
||||
target=devserver.autoreload,
|
||||
args=(args,),
|
||||
daemon=True,
|
||||
)
|
||||
t0 = devserver.get_last_modified(['build'])
|
||||
t0 = devserver.get_last_modified(["build"])
|
||||
t.start()
|
||||
# try for 5 seconds...
|
||||
for i in range(5):
|
||||
time.sleep(1)
|
||||
t1 = devserver.get_last_modified(['build'])
|
||||
t1 = devserver.get_last_modified(["build"])
|
||||
print(t1)
|
||||
if t1 > t0:
|
||||
break
|
||||
@@ -60,16 +61,16 @@ def test_autoreload(args: Namespace) -> None:
|
||||
)
|
||||
t.start()
|
||||
|
||||
t0 = devserver.get_last_modified(['build'])
|
||||
t0 = devserver.get_last_modified(["build"])
|
||||
|
||||
# create a dummy file that can be build
|
||||
with open('content/test.md', 'w') as fh:
|
||||
fh.write('boo')
|
||||
with open("content/test.md", "w") as fh:
|
||||
fh.write("boo")
|
||||
|
||||
# try for 5 seconds to see if we rebuild once...
|
||||
for i in range(5):
|
||||
time.sleep(1)
|
||||
t1 = devserver.get_last_modified(['build'])
|
||||
t1 = devserver.get_last_modified(["build"])
|
||||
if t1 > t0:
|
||||
break
|
||||
assert t1 > t0
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
# remove when we don't support py38 anymore
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Any
|
||||
|
||||
import pytest
|
||||
import markdown
|
||||
import pytest
|
||||
|
||||
from blag.markdown import convert_markdown, markdown_factory
|
||||
|
||||
@@ -13,23 +14,23 @@ from blag.markdown import convert_markdown, markdown_factory
|
||||
"input_, expected",
|
||||
[
|
||||
# inline
|
||||
('[test](test.md)', 'test.html'),
|
||||
('[test](test.md "test")', 'test.html'),
|
||||
('[test](a/test.md)', 'a/test.html'),
|
||||
('[test](a/test.md "test")', 'a/test.html'),
|
||||
('[test](/test.md)', '/test.html'),
|
||||
('[test](/test.md "test")', '/test.html'),
|
||||
('[test](/a/test.md)', '/a/test.html'),
|
||||
('[test](/a/test.md "test")', '/a/test.html'),
|
||||
("[test](test.md)", "test.html"),
|
||||
('[test](test.md "test")', "test.html"),
|
||||
("[test](a/test.md)", "a/test.html"),
|
||||
('[test](a/test.md "test")', "a/test.html"),
|
||||
("[test](/test.md)", "/test.html"),
|
||||
('[test](/test.md "test")', "/test.html"),
|
||||
("[test](/a/test.md)", "/a/test.html"),
|
||||
('[test](/a/test.md "test")', "/a/test.html"),
|
||||
# reference
|
||||
('[test][]\n[test]: test.md ' '', 'test.html'),
|
||||
('[test][]\n[test]: test.md "test"', 'test.html'),
|
||||
('[test][]\n[test]: a/test.md', 'a/test.html'),
|
||||
('[test][]\n[test]: a/test.md "test"', 'a/test.html'),
|
||||
('[test][]\n[test]: /test.md', '/test.html'),
|
||||
('[test][]\n[test]: /test.md "test"', '/test.html'),
|
||||
('[test][]\n[test]: /a/test.md', '/a/test.html'),
|
||||
('[test][]\n[test]: /a/test.md "test"', '/a/test.html'),
|
||||
("[test][]\n[test]: test.md " "", "test.html"),
|
||||
('[test][]\n[test]: test.md "test"', "test.html"),
|
||||
("[test][]\n[test]: a/test.md", "a/test.html"),
|
||||
('[test][]\n[test]: a/test.md "test"', "a/test.html"),
|
||||
("[test][]\n[test]: /test.md", "/test.html"),
|
||||
('[test][]\n[test]: /test.md "test"', "/test.html"),
|
||||
("[test][]\n[test]: /a/test.md", "/a/test.html"),
|
||||
('[test][]\n[test]: /a/test.md "test"', "/a/test.html"),
|
||||
],
|
||||
)
|
||||
def test_convert_markdown_links(input_: str, expected: str) -> None:
|
||||
@@ -42,11 +43,11 @@ def test_convert_markdown_links(input_: str, expected: str) -> None:
|
||||
"input_, expected",
|
||||
[
|
||||
# scheme
|
||||
('[test](https://)', 'https://'),
|
||||
("[test](https://)", "https://"),
|
||||
# netloc
|
||||
('[test](//test.md)', '//test.md'),
|
||||
("[test](//test.md)", "//test.md"),
|
||||
# no path
|
||||
('[test]()', ''),
|
||||
("[test]()", ""),
|
||||
],
|
||||
)
|
||||
def test_dont_convert_normal_links(input_: str, expected: str) -> None:
|
||||
@@ -58,13 +59,13 @@ def test_dont_convert_normal_links(input_: str, expected: str) -> None:
|
||||
@pytest.mark.parametrize(
|
||||
"input_, expected",
|
||||
[
|
||||
('foo: bar', {'foo': 'bar'}),
|
||||
('foo: those are several words', {'foo': 'those are several words'}),
|
||||
('tags: this, is, a, test\n', {'tags': ['this', 'is', 'a', 'test']}),
|
||||
('tags: this, IS, a, test', {'tags': ['this', 'is', 'a', 'test']}),
|
||||
("foo: bar", {"foo": "bar"}),
|
||||
("foo: those are several words", {"foo": "those are several words"}),
|
||||
("tags: this, is, a, test\n", {"tags": ["this", "is", "a", "test"]}),
|
||||
("tags: this, IS, a, test", {"tags": ["this", "is", "a", "test"]}),
|
||||
(
|
||||
'date: 2020-01-01 12:10',
|
||||
{'date': datetime(2020, 1, 1, 12, 10).astimezone()},
|
||||
"date: 2020-01-01 12:10",
|
||||
{"date": datetime(2020, 1, 1, 12, 10).astimezone()},
|
||||
),
|
||||
],
|
||||
)
|
||||
@@ -88,9 +89,9 @@ this --- is -- a test ...
|
||||
|
||||
"""
|
||||
html, meta = convert_markdown(md, md1)
|
||||
assert 'mdash' in html
|
||||
assert 'ndash' in html
|
||||
assert 'hellip' in html
|
||||
assert "mdash" in html
|
||||
assert "ndash" in html
|
||||
assert "hellip" in html
|
||||
|
||||
|
||||
def test_smarty_code() -> None:
|
||||
@@ -102,6 +103,6 @@ this --- is -- a test ...
|
||||
```
|
||||
"""
|
||||
html, meta = convert_markdown(md, md1)
|
||||
assert 'mdash' not in html
|
||||
assert 'ndash' not in html
|
||||
assert 'hellip' not in html
|
||||
assert "mdash" not in html
|
||||
assert "ndash" not in html
|
||||
assert "hellip" not in html
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
# remove when we don't support py38 anymore
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
|
||||
from pytest import MonkeyPatch
|
||||
@@ -8,26 +9,26 @@ from blag.quickstart import get_input, quickstart
|
||||
|
||||
|
||||
def test_get_input_default_answer(monkeypatch: MonkeyPatch) -> None:
|
||||
monkeypatch.setattr('builtins.input', lambda x: '')
|
||||
monkeypatch.setattr("builtins.input", lambda x: "")
|
||||
answer = get_input("foo", "bar")
|
||||
assert answer == 'bar'
|
||||
assert answer == "bar"
|
||||
|
||||
|
||||
def test_get_input(monkeypatch: MonkeyPatch) -> None:
|
||||
monkeypatch.setattr('builtins.input', lambda x: 'baz')
|
||||
monkeypatch.setattr("builtins.input", lambda x: "baz")
|
||||
answer = get_input("foo", "bar")
|
||||
assert answer == 'baz'
|
||||
assert answer == "baz"
|
||||
|
||||
|
||||
def test_quickstart(cleandir: str, monkeypatch: MonkeyPatch) -> None:
|
||||
monkeypatch.setattr('builtins.input', lambda x: 'foo')
|
||||
monkeypatch.setattr("builtins.input", lambda x: "foo")
|
||||
quickstart(None)
|
||||
with open('config.ini', 'r') as fh:
|
||||
with open("config.ini", "r") as fh:
|
||||
data = fh.read()
|
||||
assert 'base_url = foo' in data
|
||||
assert 'title = foo' in data
|
||||
assert 'description = foo' in data
|
||||
assert 'author = foo' in data
|
||||
assert "base_url = foo" in data
|
||||
assert "title = foo" in data
|
||||
assert "description = foo" in data
|
||||
assert "author = foo" in data
|
||||
|
||||
for template in (
|
||||
"archive.html",
|
||||
@@ -38,7 +39,7 @@ def test_quickstart(cleandir: str, monkeypatch: MonkeyPatch) -> None:
|
||||
"tag.html",
|
||||
"tags.html",
|
||||
):
|
||||
assert os.path.exists(f'templates/{template}')
|
||||
assert os.path.exists(f"templates/{template}")
|
||||
|
||||
for directory in "build", "content", "static":
|
||||
assert os.path.exists(directory)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
# remove when we don't support py38 anymore
|
||||
from __future__ import annotations
|
||||
|
||||
import datetime
|
||||
|
||||
from jinja2 import Template
|
||||
@@ -7,91 +8,91 @@ from jinja2 import Template
|
||||
|
||||
def test_page(page_template: Template) -> None:
|
||||
ctx = {
|
||||
'content': 'this is the content',
|
||||
'title': 'this is the title',
|
||||
"content": "this is the content",
|
||||
"title": "this is the title",
|
||||
}
|
||||
result = page_template.render(ctx)
|
||||
assert 'this is the content' in result
|
||||
assert 'this is the title' in result
|
||||
assert "this is the content" in result
|
||||
assert "this is the title" in result
|
||||
|
||||
|
||||
def test_article(article_template: Template) -> None:
|
||||
ctx = {
|
||||
'content': 'this is the content',
|
||||
'title': 'this is the title',
|
||||
'date': datetime.datetime(1980, 5, 9),
|
||||
"content": "this is the content",
|
||||
"title": "this is the title",
|
||||
"date": datetime.datetime(1980, 5, 9),
|
||||
}
|
||||
result = article_template.render(ctx)
|
||||
assert 'this is the content' in result
|
||||
assert 'this is the title' in result
|
||||
assert '1980-05-09' in result
|
||||
assert "this is the content" in result
|
||||
assert "this is the title" in result
|
||||
assert "1980-05-09" in result
|
||||
|
||||
|
||||
def test_index(index_template: Template) -> None:
|
||||
entry = {
|
||||
'title': 'this is a title',
|
||||
'dst': 'https://example.com/link',
|
||||
'date': datetime.datetime(1980, 5, 9),
|
||||
"title": "this is a title",
|
||||
"dst": "https://example.com/link",
|
||||
"date": datetime.datetime(1980, 5, 9),
|
||||
}
|
||||
archive = [entry]
|
||||
ctx = {
|
||||
'archive': archive,
|
||||
"archive": archive,
|
||||
}
|
||||
result = index_template.render(ctx)
|
||||
assert 'site title' in result
|
||||
assert "site title" in result
|
||||
|
||||
assert 'this is a title' in result
|
||||
assert '1980-05-09' in result
|
||||
assert 'https://example.com/link' in result
|
||||
assert "this is a title" in result
|
||||
assert "1980-05-09" in result
|
||||
assert "https://example.com/link" in result
|
||||
|
||||
assert '/archive.html' in result
|
||||
assert "/archive.html" in result
|
||||
|
||||
|
||||
def test_archive(archive_template: Template) -> None:
|
||||
entry = {
|
||||
'title': 'this is a title',
|
||||
'dst': 'https://example.com/link',
|
||||
'date': datetime.datetime(1980, 5, 9),
|
||||
"title": "this is a title",
|
||||
"dst": "https://example.com/link",
|
||||
"date": datetime.datetime(1980, 5, 9),
|
||||
}
|
||||
archive = [entry]
|
||||
ctx = {
|
||||
'archive': archive,
|
||||
"archive": archive,
|
||||
}
|
||||
result = archive_template.render(ctx)
|
||||
assert 'Archive' in result
|
||||
assert "Archive" in result
|
||||
|
||||
assert 'this is a title' in result
|
||||
assert '1980-05-09' in result
|
||||
assert 'https://example.com/link' in result
|
||||
assert "this is a title" in result
|
||||
assert "1980-05-09" in result
|
||||
assert "https://example.com/link" in result
|
||||
|
||||
|
||||
def test_tags(tags_template: Template) -> None:
|
||||
tags = [('foo', 42)]
|
||||
tags = [("foo", 42)]
|
||||
ctx = {
|
||||
'tags': tags,
|
||||
"tags": tags,
|
||||
}
|
||||
result = tags_template.render(ctx)
|
||||
assert 'Tags' in result
|
||||
assert "Tags" in result
|
||||
|
||||
assert 'foo.html' in result
|
||||
assert 'foo' in result
|
||||
assert '42' in result
|
||||
assert "foo.html" in result
|
||||
assert "foo" in result
|
||||
assert "42" in result
|
||||
|
||||
|
||||
def test_tag(tag_template: Template) -> None:
|
||||
entry = {
|
||||
'title': 'this is a title',
|
||||
'dst': 'https://example.com/link',
|
||||
'date': datetime.datetime(1980, 5, 9),
|
||||
"title": "this is a title",
|
||||
"dst": "https://example.com/link",
|
||||
"date": datetime.datetime(1980, 5, 9),
|
||||
}
|
||||
archive = [entry]
|
||||
ctx = {
|
||||
'tag': 'foo',
|
||||
'archive': archive,
|
||||
"tag": "foo",
|
||||
"archive": archive,
|
||||
}
|
||||
result = tag_template.render(ctx)
|
||||
assert 'foo' in result
|
||||
assert "foo" in result
|
||||
|
||||
assert 'this is a title' in result
|
||||
assert '1980-05-09' in result
|
||||
assert 'https://example.com/link' in result
|
||||
assert "this is a title" in result
|
||||
assert "1980-05-09" in result
|
||||
assert "https://example.com/link" in result
|
||||
|
||||
Reference in New Issue
Block a user