Files
hermes-webui/tests/test_issue4154_sidebar_issue_numbers.py
T

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}"
)