"""Tests for #1100 — Prism.js SRI integrity check no longer blocks theme CSS."""
import re
def test_prism_theme_link_has_no_integrity():
"""The prism-tomorrow.min.css link must not have an integrity attribute."""
with open("static/index.html") as f:
src = f.read()
# Find the prism-theme link tag
m = re.search(
r']*id="prism-theme"[^>]*>',
src
)
assert m, "prism-theme link must exist"
link_tag = m.group(0)
assert "integrity=" not in link_tag, \
"prism-theme link must not have integrity attribute (causes intermittent failures)"
def test_prism_theme_link_has_crossorigin():
"""The prism-theme link should still have crossorigin for CORS."""
with open("static/index.html") as f:
src = f.read()
m = re.search(
r']*id="prism-theme"[^>]*>',
src
)
assert m, "prism-theme link must exist"
link_tag = m.group(0)
assert "crossorigin" in link_tag, \
"prism-theme link should still have crossorigin attribute"
def test_prism_theme_version_pinned():
"""The prism CSS URL must pin the version to prevent breaking changes."""
with open("static/index.html") as f:
src = f.read()
m = re.search(
r']*id="prism-theme"[^>]*href="([^"]*)"[^>]*>',
src
)
assert m, "prism-theme link must have href"
href = m.group(1)
assert "@1.29.0" in href, \
f"Prism CSS version must be pinned, found href: {href}"
def test_prism_js_still_has_integrity():
"""Prism JS files should keep SRI — they are less affected by CDN edge issues."""
with open("static/index.html") as f:
src = f.read()
# prism-core.min.js
assert re.search(r'prism-core\.min\.js[^>]*integrity=', src), \
"prism-core.min.js should still have integrity attribute"
# prism-autoloader.min.js
assert re.search(r'prism-autoloader\.min\.js[^>]*integrity=', src), \
"prism-autoloader.min.js should still have integrity attribute"
def test_boot_js_set_resolved_theme_no_integrity():
"""_setResolvedTheme in boot.js must not re-apply integrity on theme switch."""
with open("static/boot.js") as f:
src = f.read()
# _setResolvedTheme function must exist
assert "_setResolvedTheme" in src, "_setResolvedTheme function must exist"
# Must NOT assign link.integrity with a hash value
assert not re.search(r'link\.integrity\s*=\s*["\']sha', src), \
"_setResolvedTheme must not set link.integrity to an SRI hash"
# Must NOT have a wantIntegrity variable
assert "wantIntegrity" not in src, \
"wantIntegrity variable should be removed from _setResolvedTheme"
# Should clear integrity (set to empty) when switching theme
assert re.search(r"link\.integrity\s*=\s*['\"]", src), \
"_setResolvedTheme should clear link.integrity on theme switch"