rewrite the project as a static site generator
this removes Flask, reworks a number of library methods accordingly, and adds generators and build commands to process the instance directory (largely unchanged, except config.py is now config.json) and spit out files suitable to be served by a web server such as Nginx. there are probably some rough edges here, but overall this works. also note, as this is no longer server software on a network, the license has changed from AGPLv3 to GPLv3, and the "or any later version" allowance has been removed Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
This commit is contained in:
@@ -1,83 +1,38 @@
|
||||
"""Test basic configuration stuff.
|
||||
|
||||
SPDX-FileCopyrightText: © 2020 Brian S. Stephan <bss@incorporeal.org>
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
SPDX-License-Identifier: GPL-3.0-only
|
||||
"""
|
||||
import os
|
||||
|
||||
from incorporealcms import create_app
|
||||
import pytest
|
||||
|
||||
from incorporealcms import init_instance
|
||||
from incorporealcms.config import Config
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
|
||||
def test_config():
|
||||
"""Test create_app without passing test config."""
|
||||
"""Test that the app initialization sets values not normally present in the config."""
|
||||
# this may have gotten here from other imports in other tests
|
||||
try:
|
||||
delattr(Config, 'INSTANCE_VALUE')
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
assert not getattr(Config, 'INSTANCE_VALUE', None)
|
||||
assert not getattr(Config, 'EXTRA_VALUE', None)
|
||||
|
||||
instance_path = os.path.join(HERE, 'instance')
|
||||
assert not create_app(instance_path=instance_path).testing
|
||||
assert create_app(instance_path=instance_path, test_config={"TESTING": True}).testing
|
||||
init_instance(instance_path=instance_path, extra_config={"EXTRA_VALUE": "hello"})
|
||||
|
||||
assert getattr(Config, 'INSTANCE_VALUE', None) == "hi"
|
||||
assert getattr(Config, 'EXTRA_VALUE', None) == "hello"
|
||||
|
||||
|
||||
def test_markdown_meta_extension_always():
|
||||
"""Test that the markdown meta extension is always loaded, even if not specified."""
|
||||
app = create_app(instance_path=os.path.join(HERE, 'instance'),
|
||||
test_config={'MARKDOWN_EXTENSIONS': []})
|
||||
client = app.test_client()
|
||||
response = client.get('/')
|
||||
assert response.status_code == 200
|
||||
assert b'<title>Index - example.com</title>' in response.data
|
||||
|
||||
|
||||
def test_custom_markdown_extensions_work():
|
||||
"""Test we can change extensions via config, and that they work.
|
||||
|
||||
This used to test smarty, but that's added by default now, so we test
|
||||
that it can be removed by overriding the option.
|
||||
"""
|
||||
app = create_app(instance_path=os.path.join(HERE, 'instance'))
|
||||
client = app.test_client()
|
||||
response = client.get('/mdash-or-triple-dash')
|
||||
assert response.status_code == 200
|
||||
assert b'word — word' in response.data
|
||||
|
||||
app = create_app(instance_path=os.path.join(HERE, 'instance'),
|
||||
test_config={'MARKDOWN_EXTENSIONS': []})
|
||||
client = app.test_client()
|
||||
response = client.get('/mdash-or-triple-dash')
|
||||
assert response.status_code == 200
|
||||
assert b'word --- word' in response.data
|
||||
|
||||
|
||||
def test_title_override():
|
||||
"""Test that a configuration with a specific title overrides the default."""
|
||||
instance_path = os.path.join(HERE, 'instance')
|
||||
app = create_app(instance_path=instance_path, test_config={'TITLE_SUFFIX': 'suou.net'})
|
||||
client = app.test_client()
|
||||
response = client.get('/no-title')
|
||||
assert response.status_code == 200
|
||||
assert b'<title>/no-title - suou.net</title>' in response.data
|
||||
|
||||
|
||||
def test_media_file_access(client):
|
||||
"""Test that media files are served, and properly."""
|
||||
response = client.get('/media/favicon.png')
|
||||
assert response.status_code == 200
|
||||
assert response.headers['content-type'] == 'image/png'
|
||||
|
||||
|
||||
def test_favicon_override():
|
||||
"""Test that a configuration with a specific favicon overrides the default."""
|
||||
instance_path = os.path.join(HERE, 'instance')
|
||||
app = create_app(instance_path=instance_path, test_config={'FAVICON': '/media/foo.png'})
|
||||
client = app.test_client()
|
||||
response = client.get('/no-title')
|
||||
assert response.status_code == 200
|
||||
assert b'<link rel="icon" href="/media/foo.png">' in response.data
|
||||
|
||||
|
||||
def test_misconfigured_markdown_extensions():
|
||||
"""Test that a misconfigured markdown extensions leads to a 500 at render time."""
|
||||
instance_path = os.path.join(HERE, 'instance')
|
||||
app = create_app(instance_path=instance_path, test_config={'MARKDOWN_EXTENSIONS': 'WRONG'})
|
||||
client = app.test_client()
|
||||
response = client.get('/no-title')
|
||||
assert response.status_code == 500
|
||||
def test_broken_config():
|
||||
"""Test that the app initialization errors when not given an instance-looking thing."""
|
||||
with pytest.raises(ValueError):
|
||||
instance_path = os.path.join(HERE, 'blah')
|
||||
init_instance(instance_path=instance_path)
|
||||
|
||||
Reference in New Issue
Block a user