新增了Twitch、Telegram、Discord、Slack、Mattermost、WeChat、Zalo等多渠道的单元测试用例,覆盖了令牌处理、速率限制、消息去重、会话解析、格式转换、安全策略等模块 同时在测试配置中添加了测试用的OpenAI API密钥环境变量
61 lines
2.2 KiB
Python
61 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
|
|
class TestCardCarousel:
|
|
def test_build_carousel(self):
|
|
from yuxi.channels.adapters.zalo_user.cards import (
|
|
ZaloCard,
|
|
build_card_carousel,
|
|
)
|
|
|
|
card1 = ZaloCard(title="Card 1", description="First card")
|
|
card2 = ZaloCard(title="Card 2", description="Second card")
|
|
|
|
payload = build_card_carousel("conv_123", [card1, card2])
|
|
|
|
assert payload["message_type"] == "card"
|
|
assert payload["conversation_id"] == "conv_123"
|
|
assert payload["cards"]["layout"] == "carousel"
|
|
assert len(payload["cards"]["elements"]) == 2
|
|
|
|
def test_card_message_layouts(self):
|
|
from yuxi.channels.adapters.zalo_user.cards import (
|
|
CardMessage,
|
|
ZaloCard,
|
|
)
|
|
|
|
horizontal = CardMessage(cards=[ZaloCard(title="Test")], layout="horizontal")
|
|
assert horizontal.to_dict()["layout"] == "horizontal"
|
|
|
|
carousel = CardMessage(cards=[ZaloCard(title="Test")], layout="carousel")
|
|
assert carousel.to_dict()["layout"] == "carousel"
|
|
|
|
|
|
class TestCardTemplates:
|
|
def test_welcome_card(self):
|
|
from yuxi.channels.adapters.zalo_user.cards import template_welcome_card
|
|
|
|
card = template_welcome_card("MyBot", "I am an assistant.")
|
|
assert "Welcome to MyBot" in card.title
|
|
assert card.description == "I am an assistant."
|
|
|
|
def test_confirmation_card(self):
|
|
from yuxi.channels.adapters.zalo_user.cards import template_confirmation_card
|
|
|
|
card = template_confirmation_card("Delete?", confirm_data="del_ok")
|
|
assert card.title == "Delete?"
|
|
assert card.buttons is not None
|
|
|
|
def test_info_card(self):
|
|
from yuxi.channels.adapters.zalo_user.cards import template_info_card
|
|
|
|
card = template_info_card("User Info", {"name": "Alice", "age": "30"})
|
|
assert "Alice" in card.description
|
|
assert "30" in card.description
|
|
|
|
def test_product_card(self):
|
|
from yuxi.channels.adapters.zalo_user.cards import template_product_card
|
|
|
|
card = template_product_card("ProductX", "$99", buy_url="https://example.com")
|
|
assert card.title == "ProductX"
|
|
assert card.buttons is not None |