68 lines
2.4 KiB
Python
68 lines
2.4 KiB
Python
"""Regression tests for #4154: sidebar strips GitHub issue numbers from titles.
|
|
|
|
The _sessionTitleTags regex must NOT treat purely numeric #NNNN patterns as
|
|
tags. Only known attention/session-control tags like #approval, #clarify,
|
|
#attention should be extracted.
|
|
"""
|
|
|
|
import re
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
SESSIONS_JS = ROOT / "static" / "sessions.js"
|
|
|
|
|
|
def _read_sessions_js():
|
|
return SESSIONS_JS.read_text(encoding="utf-8")
|
|
|
|
|
|
def test_sessionTitleTags_function_exists():
|
|
"""The _sessionTitleTags function must be present in sessions.js."""
|
|
src = _read_sessions_js()
|
|
assert "function _sessionTitleTags" in src
|
|
|
|
|
|
def test_regex_excludes_numeric_issue_numbers():
|
|
"""The regex in _sessionTitleTags must use a negative lookahead to skip
|
|
purely numeric #NNNN patterns (GitHub issue references)."""
|
|
src = _read_sessions_js()
|
|
# The fix replaces /#[\w-]+/g with /#(?!\d+\b)[\w-]+/g
|
|
assert r"#(?!\d+\b)[\w-]+" in src, (
|
|
"Expected negative lookahead regex /#(??!\\d+\\b)[\\w-]+/ in _sessionTitleTags"
|
|
)
|
|
# The old broad pattern must NOT be the only pattern present
|
|
# (the negative lookahead variant must exist)
|
|
|
|
|
|
def test_old_broad_regex_not_still_present():
|
|
r"""The old /#[\w-]+/g pattern (without negative lookahead) must not appear
|
|
in _sessionTitleTags or _renderOneSession tag-stripping code."""
|
|
src = _read_sessions_js()
|
|
# Find _sessionTitleTags function body
|
|
match = re.search(
|
|
r"function _sessionTitleTags\(rawTitle\)\{(.*?)\n\}",
|
|
src,
|
|
re.DOTALL,
|
|
)
|
|
assert match, "Could not locate _sessionTitleTags function body"
|
|
body = match.group(1)
|
|
# The function body must not contain the old broad regex
|
|
assert "/#[\\w-]+/g" not in body.replace(" ", ""), (
|
|
"_sessionTitleTags still uses the old broad /#[\\w-]+/g regex"
|
|
)
|
|
|
|
|
|
def test_regex_applied_in_renderOneSession_too():
|
|
"""The tag-stripping regex in _renderOneSession must also use the
|
|
negative lookahead so visible titles keep issue numbers."""
|
|
src = _read_sessions_js()
|
|
# Find the cleanTitle line
|
|
assert r"#(?!\d+\b)[\w-]+" in src
|
|
# Confirm it appears at least twice (once in _sessionTitleTags, once in
|
|
# _renderOneSession)
|
|
count = src.count(r"#(?!\d+\b)[\w-]+")
|
|
assert count >= 2, (
|
|
f"Expected negative lookahead regex in at least 2 locations "
|
|
f"(_sessionTitleTags + _renderOneSession), found {count}"
|
|
)
|