- Add guard to staff redirect to skip redirect if already on /admin route
This prevents <Navigate to="/admin"> from firing when already at /admin,
which was causing the admin layout to not render in tests
- Wrap renderApp() in act() to properly flush vi.fn() mock state updates
- Use queryAllByText instead of getByText for nav link checks to handle
duplicate text elements (nav links vs page headings)
Co-Authored-By: Paperclip <noreply@paperclip.ing>
setIsInitializing(false) was in .finally() which fires BEFORE the
outer .then() chain completes, causing redirect to fire before
setSession was called. Now setIsInitializing(false) is called
explicitly inside success/error handlers after setSession completes.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Add 5 new E2E test files covering portal auth, data integrity, services deduplication, reports, and console health. These tests run against the Docker Compose stack with mocked API responses.
Gro-306 corrective action: automated regression tests to catch portal auth bugs before UAT.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
CustomerPortal now redirects to /login after session init completes
with no valid session, preventing portal chrome from rendering for
unauthenticated users. Dashboard !sessionId branch uses Navigate
redirect instead of dead-end UI. Staff redirect in App.tsx verified.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Since Kubernetes Job spec.template is immutable, Flux cannot update a
completed Job with a new image tag. This change ensures the CI workflow
updates both the image newTag AND the Job metadata.name to include the
short SHA (e.g., migrate-schema-026a2c8), making each deploy's Job
unique and allowing Flux to reconcile consecutive deploys without
immutable field errors.
Co-Authored-By: Paperclip <noreply@paperclip.ing>