fix(frontend): confirm modal, settings display, race guard, and test coverage

- S1: Replace window.confirm() with AppConfirmModal for delete actions
- S4: Add formatHours helper to avoid ugly decimals in settings hints
- W5: Add generation counter to SettingsAdminPanel to prevent stale
  async results when section changes rapidly
- S7: Remove unused ApiRequestError import from useScholarBulkActions
- S2: Add error-path tests for bulk delete/toggle network failures
- S3: Add CSRF boundary tests for bulk-delete and bulk-toggle endpoints
This commit is contained in:
Justin Visser 2026-03-07 18:00:59 +01:00
parent f8e3098fc3
commit f501ea4f94
8 changed files with 181 additions and 33 deletions

View file

@ -53,12 +53,12 @@ def _parse_ids_param(ids: str | None) -> list[int] | None:
return None
try:
return [int(p) for p in parts]
except ValueError:
except ValueError as exc:
raise ApiException(
status_code=400,
code="invalid_ids_param",
message="The 'ids' parameter must be a comma-separated list of integers.",
)
) from exc
@router.get(