mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-08-15 19:14:01 +08:00
54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
from types import SimpleNamespace
|
|
|
|
import pytest
|
|
|
|
from app.api.endpoints.message import is_webpush_subscription_gone
|
|
from app.platform.config import global_vars
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def clear_push_subscriptions():
|
|
"""在每个用例前后清理跨用例共享的 Web Push 订阅。"""
|
|
with global_vars.SUBSCRIPTIONS_LOCK:
|
|
global_vars.SUBSCRIPTIONS.clear()
|
|
yield
|
|
with global_vars.SUBSCRIPTIONS_LOCK:
|
|
global_vars.SUBSCRIPTIONS.clear()
|
|
|
|
|
|
def test_push_subscription_upserts_by_endpoint():
|
|
"""相同 endpoint 的 Web Push 订阅应更新而不是重复追加。"""
|
|
global_vars.push_subscription(
|
|
{"endpoint": "https://push.example/a", "keys": {"p256dh": "old"}}
|
|
)
|
|
global_vars.push_subscription(
|
|
{"endpoint": "https://push.example/a", "keys": {"p256dh": "new"}}
|
|
)
|
|
|
|
subscriptions = global_vars.get_subscriptions()
|
|
|
|
assert len(subscriptions) == 1
|
|
assert subscriptions[0]["keys"]["p256dh"] == "new"
|
|
|
|
|
|
def test_remove_subscription_deletes_by_endpoint():
|
|
"""失效订阅应能按 endpoint 从全局订阅表删除。"""
|
|
subscription = {"endpoint": "https://push.example/a", "keys": {}}
|
|
global_vars.push_subscription(subscription)
|
|
|
|
assert global_vars.remove_subscription(subscription)
|
|
assert global_vars.get_subscriptions() == []
|
|
|
|
|
|
def test_is_webpush_subscription_gone_matches_404_and_410():
|
|
"""推送服务返回 404/410 时应识别为订阅已失效。"""
|
|
assert is_webpush_subscription_gone(
|
|
SimpleNamespace(response=SimpleNamespace(status_code=410))
|
|
)
|
|
assert is_webpush_subscription_gone(
|
|
SimpleNamespace(response=SimpleNamespace(status=404))
|
|
)
|
|
assert not is_webpush_subscription_gone(
|
|
SimpleNamespace(response=SimpleNamespace(status_code=500))
|
|
)
|