6682f9d0d4
删 7 张写死 mock 卡改 CouponCard 动态渲染(随原生:feed-tag 只用 price_label/rank_label,去掉「比团购省」);三排序 tab 智能推荐/距离最近→feed、销量最高→top-sales(删 mock 残留 asc/desc);触底翻页 + 每 tab 5min 缓存 + loading/empty/degraded 三态 + 去重 + 切 tab 防竞态 + 未授权只切高亮不打接口;抢→referral-link([1,3])→SGBridge.openMeituan(deeplink||h5)。含原 H2a 定位空态 WIP 一并提交。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
73 lines
3.0 KiB
Python
73 lines
3.0 KiB
Python
"""H5 静态托管冒烟:/h5 同源服务页面 + .html no-cache(热更核心)。"""
|
|
from __future__ import annotations
|
|
|
|
|
|
def test_h5_shared_bridge_served(client) -> None:
|
|
resp = client.get("/h5/shared/bridge.js")
|
|
assert resp.status_code == 200
|
|
|
|
|
|
def test_h5_html_no_cache(client) -> None:
|
|
# records 迁入前,先用已在仓库的 mine 页验证 .html 的 no-cache 响应头
|
|
resp = client.get("/h5/mine/index.html")
|
|
assert resp.status_code == 200
|
|
assert resp.headers.get("cache-control") == "no-cache"
|
|
|
|
|
|
def test_h5_html_no_cache_via_dir_url(client) -> None:
|
|
# 目录式 URL(WebView 规范入口)经 html=True 回落 index.html,也必须带 no-cache
|
|
resp = client.get("/h5/mine/")
|
|
assert resp.status_code == 200
|
|
assert resp.headers.get("cache-control") == "no-cache"
|
|
|
|
|
|
def test_h5_records_served_and_migrated(client) -> None:
|
|
resp = client.get("/h5/records/index.html")
|
|
assert resp.status_code == 200
|
|
assert resp.headers.get("cache-control") == "no-cache"
|
|
body = resp.text
|
|
assert "SGBridge" in body # 已切到新桥
|
|
assert "NativeBridge" not in body # 旧桥名清零
|
|
assert "getApiBase" not in body # 同源:绝对地址拼接已移除
|
|
assert "../shared/bridge.js" in body
|
|
|
|
|
|
def test_h5_home_served(client) -> None:
|
|
resp = client.get("/h5/home/index.html")
|
|
assert resp.status_code == 200
|
|
assert resp.headers.get("cache-control") == "no-cache"
|
|
body = resp.text
|
|
assert 'id="home"' in body
|
|
assert "data-cc-id" not in body # 原型编辑器留痕已剥
|
|
assert "../../assets/" not in body # 素材路径已本地化
|
|
assert "/api/v1/platform/stats" in body # 已接同源数据
|
|
assert body.count('class="screen') == 1 # 只剩首页一屏
|
|
|
|
|
|
def test_h5_home_asset_served(client) -> None:
|
|
resp = client.get("/h5/home/assets/shared/logos/sb-brand.png")
|
|
assert resp.status_code == 200
|
|
|
|
|
|
def test_h5_bridge_has_get_location(client) -> None:
|
|
# H2b: 首页 feed 需经纬度, bridge 暴露同步 getLocation()(无桥 mock 北京)
|
|
resp = client.get("/h5/shared/bridge.js")
|
|
assert resp.status_code == 200
|
|
body = resp.text
|
|
assert "getLocation" in body
|
|
assert "116.404" in body and "39.928" in body # 浏览器 mock 北京兜底
|
|
|
|
|
|
def test_h5_home_feed_wired(client) -> None:
|
|
# H2b: 首页 feed 接真实美团端点 + 抢换链;mock 静态卡已移除
|
|
resp = client.get("/h5/home/index.html")
|
|
assert resp.status_code == 200
|
|
body = resp.text
|
|
assert "/api/v1/meituan/feed" in body # rec/distance
|
|
assert "/api/v1/meituan/top-sales" in body # 销量最高
|
|
assert "/api/v1/meituan/referral-link" in body # 抢
|
|
assert "HomeFeed" in body # feed 模块已挂
|
|
assert "茶百道" not in body # 写死的 mock 卡(店名)已移除
|
|
assert "chabaidao.png" not in body # 写死的 mock 头图已移除
|
|
assert "比团购省 5.5 元" not in body # 随原生:mock 卡的「比团购省」标签已删(渲染只用 price_label/rank_label)
|