Some checks failed
CD Pipeline / deploy (push) Has been cancelled
- normalize URLs at write time (scheduler crawlers, routes) to drop javascript:/EC404/placeholder i_code (momo_/manual_/pchome_) - add global click+auxclick guard in base.html and ewoooc_base.html that intercepts blocked MOMO URLs and redirects to safe i_code URL - per-page dashboards reuse the same isLikelyMomoIcode validation - /api/track_momo_link records blocked events for diagnosis - ship sanitize_momo_urls.py to clean existing polluted DB rows Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
51 lines
2.0 KiB
Python
51 lines
2.0 KiB
Python
from utils.momo_url_utils import build_momo_product_url, extract_momo_i_code, is_probable_momo_icode, normalize_momo_product_url
|
|
|
|
|
|
def test_build_momo_product_url_from_code():
|
|
assert build_momo_product_url("12345") == "https://www.momoshop.com.tw/goods/GoodsDetail.jsp?i_code=12345"
|
|
|
|
|
|
def test_build_momo_product_url_empty_returns_none():
|
|
assert build_momo_product_url("") is None
|
|
assert build_momo_product_url(None) is None
|
|
|
|
|
|
def test_normalize_keeps_valid_goodsdetail_url():
|
|
valid = "https://www.momoshop.com.tw/goods/GoodsDetail.jsp?i_code=12345"
|
|
assert normalize_momo_product_url(valid, "12345") == valid
|
|
|
|
|
|
def test_normalize_falls_back_for_javascript_link():
|
|
assert normalize_momo_product_url("javascript:void(0)", "12345") == build_momo_product_url("12345")
|
|
|
|
|
|
def test_normalize_falls_back_for_err404_page():
|
|
assert normalize_momo_product_url(
|
|
"https://www.momoshop.com.tw/ecm/js/err404/EC404.html",
|
|
"12345",
|
|
) == build_momo_product_url("12345")
|
|
|
|
|
|
def test_normalize_adds_https_for_protocol_relative_url():
|
|
assert normalize_momo_product_url("//www.momoshop.com.tw/goods/GoodsDetail.jsp?i_code=12345", "12345") == (
|
|
"https://www.momoshop.com.tw/goods/GoodsDetail.jsp?i_code=12345"
|
|
)
|
|
|
|
|
|
def test_extract_momo_i_code():
|
|
assert extract_momo_i_code("https://www.momoshop.com.tw/goods/GoodsDetail.jsp?i_code=12345") == "12345"
|
|
assert extract_momo_i_code("/goods/GoodsDetail.jsp?i_code=999") == "999"
|
|
assert extract_momo_i_code("not-a-url") is None
|
|
|
|
|
|
def test_invalid_placeholder_codes():
|
|
assert is_probable_momo_icode("momo_0") is False
|
|
assert is_probable_momo_icode("manual_123") is False
|
|
assert is_probable_momo_icode("pchome_1") is False
|
|
assert is_probable_momo_icode("1234") is True
|
|
|
|
|
|
def test_normalize_blocks_goodsdetail_without_i_code():
|
|
invalid = "https://www.momoshop.com.tw/goods/GoodsDetail.jsp?foo=1"
|
|
assert normalize_momo_product_url(invalid, "12345") == build_momo_product_url("12345")
|