feat(server): 业务事件契约——白名单+6事件与枚举校验
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import json
|
||||
import pathlib
|
||||
import pytest
|
||||
from datetime import datetime, timedelta
|
||||
from django.utils import timezone
|
||||
from tracker import constants as C
|
||||
@@ -96,3 +97,33 @@ def test_sanitize_url_vectors():
|
||||
|
||||
def test_sanitize_rule_version_exported():
|
||||
assert C.SANITIZE_RULE_VERSION == VECTORS["rule_version"]
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 业务事件契约(spec §1/§2):+6 事件白名单与属性枚举/格式校验
|
||||
# ---------------------------------------------------------------------------
|
||||
SITE_ID = "site_test" # validate_event 不查 DB,本地定义即可
|
||||
|
||||
def _biz(name, **props):
|
||||
return {"event_id": f"biz-{name}", "event_name": name, "occurred_at": timezone.now(),
|
||||
"path": "/p", "title": "t", "site_id": SITE_ID, "visitor_id": "v1",
|
||||
"session_id": "s1", "page_id": "p1", "seq": 1, "properties": props}
|
||||
|
||||
@pytest.mark.parametrize("ev,expect_reason", [
|
||||
(_biz("contact_click", channel="whatsapp"), None),
|
||||
(_biz("contact_click", channel="im"), "property_not_allowed"),
|
||||
(_biz("form_start", form_id="cf7-156"), None),
|
||||
(_biz("form_start", form_id="wpcf7-f156-p20"), "property_not_allowed"),
|
||||
(_biz("form_submit", form_id="cf7-156", submission_id="9c8b7a6d-1111-4222-8333-444455556666"), None),
|
||||
(_biz("form_submit", form_id="cf7-156", submission_id=""), None),
|
||||
(_biz("form_submit", form_id="cf7-156", submission_id="not-uuid"), "property_not_allowed"),
|
||||
(_biz("form_error", form_id="cf7-156", submission_id="", error_code="invalid", field_count=2), None),
|
||||
(_biz("form_error", form_id="cf7-156", submission_id="", error_code="bogus"), "property_not_allowed"),
|
||||
(_biz("form_error", form_id="cf7-156", submission_id="", error_code="invalid", field_count=-1), "property_not_allowed"),
|
||||
(_biz("form_submit_result", form_id="cf7-156", submission_id="", result_code="mail_sent"), None),
|
||||
(_biz("form_submit_result", form_id="cf7-156", submission_id="", result_code="ok"), "property_not_allowed"),
|
||||
(_biz("product_view", product_id="byd-equation-leopard-5", inferred=True, rule_version="v1"), None),
|
||||
(_biz("product_view", product_id="x"*101, inferred=True, rule_version="v1"), "property_not_allowed"),
|
||||
])
|
||||
def test_biz_event_validation(ev, expect_reason):
|
||||
assert validate_event(ev, v2=True, batch_site_id=SITE_ID, batch_visitor_id="v1") == expect_reason
|
||||
|
||||
Reference in New Issue
Block a user