""" 订阅消息交互删除动作的应用边界测试。 """ from types import SimpleNamespace from app.application.messaging.subscribe import SubscribeInteractionHandler class _Repository: """ 只提供消息展示所需读取能力的订阅仓储替身。 """ def __init__(self, subscribes): """ 按订阅 ID 保存测试快照。 """ self._subscribes = subscribes def get(self, subscribe_id): """ 返回指定订阅快照。 """ return self._subscribes.get(subscribe_id) def test_interaction_delete_delegates_each_existing_id_to_application_action(): """ 消息层只负责解析和展示,删除必须委托统一 Application 动作。 """ deleted_ids = [] handler = SubscribeInteractionHandler( messenger=SimpleNamespace(), actions=SimpleNamespace(), repository=_Repository({ 7: SimpleNamespace(name="电影订阅"), 8: SimpleNamespace(name="剧集订阅"), }), delete_subscription=lambda subscribe_id: deleted_ids.append(subscribe_id) or True, ) success, message = handler._delete_subscribes("7 8 9") assert success is True assert deleted_ids == [7, 8] assert message == "已删除 2 个订阅:电影订阅, 剧集订阅;未找到:9" def test_interaction_delete_reports_transaction_race_as_missing(): """ 读取后事务内目标消失时不得误报已删除。 """ handler = SubscribeInteractionHandler( messenger=SimpleNamespace(), actions=SimpleNamespace(), repository=_Repository({7: SimpleNamespace(name="电影订阅")}), delete_subscription=lambda _subscribe_id: False, ) success, message = handler._delete_subscribes("7") assert success is False assert message == "未找到订阅:7"