Add domain-wide blacklist and whitelist functionality
This commit is contained in:
parent
aa8a74ba67
commit
bdbd46ebd4
14 changed files with 930 additions and 305 deletions
|
|
@ -3,6 +3,8 @@ from __future__ import annotations
|
|||
import asyncio
|
||||
import os
|
||||
import tempfile
|
||||
from datetime import UTC
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from typing import LiteralString
|
||||
from unittest.mock import MagicMock
|
||||
|
|
@ -190,6 +192,67 @@ def test_get_entry_delivery_mode_falls_back_to_legacy_embed_flag() -> None:
|
|||
assert result == "text"
|
||||
|
||||
|
||||
@patch("discord_rss_bot.feeds.execute_webhook")
|
||||
@patch("discord_rss_bot.feeds.create_text_webhook")
|
||||
@patch("discord_rss_bot.feeds.should_be_sent", return_value=True)
|
||||
@patch("discord_rss_bot.feeds.has_white_tags", return_value=True)
|
||||
@patch("discord_rss_bot.feeds.entry_should_be_skipped", return_value=True)
|
||||
def test_send_to_discord_whitelist_precedence_over_blacklist(
|
||||
mock_entry_should_be_skipped: MagicMock,
|
||||
mock_has_white_tags: MagicMock,
|
||||
mock_should_be_sent: MagicMock,
|
||||
mock_create_text_webhook: MagicMock,
|
||||
mock_execute_webhook: MagicMock,
|
||||
) -> None:
|
||||
"""When whitelist is configured and matches, entry should still be sent even if blacklist matches."""
|
||||
reader = MagicMock()
|
||||
feed = MagicMock()
|
||||
feed.url = "https://example.com/feed.xml"
|
||||
|
||||
entry = MagicMock()
|
||||
entry.id = "entry-1"
|
||||
entry.feed = feed
|
||||
entry.feed_url = feed.url
|
||||
entry.added = datetime.now(tz=UTC)
|
||||
|
||||
reader.get_entries.return_value = [entry]
|
||||
|
||||
def get_tag_side_effect(
|
||||
resource: str | Feed,
|
||||
key: str,
|
||||
default: str | None = None,
|
||||
) -> str | None:
|
||||
"""Side effect function for reader.get_tag to return specific values based on the key.
|
||||
|
||||
Args:
|
||||
resource: The resource for which the tag is being requested (ignored in this case).
|
||||
key: The tag key being requested.
|
||||
default: The default value to return if the key is not found.
|
||||
|
||||
Returns:
|
||||
- "https://discord.test/webhook" for "webhook" key
|
||||
- "text" for "delivery_mode" key
|
||||
- default value for any other key
|
||||
"""
|
||||
if key == "webhook":
|
||||
return "https://discord.test/webhook"
|
||||
if key == "delivery_mode":
|
||||
return "text"
|
||||
return default
|
||||
|
||||
reader.get_tag.side_effect = get_tag_side_effect
|
||||
|
||||
webhook = MagicMock()
|
||||
mock_create_text_webhook.return_value = webhook
|
||||
|
||||
send_to_discord(reader=reader, feed=feed, do_once=True)
|
||||
|
||||
mock_has_white_tags.assert_called_once_with(reader, feed)
|
||||
mock_should_be_sent.assert_called_once_with(reader, entry)
|
||||
mock_entry_should_be_skipped.assert_not_called()
|
||||
mock_execute_webhook.assert_called_once_with(webhook, entry, reader=reader)
|
||||
|
||||
|
||||
@patch("discord_rss_bot.feeds.execute_webhook")
|
||||
@patch("discord_rss_bot.feeds.create_text_webhook")
|
||||
@patch("discord_rss_bot.feeds.create_hoyolab_webhook")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue