43 lines
1.8 KiB
Python
43 lines
1.8 KiB
Python
from pathlib import Path
|
|
|
|
INDEX_HTML = Path(__file__).resolve().parents[1] / 'index.html'
|
|
HTML = INDEX_HTML.read_text()
|
|
|
|
|
|
def _between(start_marker: str, end_marker: str) -> str:
|
|
start = HTML.index(start_marker)
|
|
end = HTML.index(end_marker)
|
|
return HTML[start:end]
|
|
|
|
|
|
def test_persistent_safety_plan_button_lives_in_chat_header():
|
|
assert 'id="chat-header"' in HTML, 'expected a dedicated chat header area'
|
|
|
|
header_html = _between('<div id="chat-header"', '<div id="chat-area"')
|
|
|
|
assert 'id="chat-safety-plan-btn"' in header_html
|
|
assert 'aria-label="Open my safety plan"' in header_html
|
|
assert 'aria-controls="safety-plan-modal"' in header_html
|
|
assert 'aria-haspopup="dialog"' in header_html
|
|
|
|
|
|
def test_chat_header_entry_point_reuses_same_modal_open_flow():
|
|
assert "var chatSafetyPlanBtn = document.getElementById('chat-safety-plan-btn');" in HTML
|
|
assert 'function openSafetyPlanModal(trigger) {' in HTML
|
|
assert 'loadSafetyPlan();' in HTML
|
|
assert "safetyPlanModal.classList.add('active');" in HTML
|
|
assert "safetyPlanModal.setAttribute('aria-hidden', 'false');" in HTML
|
|
assert 'openSafetyPlanModal(chatSafetyPlanBtn);' in HTML
|
|
assert 'openSafetyPlanModal(footerSafetyPlanBtn);' in HTML
|
|
assert 'openSafetyPlanModal(crisisSafetyPlanBtn);' in HTML
|
|
|
|
|
|
def test_modal_returns_focus_and_supports_escape_to_close():
|
|
assert 'var lastSafetyPlanTrigger = null;' in HTML
|
|
assert 'lastSafetyPlanTrigger = trigger || document.activeElement;' in HTML
|
|
assert 'document.getElementById(\'sp-warning-signs\').focus();' in HTML
|
|
assert 'closeSafetyPlanModal();' in HTML
|
|
assert "safetyPlanModal.setAttribute('aria-hidden', 'true');" in HTML
|
|
assert 'lastSafetyPlanTrigger.focus();' in HTML
|
|
assert "if (e.key === 'Escape' && safetyPlanModal.classList.contains('active'))" in HTML
|