mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 23:47:41 +08:00
refactor: unify subscription deletion transactions
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
"""订阅消息交互删除动作的应用边界测试。"""
|
||||
|
||||
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"
|
||||
Reference in New Issue
Block a user