diff --git a/discord_rss_bot/main.py b/discord_rss_bot/main.py index 85354bb..197d31a 100644 --- a/discord_rss_bot/main.py +++ b/discord_rss_bot/main.py @@ -114,6 +114,13 @@ def get_reader_dependency() -> Reader: return get_reader() +def has_webhooks() -> bool: + """Return whether at least one global webhook is configured.""" + reader: Reader = get_reader() + webhooks = list(reader.get_tag((), "webhooks", [])) + return bool(webhooks) + + # Time constants for relative time formatting SECONDS_PER_MINUTE = 60 SECONDS_PER_HOUR = 3600 @@ -185,6 +192,7 @@ templates.env.filters["encode_url"] = lambda url: urllib.parse.quote(str(url)) i templates.env.filters["discord_markdown"] = markdownify # pyright: ignore[reportArgumentType] templates.env.filters["relative_time"] = relative_time templates.env.globals["get_backup_path"] = get_backup_path # pyright: ignore[reportArgumentType] +templates.env.globals["has_webhooks"] = has_webhooks # pyright: ignore[reportArgumentType] @app.post("/add_webhook") diff --git a/discord_rss_bot/templates/nav.html b/discord_rss_bot/templates/nav.html index 7442554..2286744 100644 --- a/discord_rss_bot/templates/nav.html +++ b/discord_rss_bot/templates/nav.html @@ -12,10 +12,12 @@ Feeds - - + {% if has_webhooks() %} + + + {% endif %} diff --git a/tests/test_main.py b/tests/test_main.py index 7766500..6c88005 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -25,6 +25,7 @@ if TYPE_CHECKING: import pytest from httpx import Response from reader import Entry + from reader import Reader client: TestClient = TestClient(app) webhook_name: str = "Hello, I am a webhook!" @@ -197,6 +198,28 @@ def test_add_page_shows_global_default_delivery_mode_hint() -> None: assert "text" in response.text +def test_navbar_add_feed_visible_only_when_webhooks_exist() -> None: + reader: Reader = get_reader_dependency() + reader.set_tag((), "webhooks", []) # pyright: ignore[reportArgumentType] + + response: Response = client.get(url="/") + assert response.status_code == 200, f"/ failed: {response.text}" + assert 'Add feed' not in response.text + + response = client.post( + url="/add_webhook", + data={"webhook_name": webhook_name, "webhook_url": webhook_url}, + ) + assert response.status_code == 200, f"Failed to add webhook: {response.text}" + + response = client.get(url="/") + assert response.status_code == 200, f"/ failed: {response.text}" + assert 'Add feed' in response.text + + cleanup_response: Response = client.post(url="/delete_webhook", data={"webhook_url": webhook_url}) + assert cleanup_response.status_code == 200, f"Failed to clean up webhook: {cleanup_response.text}" + + def test_c3kay_feed_delivery_mode_toggle_routes_update_stored_tags() -> None: reader = get_reader_dependency() c3kay_feed_url = "https://feeds.c3kay.de/hoyolab-ui-toggle-test.xml"