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
|
-
- Add feed
-
- |
+ {% if has_webhooks() %}
+
+ Add feed
+
+ |
+ {% endif %}
Webhooks
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"