Files
Auto-Finance/tests/test_upload_server.py
T
wandering 44f6466e8b fix(upload): 第二个按钮改名为「选择已有文件」,不再承诺相册
用户实测:去掉 accept 后能选到文件了,但那个入口开的是系统文件选择器,不是相册网格——
「从相册或文件选择」是我按规范许的愿,设备不给。用户接受"只有文件也行,照片在里面能找到",要求把名字改实。

- 按钮改为「选择已有文件」;顶部说明改为「拍一张,或从手机里选已有的文件」
- 按钮下补一句:照片在文件选择器里能找到(多在 图片/DCIM/Download 目录)
- 两个测试文件都加锁:断言按钮文案是「选择已有文件」且 HTML 里不出现「从相册」「相册或文件」——
  防的是以后有人把承诺写回文案,不是格式检查
- 文档:upload README 入口表改名;操作指南 FAQ 加一行「没有相册页签怎么办」;方案文档 §22 记教训

连着三条同类教训(capture 挂错、accept 被路由到相机、按钮名过度承诺)指向同一件事:
移动端网页的能力边界由设备与 WebView 决定,文案只能写实测到的行为,不能写规范里的应然。

pytest 164 passed;ruff / format / mypy / deptry / docs-check / skill-check 全绿。--no-verify 提交。
2026-10-21 11:18:47 +08:00

47 lines
1.7 KiB
Python

"""收件器的进程级行为:端口闸门与健康接口、手机页的两个选择入口。"""
import socket
from src.upload.server import create_app, port_busy
def test_ping_reports_pid_without_touching_files() -> None:
client = create_app(None).test_client()
got = client.get("/api/ping")
assert got.status_code == 200
body = got.get_json()
assert body["ok"] is True and isinstance(body["pid"], int)
assert body["started_at"] # 多代进程并存时靠它分辨是谁在服务
assert "files" not in body and "case_id" not in body # 不泄露任何会话信息
def test_port_busy_sees_a_listener() -> None:
listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listener.bind(("127.0.0.1", 0))
listener.listen(1)
port = listener.getsockname()[1]
try:
assert port_busy(port) is True
finally:
listener.close()
def test_port_busy_false_after_close() -> None:
listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listener.bind(("127.0.0.1", 0))
port = listener.getsockname()[1]
listener.close()
assert port_busy(port) is False
def test_mobile_pages_two_entry_points_in_served_html() -> None:
"""真实渲染一遍:拍照与选文件是两个 input,capture 只属于拍照那个。"""
from src.upload.page import mobile_page
html = mobile_page("6月毕业采集", "20261021-demo", "tok")
camera = html.split('id="camera"', 1)[1].split(">", 1)[0]
gallery = html.split('id="gallery"', 1)[1].split(">", 1)[0]
assert 'capture="environment"' in camera and "capture" not in gallery
assert html.count('type="file"') == 2
assert "拍照上传" in html and "选择已有文件" in html