From bd338a2ff949fd977d22362a5248cd55e0e0f856 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 7 Sep 2026 21:42:29 +0000 Subject: [PATCH 1/2] fix(events): use terse route availability copy The event URL field said "This route is available." / "This route is already taken." - wording issue #434 flagged as jargon-adjacent. The check/alert icon and green/red colour already carry success and failure, so the message only needs the status word. Closes #434 Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_016kQ1Dp7xRj9mVNuYGeVYB2 --- buzz/api/events/services.py | 10 ++++------ e2e/tests/manage-event.spec.ts | 4 ++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/buzz/api/events/services.py b/buzz/api/events/services.py index ec7a327b..e3509ce3 100644 --- a/buzz/api/events/services.py +++ b/buzz/api/events/services.py @@ -426,21 +426,19 @@ def route_availability(route: str, event: str | None = None) -> RouteAvailabilit """ route = (route or "").strip().lower() if not route: - return RouteAvailability(available=False, message=_("Enter a route.")) + return RouteAvailability(available=False, message=_("Required")) if route in RESERVED_EVENT_ROUTES: - return RouteAvailability( - available=False, message=_("'{0}' is reserved and cannot be used.").format(route) - ) + return RouteAvailability(available=False, message=_("'{0}' is reserved").format(route)) filters = {"route": route} if event: filters["name"] = ("!=", event) if frappe.db.exists("Buzz Event", filters): - return RouteAvailability(available=False, message=_("This route is already taken.")) + return RouteAvailability(available=False, message=_("Already Exists")) - return RouteAvailability(available=True, message=_("This route is available.")) + return RouteAvailability(available=True, message=_("Available")) # Buzz Event demands a category and a host, neither of which the create form asks for. diff --git a/e2e/tests/manage-event.spec.ts b/e2e/tests/manage-event.spec.ts index 528ce532..d24b38a5 100644 --- a/e2e/tests/manage-event.spec.ts +++ b/e2e/tests/manage-event.spec.ts @@ -168,11 +168,11 @@ test.describe("Claiming a route", () => { await expect(field).toBeVisible({ timeout: 15000 }) await field.fill(`free-route-${Date.now()}`) - await expect(page.getByText("This route is available.")).toBeVisible() + await expect(page.getByText("Available", { exact: true })).toBeVisible() // The shared event already answers to this one. await field.fill("test-event-e2e") - await expect(page.getByText("This route is already taken.")).toBeVisible() + await expect(page.getByText("Already Exists", { exact: true })).toBeVisible() // Reserved so an event cannot shadow /b/account. await field.fill("account") From 9e2a0da308c39dde688e2d87a1125c1118e66e9f Mon Sep 17 00:00:00 2001 From: Harsh Tandiya Date: Tue, 8 Sep 2026 11:30:09 +0530 Subject: [PATCH 2/2] fix(events): collapse route availability copy to two states A reserved or blank route now reads the same as a claimed one: the organiser types a different route either way, so the reason it is unavailable is noise. --- buzz/api/events/services.py | 13 +++++-------- e2e/tests/manage-event.spec.ts | 6 +++--- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/buzz/api/events/services.py b/buzz/api/events/services.py index e3509ce3..0a592980 100644 --- a/buzz/api/events/services.py +++ b/buzz/api/events/services.py @@ -425,18 +425,15 @@ def route_availability(route: str, event: str | None = None) -> RouteAvailabilit would collide. """ route = (route or "").strip().lower() - if not route: - return RouteAvailability(available=False, message=_("Required")) - - if route in RESERVED_EVENT_ROUTES: - return RouteAvailability(available=False, message=_("'{0}' is reserved").format(route)) - filters = {"route": route} if event: filters["name"] = ("!=", event) - if frappe.db.exists("Buzz Event", filters): - return RouteAvailability(available=False, message=_("Already Exists")) + # A reserved route and a blank one are both unavailable, and the field says so the + # same way a claimed one does — the reason is not the organiser's problem to fix. + taken = not route or route in RESERVED_EVENT_ROUTES or frappe.db.exists("Buzz Event", filters) + if taken: + return RouteAvailability(available=False, message=_("Already exists")) return RouteAvailability(available=True, message=_("Available")) diff --git a/e2e/tests/manage-event.spec.ts b/e2e/tests/manage-event.spec.ts index d24b38a5..a347a02c 100644 --- a/e2e/tests/manage-event.spec.ts +++ b/e2e/tests/manage-event.spec.ts @@ -172,11 +172,11 @@ test.describe("Claiming a route", () => { // The shared event already answers to this one. await field.fill("test-event-e2e") - await expect(page.getByText("Already Exists", { exact: true })).toBeVisible() + await expect(page.getByText("Already exists", { exact: true })).toBeVisible() - // Reserved so an event cannot shadow /b/account. + // Reserved so an event cannot shadow /b/account, and it reads the same as a claimed one. await field.fill("account") - await expect(page.getByText("reserved")).toBeVisible() + await expect(page.getByText("Already exists", { exact: true })).toBeVisible() }) })