Add has_webhooks function and update navbar visibility based on if webhooks exist

This commit is contained in:
Joakim Hellsén 2026-04-10 20:55:35 +02:00
commit 9b685e4980
Signed by: Joakim Hellsén
SSH key fingerprint: SHA256:/9h/CsExpFp+PRhsfA0xznFx2CGfTT5R/kpuFfUgEQk
3 changed files with 37 additions and 4 deletions

View file

@ -114,6 +114,13 @@ def get_reader_dependency() -> Reader:
return get_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 # Time constants for relative time formatting
SECONDS_PER_MINUTE = 60 SECONDS_PER_MINUTE = 60
SECONDS_PER_HOUR = 3600 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["discord_markdown"] = markdownify # pyright: ignore[reportArgumentType]
templates.env.filters["relative_time"] = relative_time templates.env.filters["relative_time"] = relative_time
templates.env.globals["get_backup_path"] = get_backup_path # pyright: ignore[reportArgumentType] 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") @app.post("/add_webhook")

View file

@ -12,10 +12,12 @@
<a class="nav-link" href="/">Feeds</a> <a class="nav-link" href="/">Feeds</a>
</li> </li>
<li class="nav-item nav-link d-none d-md-block">|</li> <li class="nav-item nav-link d-none d-md-block">|</li>
<li class="nav-item"> {% if has_webhooks() %}
<a class="nav-link" href="/add">Add feed</a> <li class="nav-item">
</li> <a class="nav-link" href="/add">Add feed</a>
<li class="nav-item nav-link d-none d-md-block">|</li> </li>
<li class="nav-item nav-link d-none d-md-block">|</li>
{% endif %}
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="/webhooks">Webhooks</a> <a class="nav-link" href="/webhooks">Webhooks</a>
</li> </li>

View file

@ -25,6 +25,7 @@ if TYPE_CHECKING:
import pytest import pytest
from httpx import Response from httpx import Response
from reader import Entry from reader import Entry
from reader import Reader
client: TestClient = TestClient(app) client: TestClient = TestClient(app)
webhook_name: str = "Hello, I am a webhook!" 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 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 '<a class="nav-link" href="/add">Add feed</a>' 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 '<a class="nav-link" href="/add">Add feed</a>' 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: def test_c3kay_feed_delivery_mode_toggle_routes_update_stored_tags() -> None:
reader = get_reader_dependency() reader = get_reader_dependency()
c3kay_feed_url = "https://feeds.c3kay.de/hoyolab-ui-toggle-test.xml" c3kay_feed_url = "https://feeds.c3kay.de/hoyolab-ui-toggle-test.xml"