fix(docs): preserve theme assets in deny-by-default publication
Publish documentation / publish (push) Successful in 36s
Publish documentation / publish (push) Successful in 36s
This commit is contained in:
@@ -27,10 +27,18 @@ class PublicationBoundaryTest(unittest.TestCase):
|
||||
self.write(self.root / "docs" / source, "# Public")
|
||||
self.write(self.site / verifier.output_path(source), "public")
|
||||
self.write(self.root / "mkdocs.yml", self.config)
|
||||
for asset in sorted(verifier.THEME_ASSETS):
|
||||
self.config += f" !/{asset}\n"
|
||||
self.write(self.site / asset, "theme fixture")
|
||||
self.write(self.root / "mkdocs.yml", self.config)
|
||||
self.search = {"docs": [{"location": "", "text": "public"}]}
|
||||
self.write_search()
|
||||
self.write(self.root / "docs/plans/private.md", "# Internal")
|
||||
self.write(self.root / "docs/reports/screenshot.png", "internal asset")
|
||||
self.write(self.site / "index.html", '<link rel="stylesheet" href="css/base.css"><script src="js/base.js"></script>')
|
||||
self.write(self.site / "css/base.css", '@font-face { src: url("../fonts/demo.woff2?v=1"); }')
|
||||
self.write(self.site / "fonts/demo.woff2", "font fixture")
|
||||
self.write(self.site / "js/base.js", "// script fixture")
|
||||
|
||||
@staticmethod
|
||||
def write(path, content):
|
||||
@@ -81,6 +89,39 @@ class PublicationBoundaryTest(unittest.TestCase):
|
||||
with self.assertRaisesRegex(ValueError, "missing generated public"):
|
||||
verifier.check(self.root, self.site)
|
||||
|
||||
def test_missing_theme_stylesheet(self):
|
||||
(self.site / "css/base.css").unlink()
|
||||
with self.assertRaisesRegex(ValueError, "missing generated page asset: css/base.css"):
|
||||
verifier.check(self.root, self.site)
|
||||
|
||||
def test_docs_cannot_shadow_theme_assets(self):
|
||||
self.write(self.root / "docs/css/base.css", "internal content")
|
||||
with self.assertRaisesRegex(ValueError, "docs source shadows theme asset"):
|
||||
verifier.check(self.root, self.site)
|
||||
|
||||
def test_missing_theme_script(self):
|
||||
(self.site / "js/base.js").unlink()
|
||||
with self.assertRaisesRegex(ValueError, "missing generated page asset: js/base.js"):
|
||||
verifier.check(self.root, self.site)
|
||||
|
||||
def test_missing_css_font(self):
|
||||
(self.site / "fonts/demo.woff2").unlink()
|
||||
with self.assertRaisesRegex(ValueError, "missing generated page asset: fonts/demo.woff2"):
|
||||
verifier.check(self.root, self.site)
|
||||
|
||||
def test_asset_outside_site_prefix(self):
|
||||
self.write(self.root / "mkdocs.yml", self.config + "site_url: https://docs.example.invalid/manual/\n")
|
||||
self.write(self.site / "index.html", '<link rel="stylesheet" href="/css/base.css">')
|
||||
with self.assertRaisesRegex(ValueError, "asset escapes public site prefix"):
|
||||
verifier.check(self.root, self.site)
|
||||
|
||||
def test_nested_installation_asset_resolution(self):
|
||||
self.write(self.site / "install/manual/index.html", '<link rel="stylesheet" href="../../css/base.css">')
|
||||
verifier.check_assets(self.site, ["install/manual.md"], "https://docs.example.invalid/manual/")
|
||||
(self.site / "css/base.css").unlink()
|
||||
with self.assertRaisesRegex(ValueError, "missing generated page asset: css/base.css"):
|
||||
verifier.check_assets(self.site, ["install/manual.md"], "https://docs.example.invalid/manual/")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user