refactor(openclaw): 抽出選單鍵盤 builders
All checks were successful
CD Pipeline / deploy (push) Successful in 1m46s
All checks were successful
CD Pipeline / deploy (push) Successful in 1m46s
This commit is contained in:
63
tests/test_openclaw_bot_menu_keyboards.py
Normal file
63
tests/test_openclaw_bot_menu_keyboards.py
Normal file
@@ -0,0 +1,63 @@
|
||||
from datetime import timezone, timedelta
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def test_sales_menu_uses_injected_latest_date():
|
||||
from services.openclaw_bot import menu_keyboards
|
||||
|
||||
menu_keyboards.configure_menu_keyboards(
|
||||
latest_date_provider=lambda: "2026/04/30",
|
||||
goals={},
|
||||
taipei_tz=timezone(timedelta(hours=8)),
|
||||
)
|
||||
|
||||
rows = menu_keyboards._submenu_sales()
|
||||
|
||||
assert rows[0][0]["callback_data"] == "cmd:sales:2026/04/30"
|
||||
assert rows[0][0]["text"] == "📊 今日 (04/30)"
|
||||
assert rows[0][1]["callback_data"] == "cmd:sales:2026/04/29"
|
||||
assert rows[-1] == menu_keyboards._BACK
|
||||
|
||||
|
||||
def test_goal_menu_uses_injected_goal_state():
|
||||
from services.openclaw_bot import menu_keyboards
|
||||
|
||||
menu_keyboards.configure_menu_keyboards(goals={"daily": 1_500_000, "monthly": 0})
|
||||
|
||||
rows = menu_keyboards._submenu_goals()
|
||||
|
||||
assert rows[1][0]["text"] == "日目標 (150萬)"
|
||||
assert rows[1][1]["text"] == "月目標 (未設)"
|
||||
|
||||
|
||||
def test_category_menu_and_submenu_registry_are_stable():
|
||||
from services.openclaw_bot import menu_keyboards
|
||||
|
||||
menu_keyboards.configure_menu_keyboards(latest_date_provider=lambda: "2026/04/30")
|
||||
|
||||
rows = menu_keyboards._submenu_category()
|
||||
|
||||
assert rows[0][0]["callback_data"] == "cmd:catdetail:美妝保養:2026/04/30"
|
||||
assert rows[-2] == [{"text": "🗂 全分類清單", "callback_data": "cmd:category:2026/04/30"}]
|
||||
assert rows[-1] == menu_keyboards._BACK
|
||||
assert set(menu_keyboards._SUBMENUS) >= {
|
||||
"main",
|
||||
"sales",
|
||||
"products",
|
||||
"goals",
|
||||
"analysis",
|
||||
"trend",
|
||||
"reports",
|
||||
"market",
|
||||
"competitor",
|
||||
"competitor_ppt",
|
||||
"category",
|
||||
}
|
||||
|
||||
|
||||
def test_openclaw_routes_import_menu_keyboard_helpers():
|
||||
route_source = Path("routes/openclaw_bot_routes.py").read_text(encoding="utf-8")
|
||||
|
||||
assert "from services.openclaw_bot.menu_keyboards import" in route_source
|
||||
assert "configure_menu_keyboards(latest_date_provider=latest_date" in route_source
|
||||
assert "def main_menu_keyboard():" not in route_source
|
||||
Reference in New Issue
Block a user