V10.542 拆分可用比價覆蓋率口徑
This commit is contained in:
@@ -75,7 +75,7 @@ def test_competitor_coverage_counts_only_active_product_intersection():
|
||||
"def _fetch_manual_review_summary", 1
|
||||
)[0]
|
||||
|
||||
assert "coverage:v7" in source
|
||||
assert "coverage:v8" in source
|
||||
assert "rescore_accepted_count" in coverage_source
|
||||
assert "(SELECT COUNT(*) FROM valid_competitor) AS valid_matches" not in coverage_source
|
||||
assert "identity_competitor AS" in coverage_source
|
||||
@@ -85,6 +85,8 @@ def test_competitor_coverage_counts_only_active_product_intersection():
|
||||
assert "WHERE fc.sku IS NULL" in coverage_source
|
||||
assert "\"fresh_matches\": fresh" in coverage_source
|
||||
assert "\"stale_matches\": stale" in coverage_source
|
||||
assert "\"decision_ready_matches\": fresh" in coverage_source
|
||||
assert "\"decision_ready_rate\": round(fresh / max(active, 1) * 100, 1)" in coverage_source
|
||||
assert "FROM products p\n JOIN LATERAL" in coverage_source
|
||||
assert "WHERE p.status = 'ACTIVE'" in coverage_source
|
||||
|
||||
@@ -129,6 +131,7 @@ def test_competitor_review_queue_is_canonical_unit_price_handoff():
|
||||
assert "competitor_intel.review_queue" in daily_template
|
||||
assert "coverage.fresh_matches" in growth_template
|
||||
assert "coverage.fresh_match_rate" in growth_template
|
||||
assert "coverage.decision_ready_rate" in growth_template
|
||||
assert "coverage.stale_matches" in growth_template
|
||||
assert "coverage.unit_comparable_count" in growth_template
|
||||
assert "coverage.rescore_accepted_count" in growth_template
|
||||
@@ -139,6 +142,7 @@ def test_competitor_review_queue_is_canonical_unit_price_handoff():
|
||||
assert "comp_coverage.rescore_accepted_count" in daily_template
|
||||
assert "重算待人工覆核" in daily_template
|
||||
assert "comp_coverage.stale_matches" in daily_template
|
||||
assert "comp_coverage.decision_ready_rate" in daily_template
|
||||
|
||||
|
||||
def test_competitor_review_filters_split_low_score_operational_buckets():
|
||||
|
||||
@@ -542,6 +542,7 @@ def test_ai_product_pick_agent_uses_real_competitor_data_and_dashboard_action():
|
||||
assert "JSON.stringify({ limit: 50 })" in template
|
||||
assert "完成後會重算 AI 挑品清單" in route_source
|
||||
assert "match_rate" in route_source
|
||||
assert "decision_ready_rate" in route_source
|
||||
assert "product_pick_count" in route_source
|
||||
dashboard_route_source = (ROOT / "routes/dashboard_routes.py").read_text(encoding="utf-8")
|
||||
dashboard_template = (ROOT / "templates/dashboard_v2.html").read_text(encoding="utf-8")
|
||||
@@ -586,6 +587,7 @@ def test_ai_product_pick_agent_uses_real_competitor_data_and_dashboard_action():
|
||||
assert "formatBackfillCoverageSummary" in dashboard_js
|
||||
assert "formatBackfillLimitedCount" in dashboard_js
|
||||
assert "status.coverage" in dashboard_js
|
||||
assert "可用比價 ${formatBackfillRate(coverage.decision_ready_rate)}" in dashboard_js
|
||||
assert "待刷新 ${formatBackfillCount(coverage.stale_matches)}" in dashboard_js
|
||||
assert "待補抓 ${formatBackfillCount(coverage.pending)}" in dashboard_js
|
||||
assert "可重評 ${formatBackfillLimitedCount(preview.candidate_count" in dashboard_js
|
||||
|
||||
@@ -43,6 +43,8 @@ def test_webcrumbs_host_data_maps_price_alert_exact_rows(monkeypatch):
|
||||
"match_rate": 12.3,
|
||||
"fresh_matches": 70,
|
||||
"fresh_match_rate": 79.5,
|
||||
"decision_ready_matches": 70,
|
||||
"decision_ready_rate": 9.8,
|
||||
"stale_matches": 18,
|
||||
"pending": 612,
|
||||
},
|
||||
@@ -62,6 +64,9 @@ def test_webcrumbs_host_data_maps_price_alert_exact_rows(monkeypatch):
|
||||
assert payload["metadata"]["fetches_external"] is False
|
||||
assert payload["metadata"]["matched_count"] == 88
|
||||
assert payload["metadata"]["coverage_rate"] == 12.3
|
||||
assert payload["metadata"]["identity_coverage_rate"] == 12.3
|
||||
assert payload["metadata"]["decision_ready_count"] == 70
|
||||
assert payload["metadata"]["decision_ready_rate"] == 9.8
|
||||
assert payload["metadata"]["fresh_match_count"] == 70
|
||||
assert payload["metadata"]["fresh_match_rate"] == 79.5
|
||||
assert payload["metadata"]["stale_match_count"] == 18
|
||||
@@ -82,6 +87,7 @@ def test_webcrumbs_host_data_uses_empty_state_without_risks(monkeypatch):
|
||||
assert payload["marketSnapshot"][0]["freshness_status"] == "no_current_exact_risk"
|
||||
assert payload["aiCandidate"]["release_status"] == "blocked"
|
||||
assert payload["metadata"]["matched_count"] == 3
|
||||
assert payload["metadata"]["decision_ready_count"] == 1
|
||||
assert payload["metadata"]["fresh_match_count"] == 1
|
||||
assert payload["metadata"]["stale_match_count"] == 2
|
||||
assert payload["metadata"]["pending_match_count"] == 9
|
||||
|
||||
Reference in New Issue
Block a user