1
0
mirror of https://github.com/venthur/blag.git synced 2025-11-25 20:52:43 +00:00

fixed for mypy --strict testing

This commit is contained in:
Bastian Venthur
2022-08-31 22:59:55 +02:00
parent 2adc7b3bd4
commit ebac0a8fc4
12 changed files with 102 additions and 88 deletions

View File

@@ -1,13 +1,16 @@
from argparse import Namespace
from typing import Iterator, Callable
from tempfile import TemporaryDirectory
import os
import pytest
from jinja2 import Environment, Template
from blag import blag
@pytest.fixture
def environment():
def environment() -> Iterator[Environment]:
site = {
'base_url': 'site base_url',
'title': 'site title',
@@ -19,32 +22,32 @@ def environment():
@pytest.fixture
def page_template(environment):
def page_template(environment: Environment) -> Iterator[Template]:
yield environment.get_template('page.html')
@pytest.fixture
def article_template(environment):
def article_template(environment: Environment) -> Iterator[Template]:
yield environment.get_template('article.html')
@pytest.fixture
def archive_template(environment):
def archive_template(environment: Environment) -> Iterator[Template]:
yield environment.get_template('archive.html')
@pytest.fixture
def tags_template(environment):
def tags_template(environment: Environment) -> Iterator[Template]:
yield environment.get_template('tags.html')
@pytest.fixture
def tag_template(environment):
def tag_template(environment: Environment) -> Iterator[Template]:
yield environment.get_template('tag.html')
@pytest.fixture
def cleandir():
def cleandir() -> Iterator[str]:
"""Create a temporary workind directory and cwd.
"""
@@ -70,14 +73,9 @@ author = a. u. thor
@pytest.fixture
def args(cleandir):
def args(cleandir: Callable[[], Iterator[str]]) -> Iterator[Namespace]:
class NameSpace:
def __init__(self, **kwargs):
for name in kwargs:
setattr(self, name, kwargs[name])
args = NameSpace(
args = Namespace(
input_dir='content',
output_dir='build',
static_dir='static',

View File

@@ -1,37 +1,41 @@
from tempfile import TemporaryDirectory
import os
from datetime import datetime
from typing import Any
from argparse import Namespace
import pytest
from pytest import CaptureFixture, LogCaptureFixture
from jinja2 import Template
from blag import __VERSION__
from blag import blag
def test_generate_feed(cleandir):
articles = []
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')
def test_feed(cleandir):
articles = [
[
def test_feed(cleandir: str) -> None:
articles: list[tuple[str, dict[str, Any]]] = [
(
'dest1.html',
{
'title': 'title1',
'date': datetime(2019, 6, 6),
'content': 'content1',
}
],
[
),
(
'dest2.html',
{
'title': 'title2',
'date': datetime(1980, 5, 9),
'content': 'content2',
}
],
),
]
blag.generate_feed(articles, 'build', 'https://example.com/',
@@ -60,10 +64,10 @@ def test_feed(cleandir):
assert '<link href="https://example.com/dest2.html"' in feed
def test_generate_feed_with_description(cleandir):
def test_generate_feed_with_description(cleandir: str) -> None:
# if a description is provided, it will be used as the summary in
# the feed, otherwise we simply use the title of the article
articles = [[
articles: list[tuple[str, dict[str, Any]]] = [(
'dest.html',
{
'title': 'title',
@@ -71,7 +75,7 @@ def test_generate_feed_with_description(cleandir):
'date': datetime(2019, 6, 6),
'content': 'content',
}
]]
)]
blag.generate_feed(articles, 'build', ' ', ' ', ' ', ' ')
with open('build/atom.xml') as fh:
@@ -83,7 +87,7 @@ def test_generate_feed_with_description(cleandir):
assert '<content type="html">content' in feed
def test_parse_args_build():
def test_parse_args_build() -> None:
# test default args
args = blag.parse_args(['build'])
assert args.input_dir == 'content'
@@ -116,7 +120,7 @@ def test_parse_args_build():
assert args.static_dir == 'foo'
def test_get_config():
def test_get_config() -> None:
config = """
[main]
base_url = https://example.com/
@@ -166,8 +170,8 @@ author = a. u. thor
assert config_parsed['base_url'] == 'https://example.com/'
def test_environment_factory():
globals_ = {
def test_environment_factory() -> None:
globals_: dict[str, object] = {
'foo': 'bar',
'test': 'me'
}
@@ -176,7 +180,11 @@ def test_environment_factory():
assert env.globals['test'] == 'me'
def test_process_markdown(cleandir, page_template, article_template):
def test_process_markdown(
cleandir: str,
page_template: Template,
article_template: Template,
) -> None:
page1 = """\
title: some page
@@ -202,10 +210,9 @@ foo bar
convertibles = []
for i, txt in enumerate((page1, article1, article2)):
i = str(i)
with open(f'content/{i}', 'w') as fh:
with open(f'content/{str(i)}', 'w') as fh:
fh.write(txt)
convertibles.append([i, i])
convertibles.append((str(i), str(i)))
articles, pages = blag.process_markdown(
convertibles,
@@ -230,7 +237,7 @@ foo bar
assert 'content' in context
def test_build(args):
def test_build(args: Namespace) -> None:
page1 = """\
title: some page
@@ -259,10 +266,9 @@ foo bar
# write some convertibles
convertibles = []
for i, txt in enumerate((page1, article1, article2)):
i = str(i)
with open(f'{args.input_dir}/{i}.md', 'w') as fh:
with open(f'{args.input_dir}/{str(i)}.md', 'w') as fh:
fh.write(txt)
convertibles.append([i, i])
convertibles.append((str(i), str(i)))
# some static files
with open(f'{args.static_dir}/test', 'w') as fh:
@@ -291,21 +297,21 @@ foo bar
assert os.path.exists(f'{args.output_dir}/tags/bar.html')
def test_main(cleandir):
def test_main(cleandir: str) -> None:
blag.main(['build'])
def test_cli_version(capsys):
def test_cli_version(capsys: CaptureFixture[str]) -> None:
with pytest.raises(SystemExit) as ex:
blag.main(['--version'])
# normal system exit
assert ex.value.code == 0
# proper version reported
out, _ = capsys.readouterr()
assert blag.__VERSION__ in out
assert __VERSION__ in out
def test_cli_verbose(cleandir, caplog):
def test_cli_verbose(cleandir: str, caplog: LogCaptureFixture) -> None:
blag.main(['build'])
assert 'DEBUG' not in caplog.text

View File

@@ -1,12 +1,13 @@
import time
import threading
from argparse import Namespace
import pytest
from blag import devserver
def test_get_last_modified(cleandir):
def test_get_last_modified(cleandir: str) -> None:
# take initial time
t1 = devserver.get_last_modified(['content'])
@@ -24,7 +25,7 @@ def test_get_last_modified(cleandir):
assert t2 == t3
def test_autoreload_builds_immediately(args):
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')
@@ -45,7 +46,7 @@ def test_autoreload_builds_immediately(args):
@pytest.mark.filterwarnings("ignore::pytest.PytestUnhandledThreadExceptionWarning") # noqa
def test_autoreload(args):
def test_autoreload(args: Namespace) -> None:
t = threading.Thread(target=devserver.autoreload,
args=(args, ),
daemon=True,)

View File

@@ -1,4 +1,5 @@
from datetime import datetime
from typing import Any
import pytest
import markdown
@@ -26,7 +27,7 @@ from blag.markdown import convert_markdown, markdown_factory
('[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_, expected):
def test_convert_markdown_links(input_: str, expected: str) -> None:
md = markdown_factory()
html, _ = convert_markdown(md, input_)
assert expected in html
@@ -40,7 +41,7 @@ def test_convert_markdown_links(input_, expected):
# no path
('[test]()', ''),
])
def test_dont_convert_normal_links(input_, expected):
def test_dont_convert_normal_links(input_: str, expected: str) -> None:
md = markdown_factory()
html, _ = convert_markdown(md, input_)
assert expected in html
@@ -54,18 +55,18 @@ def test_dont_convert_normal_links(input_, expected):
('date: 2020-01-01 12:10', {'date':
datetime(2020, 1, 1, 12, 10).astimezone()}),
])
def test_convert_metadata(input_, expected):
def test_convert_metadata(input_: str, expected: dict[str, Any]) -> None:
md = markdown_factory()
_, meta = convert_markdown(md, input_)
assert expected == meta
def test_markdown_factory():
def test_markdown_factory() -> None:
md = markdown_factory()
assert isinstance(md, markdown.Markdown)
def test_smarty():
def test_smarty() -> None:
md = markdown_factory()
md1 = """
@@ -79,7 +80,7 @@ this --- is -- a test ...
assert 'hellip' in html
def test_smarty_code():
def test_smarty_code() -> None:
md = markdown_factory()
md1 = """

View File

@@ -1,19 +1,21 @@
from pytest import MonkeyPatch
from blag.quickstart import get_input, quickstart
def test_get_input_default_answer(monkeypatch):
def test_get_input_default_answer(monkeypatch: MonkeyPatch) -> None:
monkeypatch.setattr('builtins.input', lambda x: '')
answer = get_input("foo", "bar")
assert answer == 'bar'
def test_get_input(monkeypatch):
def test_get_input(monkeypatch: MonkeyPatch) -> None:
monkeypatch.setattr('builtins.input', lambda x: 'baz')
answer = get_input("foo", "bar")
assert answer == 'baz'
def test_quickstart(cleandir, monkeypatch):
def test_quickstart(cleandir: str, monkeypatch: MonkeyPatch) -> None:
monkeypatch.setattr('builtins.input', lambda x: 'foo')
quickstart(None)
with open('config.ini', 'r') as fh:

View File

@@ -1,7 +1,9 @@
import datetime
from jinja2 import Template
def test_page(page_template):
def test_page(page_template: Template) -> None:
ctx = {
'content': 'this is the content',
'title': 'this is the title',
@@ -11,7 +13,7 @@ def test_page(page_template):
assert 'this is the title' in result
def test_article(article_template):
def test_article(article_template: Template) -> None:
ctx = {
'content': 'this is the content',
'title': 'this is the title',
@@ -23,7 +25,7 @@ def test_article(article_template):
assert '1980-05-09' in result
def test_archive(archive_template):
def test_archive(archive_template: Template) -> None:
entry = {
'title': 'this is a title',
'dst': 'https://example.com/link',
@@ -41,7 +43,7 @@ def test_archive(archive_template):
assert 'https://example.com/link' in result
def test_tags(tags_template):
def test_tags(tags_template: Template) -> None:
tags = [('foo', 42)]
ctx = {
'tags': tags,
@@ -54,7 +56,7 @@ def test_tags(tags_template):
assert '42' in result
def test_tag(tag_template):
def test_tag(tag_template: Template) -> None:
entry = {
'title': 'this is a title',
'dst': 'https://example.com/link',

View File

@@ -1,5 +1,5 @@
import blag
def test_version():
def test_version() -> None:
assert isinstance(blag.__VERSION__, str)