""" S6 聊天界面集成测试 — 验证 aichat.html 页面元素和 JS 函数 """ import pytest import subprocess import sys import os import time import json # Path setup sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) import local_db import config BASE_URL = "http://127.0.0.1:5000" def get_page(path="/chat"): """Fetch a page from the running Flask server.""" r = subprocess.run( ["curl", "-s", "-o", "/dev/stdout", "-w", "\n%{http_code}", f"{BASE_URL}{path}", "--connect-timeout", "5", "--max-time", "10"], capture_output=True, text=True, timeout=15 ) lines = r.stdout.strip().split("\n") status_code = lines[-1].strip() html = "\n".join(lines[:-1]) return html, status_code def test_chat_page_accessible(): """Test /chat page returns 200.""" html, status = get_page("/chat") assert status == "200", f"Expected 200, got {status}" def test_msg_list_element_exists(): """Test msgList DOM element exists.""" html, _ = get_page("/chat") assert 'id="msgList"' in html, "msgList element not found" assert 'id="messagesContainer"' in html or 'id="msgList"' in html, \ "chat messages container not found" def test_msg_input_exists(): """Test input box exists.""" html, _ = get_page("/chat") assert 'id="msgInput"' in html or 'id="userInput"' in html, \ "input box not found" def test_send_button_exists(): """Test send button exists.""" html, _ = get_page("/chat") assert 'id="sendBtn"' in html or 'id="sendButton"' in html or \ 'onclick="sendMessage' in html or 'addEventListener' in html, \ "send button not found" def test_load_messages_function_exists(): """Test loadMessages / selectConversation function exists.""" html, _ = get_page("/chat") assert 'function loadMessages' in html or \ 'function selectConversation' in html or \ 'loadMessages(' in html or \ 'fetch(' in html, \ "message loading function not found" def test_send_message_function_exists(): """Test sendMessage function exists.""" html, _ = get_page("/chat") assert 'function sendMessage' in html or 'sendMessage(' in html, \ "sendMessage function not found" def test_sse_streaming_integration(): """Test SSE/streaming integration exists.""" html, _ = get_page("/chat") assert 'EventSource' in html or 'stream' in html or 'text/event-stream' in html or \ '/api/conversations' in html, \ "SSE streaming integration not found" def test_no_js_escape_bugs(): """Test no style backslash triple-escape bugs.""" html, _ = get_page("/chat") assert "style=\\\\\\\\'" not in html, "STYLE BACKSLASH BUG: triple backslash in style attribute" assert '\\\\\\\\\\\\\\\\\\\\\\"' not in html, "TRIPLE ESCAPE BUG in JS strings" def test_no_onclick_escape_bugs(): """Test no onclick escape bugs.""" html, _ = get_page("/chat") # Check for onclick with backslash-quote patterns for pattern in ["onclick=\"toggleContent(", "onclick=\"\\\\'", "onclick='\\\\\""]: assert pattern not in html, f"ONCLICK ESCAPE BUG: found pattern: {pattern}" def test_conversation_list_in_sidebar(): """Test sidebar has conversation list.""" html, _ = get_page("/chat") assert 'id="convList"' in html or 'loadConversations' in html, \ "conversation list in sidebar not found" def test_new_chat_button(): """Test new conversation button exists.""" html, _ = get_page("/chat") assert 'newConversation' in html or 'new-chat-btn' in html or \ '新建对话' in html, \ "new chat button not found" if __name__ == "__main__": # Run tests with -v sys.exit(pytest.main([__file__, "-v", "--tb=short"]))