Share review envelopes with OpenClaw and PPT
This commit is contained in:
@@ -100,7 +100,8 @@ def test_competitor_review_queue_is_canonical_unit_price_handoff():
|
||||
growth_template = (ROOT / "templates" / "growth_analysis.html").read_text(encoding="utf-8")
|
||||
|
||||
assert "def fetch_competitor_review_queue" in source
|
||||
assert "\"review_queue\": fetch_competitor_review_queue" in source
|
||||
assert "review_queue = fetch_competitor_review_queue" in source
|
||||
assert "\"review_queue\": review_queue" in source
|
||||
assert "\"unit_comparable_count\"" in source
|
||||
assert "\"rescore_accepted_count\"" in source
|
||||
assert "manual_review_summary" in source
|
||||
@@ -219,6 +220,54 @@ def test_rescore_accepted_review_item_has_actionable_decision_envelope():
|
||||
assert any(evidence["metric"] == "candidate_gap_pct" for evidence in envelope["evidence"])
|
||||
|
||||
|
||||
def test_review_decision_brief_is_shared_by_openclaw_and_ppt():
|
||||
from services.competitor_intel_repository import (
|
||||
_format_competitor_review_item,
|
||||
summarize_review_decision_envelopes,
|
||||
)
|
||||
|
||||
item = _format_competitor_review_item({
|
||||
"sku": "10922465",
|
||||
"name": "【Herbacin 德國小甘菊】小甘菊1號護手霜20ml",
|
||||
"momo_price": 99,
|
||||
"attempt_status": "rescore_accepted_current",
|
||||
"candidate_count": 1,
|
||||
"best_competitor_product_id": "DDAO4C-A79050612",
|
||||
"best_competitor_product_name": "小甘菊經典護手霜20ml",
|
||||
"best_competitor_price": 89,
|
||||
"best_match_score": 0.872,
|
||||
"match_diagnostic_json": {
|
||||
"match_type": "exact",
|
||||
"price_basis": "total_price",
|
||||
"alert_tier": "identity_review",
|
||||
},
|
||||
})
|
||||
|
||||
brief = summarize_review_decision_envelopes([item], limit=5)
|
||||
|
||||
assert brief["hitl_count"] == 1
|
||||
assert brief["auto_execute_blocked_count"] == 1
|
||||
assert brief["severity_counts"]
|
||||
assert brief["data_quality_counts"] == {"complete": 1}
|
||||
assert "人工覆核後採用同款" in brief["text"]
|
||||
assert "HITL" in brief["text"]
|
||||
assert "DDAO4C-A79050612" in brief["text"]
|
||||
|
||||
repo_source = (ROOT / "services" / "competitor_intel_repository.py").read_text(encoding="utf-8")
|
||||
openclaw_source = (ROOT / "services" / "openclaw_strategist_service.py").read_text(encoding="utf-8")
|
||||
ppt_source = (ROOT / "services" / "ppt_generator.py").read_text(encoding="utf-8")
|
||||
bot_source = (ROOT / "routes" / "openclaw_bot_routes.py").read_text(encoding="utf-8")
|
||||
|
||||
assert "\"review_decision_brief\": summarize_review_decision_envelopes" in repo_source
|
||||
assert "summarize_review_decision_envelopes" in openclaw_source
|
||||
assert "review_decision_text" in openclaw_source
|
||||
assert "PChome 覆核決策信封(HITL,不可自動寫正式價差)" in openclaw_source
|
||||
assert "SUM(CASE WHEN attempt_status IN ('unit_comparable'" not in openclaw_source
|
||||
assert "review_decision_brief" in bot_source
|
||||
assert "覆核決策信封(HITL,不可自動寫正式價差)" in bot_source
|
||||
assert "覆核決策信封(HITL)" in ppt_source
|
||||
|
||||
|
||||
def test_competitor_ppt_prompt_uses_neutral_ewooc_viewpoint():
|
||||
source = (ROOT / "routes" / "openclaw_bot_routes.py").read_text(encoding="utf-8")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user