mirror of
https://github.com/mkdocs/mkdocs.git
synced 2026-03-27 09:58:31 +07:00
Refactor plugin tests
This commit is contained in:
@@ -34,6 +34,8 @@ def load_config(**cfg) -> MkDocsConfig:
|
||||
if 'docs_dir' not in cfg:
|
||||
# Point to an actual dir to avoid a 'does not exist' error on validation.
|
||||
cfg['docs_dir'] = os.path.join(path_base, 'docs')
|
||||
if 'plugins' not in cfg:
|
||||
cfg['plugins'] = []
|
||||
conf = MkDocsConfig(config_file_path=cfg['config_file_path'])
|
||||
conf.load_dict(cfg)
|
||||
|
||||
@@ -123,20 +125,8 @@ class PathAssertionMixin:
|
||||
msg = self._formatMessage(None, f"The path '{path}' is not a file that exists")
|
||||
raise self.failureException(msg)
|
||||
|
||||
def assertPathNotFile(self, *parts):
|
||||
path = os.path.join(*parts)
|
||||
if os.path.isfile(path):
|
||||
msg = self._formatMessage(None, f"The path '{path}' is a file that exists")
|
||||
raise self.failureException(msg)
|
||||
|
||||
def assertPathIsDir(self, *parts):
|
||||
path = os.path.join(*parts)
|
||||
if not os.path.isdir(path):
|
||||
msg = self._formatMessage(None, f"The path '{path}' is not a directory that exists")
|
||||
raise self.failureException(msg)
|
||||
|
||||
def assertPathNotDir(self, *parts):
|
||||
path = os.path.join(*parts)
|
||||
if os.path.isfile(path):
|
||||
msg = self._formatMessage(None, f"The path '{path}' is a directory that exists")
|
||||
raise self.failureException(msg)
|
||||
|
||||
@@ -371,11 +371,13 @@ class BuildTests(PathAssertionMixin, unittest.TestCase):
|
||||
mock_open.assert_called_once()
|
||||
|
||||
@tempdir(files={'index.md': 'page content'})
|
||||
@mock.patch(
|
||||
'mkdocs.plugins.PluginCollection.run_event', side_effect=PluginError('Error message.')
|
||||
)
|
||||
def test_populate_page_read_plugin_error(self, docs_dir, mock_open):
|
||||
def test_populate_page_read_plugin_error(self, docs_dir):
|
||||
def on_page_markdown(*args, **kwargs):
|
||||
raise PluginError('Error message.')
|
||||
|
||||
cfg = load_config(docs_dir=docs_dir)
|
||||
cfg.plugins.events['page_markdown'].append(on_page_markdown)
|
||||
|
||||
file = File('index.md', cfg['docs_dir'], cfg['site_dir'], cfg['use_directory_urls'])
|
||||
page = Page('Foo', file, cfg)
|
||||
with self.assertLogs('mkdocs') as cm:
|
||||
@@ -385,13 +387,12 @@ class BuildTests(PathAssertionMixin, unittest.TestCase):
|
||||
'\n'.join(cm.output),
|
||||
"ERROR:mkdocs.commands.build:Error reading page 'index.md':",
|
||||
)
|
||||
mock_open.assert_called_once()
|
||||
|
||||
# Test build._build_page
|
||||
|
||||
@tempdir()
|
||||
def test_build_page(self, site_dir):
|
||||
cfg = load_config(site_dir=site_dir, nav=['index.md'], plugins=[])
|
||||
cfg = load_config(site_dir=site_dir, nav=['index.md'])
|
||||
fs = [File('index.md', cfg['docs_dir'], cfg['site_dir'], cfg['use_directory_urls'])]
|
||||
files = Files(fs)
|
||||
nav = get_navigation(files, cfg)
|
||||
@@ -406,7 +407,7 @@ class BuildTests(PathAssertionMixin, unittest.TestCase):
|
||||
@tempdir()
|
||||
@mock.patch('jinja2.environment.Template.render', return_value='')
|
||||
def test_build_page_empty(self, site_dir, render_mock):
|
||||
cfg = load_config(site_dir=site_dir, nav=['index.md'], plugins=[])
|
||||
cfg = load_config(site_dir=site_dir, nav=['index.md'])
|
||||
fs = [File('index.md', cfg['docs_dir'], cfg['site_dir'], cfg['use_directory_urls'])]
|
||||
files = Files(fs)
|
||||
nav = get_navigation(files, cfg)
|
||||
@@ -418,14 +419,14 @@ class BuildTests(PathAssertionMixin, unittest.TestCase):
|
||||
'\n'.join(cm.output),
|
||||
"INFO:mkdocs.commands.build:Page skipped: 'index.md'. Generated empty output.",
|
||||
)
|
||||
self.assertPathNotFile(site_dir, 'index.html')
|
||||
self.assertPathNotExists(site_dir, 'index.html')
|
||||
render_mock.assert_called_once()
|
||||
|
||||
@tempdir(files={'index.md': 'page content'})
|
||||
@tempdir(files={'index.html': '<p>page content</p>'})
|
||||
@mock.patch('mkdocs.utils.write_file')
|
||||
def test_build_page_dirty_modified(self, site_dir, docs_dir, mock_write_file):
|
||||
cfg = load_config(docs_dir=docs_dir, site_dir=site_dir, nav=['index.md'], plugins=[])
|
||||
cfg = load_config(docs_dir=docs_dir, site_dir=site_dir, nav=['index.md'])
|
||||
fs = [File('index.md', cfg['docs_dir'], cfg['site_dir'], cfg['use_directory_urls'])]
|
||||
files = Files(fs)
|
||||
nav = get_navigation(files, cfg)
|
||||
@@ -442,7 +443,7 @@ class BuildTests(PathAssertionMixin, unittest.TestCase):
|
||||
@tempdir(files={'testing.html': '<p>page content</p>'})
|
||||
@mock.patch('mkdocs.utils.write_file')
|
||||
def test_build_page_dirty_not_modified(self, site_dir, mock_write_file):
|
||||
cfg = load_config(site_dir=site_dir, nav=['testing.md'], plugins=[])
|
||||
cfg = load_config(site_dir=site_dir, nav=['testing.md'])
|
||||
fs = [File('testing.md', cfg['docs_dir'], cfg['site_dir'], cfg['use_directory_urls'])]
|
||||
files = Files(fs)
|
||||
nav = get_navigation(files, cfg)
|
||||
@@ -458,7 +459,7 @@ class BuildTests(PathAssertionMixin, unittest.TestCase):
|
||||
|
||||
@tempdir()
|
||||
def test_build_page_custom_template(self, site_dir):
|
||||
cfg = load_config(site_dir=site_dir, nav=['index.md'], plugins=[])
|
||||
cfg = load_config(site_dir=site_dir, nav=['index.md'])
|
||||
fs = [File('index.md', cfg['docs_dir'], cfg['site_dir'], cfg['use_directory_urls'])]
|
||||
files = Files(fs)
|
||||
nav = get_navigation(files, cfg)
|
||||
@@ -474,7 +475,7 @@ class BuildTests(PathAssertionMixin, unittest.TestCase):
|
||||
@tempdir()
|
||||
@mock.patch('mkdocs.utils.write_file', side_effect=OSError('Error message.'))
|
||||
def test_build_page_error(self, site_dir, mock_write_file):
|
||||
cfg = load_config(site_dir=site_dir, nav=['index.md'], plugins=[])
|
||||
cfg = load_config(site_dir=site_dir, nav=['index.md'])
|
||||
fs = [File('index.md', cfg['docs_dir'], cfg['site_dir'], cfg['use_directory_urls'])]
|
||||
files = Files(fs)
|
||||
nav = get_navigation(files, cfg)
|
||||
@@ -493,11 +494,12 @@ class BuildTests(PathAssertionMixin, unittest.TestCase):
|
||||
mock_write_file.assert_called_once()
|
||||
|
||||
@tempdir()
|
||||
@mock.patch(
|
||||
'mkdocs.plugins.PluginCollection.run_event', side_effect=PluginError('Error message.')
|
||||
)
|
||||
def test_build_page_plugin_error(self, site_dir, mock_write_file):
|
||||
cfg = load_config(site_dir=site_dir, nav=['index.md'], plugins=[])
|
||||
def test_build_page_plugin_error(self, site_dir):
|
||||
def on_page_context(*args, **kwargs):
|
||||
raise PluginError('Error message.')
|
||||
|
||||
cfg = load_config(site_dir=site_dir, nav=['index.md'])
|
||||
cfg.plugins.events['page_context'].append(on_page_context)
|
||||
fs = [File('index.md', cfg['docs_dir'], cfg['site_dir'], cfg['use_directory_urls'])]
|
||||
files = Files(fs)
|
||||
nav = get_navigation(files, cfg)
|
||||
@@ -513,7 +515,6 @@ class BuildTests(PathAssertionMixin, unittest.TestCase):
|
||||
'\n'.join(cm.output),
|
||||
"ERROR:mkdocs.commands.build:Error building page 'index.md':",
|
||||
)
|
||||
mock_write_file.assert_called_once()
|
||||
|
||||
# Test build.build
|
||||
|
||||
|
||||
@@ -265,27 +265,27 @@ class TestPluginCollection(unittest.TestCase):
|
||||
build_errors.append(error)
|
||||
|
||||
cfg = load_config(site_dir=site_dir)
|
||||
cfg['plugins']['errorplugin'] = PluginRaisingError(error_on='pre_page')
|
||||
cfg.plugins['errorplugin'] = PluginRaisingError(error_on='pre_page')
|
||||
with self.assertLogs('mkdocs', level='ERROR'):
|
||||
self.assertRaises(Abort, build.build, cfg)
|
||||
|
||||
cfg = load_config(site_dir=site_dir)
|
||||
cfg['plugins']['errorplugin'] = PluginRaisingError(error_on='page_markdown')
|
||||
cfg.plugins['errorplugin'] = PluginRaisingError(error_on='page_markdown')
|
||||
with self.assertLogs('mkdocs', level='ERROR'):
|
||||
self.assertRaises(Abort, build.build, cfg)
|
||||
|
||||
cfg = load_config(site_dir=site_dir)
|
||||
cfg['plugins']['errorplugin'] = PluginRaisingError(error_on='page_content')
|
||||
cfg.plugins['errorplugin'] = PluginRaisingError(error_on='page_content')
|
||||
with self.assertLogs('mkdocs', level='ERROR'):
|
||||
self.assertRaises(Abort, build.build, cfg)
|
||||
|
||||
cfg = load_config(site_dir=site_dir)
|
||||
cfg['plugins']['errorplugin'] = PluginRaisingError(error_on='post_page')
|
||||
cfg.plugins['errorplugin'] = PluginRaisingError(error_on='post_page')
|
||||
with self.assertLogs('mkdocs', level='ERROR'):
|
||||
self.assertRaises(ValueError, build.build, cfg)
|
||||
|
||||
cfg = load_config(site_dir=site_dir)
|
||||
cfg['plugins']['errorplugin'] = PluginRaisingError(error_on='')
|
||||
cfg.plugins['errorplugin'] = PluginRaisingError(error_on='')
|
||||
build.build(cfg)
|
||||
|
||||
self.assertEqual(len(build_errors), 4)
|
||||
|
||||
@@ -476,8 +476,8 @@ class SearchIndexTests(unittest.TestCase):
|
||||
self.assertEqual(errors, [])
|
||||
self.assertEqual(warnings, [])
|
||||
|
||||
base_cfg = load_config()
|
||||
base_cfg['plugins']['search'].config.indexing = option
|
||||
base_cfg = load_config(plugins=['search'])
|
||||
base_cfg.plugins['search'].config.indexing = option
|
||||
|
||||
pages = [
|
||||
test_page('Home', 'index.md', base_cfg),
|
||||
|
||||
Reference in New Issue
Block a user