begin rewriting path to resource resolver
this code was getting too messy and scattered, and I realized that Flask wasn't doing as much as I thought it was here, so now we need more safety and sanity checks
This commit is contained in:
1
tests/instance/unreachable.md
Normal file
1
tests/instance/unreachable.md
Normal file
@@ -0,0 +1 @@
|
||||
this file exists but the app should not serve it.
|
||||
@@ -1,7 +1,8 @@
|
||||
"""Unit test helper methods."""
|
||||
import pytest
|
||||
from werkzeug.http import dump_cookie
|
||||
|
||||
from incorporealcms.pages import generate_parent_navs, is_file_path_actually_dir_path, render, resolve_page_file
|
||||
from incorporealcms.pages import generate_parent_navs, render, request_path_to_instance_resource, resolve_page_file
|
||||
|
||||
|
||||
def test_resolve_page_file_dir_to_index():
|
||||
@@ -54,30 +55,6 @@ def test_generate_page_navs_subdir_with_title_parsing_real_page(app):
|
||||
]
|
||||
|
||||
|
||||
def test_is_file_path_actually_dir_path_valid_file_is_yes(app):
|
||||
"""Test that a file request for what's actually a directory is detected as such."""
|
||||
with app.app_context():
|
||||
assert is_file_path_actually_dir_path('/subdir')
|
||||
|
||||
|
||||
def test_is_file_path_actually_dir_path_valid_dir_is_no(app):
|
||||
"""Test that a directory request is still a directory request."""
|
||||
with app.app_context():
|
||||
assert not is_file_path_actually_dir_path('/subdir/')
|
||||
|
||||
|
||||
def test_is_file_path_actually_dir_path_nonsense_file_is_no(app):
|
||||
"""Test that requests to nonsense file-looking paths aren't treated as dirs."""
|
||||
with app.app_context():
|
||||
assert not is_file_path_actually_dir_path('/antphnathpnthapnthsnthax')
|
||||
|
||||
|
||||
def test_is_file_path_actually_dir_path_nonsense_dir_is_no(app):
|
||||
"""Test that a directory request is a directory request even if the dir doesn't exist."""
|
||||
with app.app_context():
|
||||
assert not is_file_path_actually_dir_path('/antphnathpnthapnthsnthax/')
|
||||
|
||||
|
||||
def test_render_with_user_dark_theme(app):
|
||||
"""Test that a request with the dark theme selected renders the dark theme."""
|
||||
cookie = dump_cookie("user-style", 'dark')
|
||||
@@ -98,3 +75,73 @@ def test_render_with_no_user_theme(app):
|
||||
with app.test_request_context():
|
||||
assert b'light.css' in render('base.html').data
|
||||
assert b'dark.css' not in render('base.html').data
|
||||
|
||||
|
||||
def test_request_path_to_instance_resource(app):
|
||||
"""Test a normal URL request is transformed into the file path."""
|
||||
with app.test_request_context():
|
||||
assert request_path_to_instance_resource('index') == 'pages/index.md'
|
||||
|
||||
|
||||
def test_request_path_to_instance_resource_direct_file(app):
|
||||
"""Test a normal URL request is transformed into the file path."""
|
||||
with app.test_request_context():
|
||||
assert request_path_to_instance_resource('no-title') == 'pages/no-title.md'
|
||||
|
||||
|
||||
def test_request_path_to_instance_resource_in_subdir(app):
|
||||
"""Test a normal URL request is transformed into the file path."""
|
||||
with app.test_request_context():
|
||||
assert request_path_to_instance_resource('subdir/page') == 'pages/subdir/page.md'
|
||||
|
||||
|
||||
def test_request_path_to_instance_resource_subdir_index(app):
|
||||
"""Test a normal URL request is transformed into the file path."""
|
||||
with app.test_request_context():
|
||||
assert request_path_to_instance_resource('subdir/') == 'pages/subdir/index.md'
|
||||
|
||||
|
||||
def test_request_path_to_instance_resource_relatives_walked(app):
|
||||
"""Test a normal URL request is transformed into the file path."""
|
||||
with app.test_request_context():
|
||||
assert request_path_to_instance_resource('subdir/more-subdir/../../more-metadata') == 'pages/more-metadata.md'
|
||||
|
||||
|
||||
def test_request_path_to_instance_resource_relatives_walked_indexes_work_too(app):
|
||||
"""Test a normal URL request is transformed into the file path."""
|
||||
with app.test_request_context():
|
||||
assert request_path_to_instance_resource('subdir/more-subdir/../../') == 'pages/index.md'
|
||||
|
||||
|
||||
def test_request_path_to_instance_resource_relatives_walked_into_subdirs_also_fine(app):
|
||||
"""Test a normal URL request is transformed into the file path."""
|
||||
with app.test_request_context():
|
||||
assert request_path_to_instance_resource('subdir/more-subdir/../../subdir/page') == 'pages/subdir/page.md'
|
||||
|
||||
|
||||
def test_request_path_to_instance_resource_permission_error_on_ref_above_pages(app):
|
||||
"""Test that attempts to get above the base dir ("/../../foo") fail."""
|
||||
with app.test_request_context():
|
||||
with pytest.raises(PermissionError):
|
||||
assert request_path_to_instance_resource('../unreachable')
|
||||
|
||||
|
||||
def test_request_path_to_instance_resource_isadirectory_on_file_like_req_for_dir(app):
|
||||
"""Test that a request for e.g. '/foo' when foo is a dir indicate to redirect."""
|
||||
with app.test_request_context():
|
||||
with pytest.raises(IsADirectoryError):
|
||||
assert request_path_to_instance_resource('subdir')
|
||||
|
||||
|
||||
def test_request_path_to_instance_resource_nonexistant_file_errors(app):
|
||||
"""Test that a request for something not on disk errors."""
|
||||
with app.test_request_context():
|
||||
with pytest.raises(FileNotFoundError):
|
||||
assert request_path_to_instance_resource('nthanpthpnh')
|
||||
|
||||
|
||||
def test_request_path_to_instance_resource_absolute_file_errors(app):
|
||||
"""Test that a request for something not on disk errors."""
|
||||
with app.test_request_context():
|
||||
with pytest.raises(PermissionError):
|
||||
assert request_path_to_instance_resource('/etc/hosts')
|
||||
|
||||
Reference in New Issue
Block a user