fix(ui): harden power user mode auth checks

This commit is contained in:
Tam Nhu Tran committed 2026-03-26 15:19:59 -04:00
1 parent a15c729079
commit 604f9fc78a
3 files changed
+163 -55

No files matched your search

@@ -2,6 +2,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import i18n from '@/lib/i18n';
import { AddAccountDialog } from '@/components/account/add-account-dialog';
import { render, screen, userEvent, waitFor } from '@tests/setup/test-utils';
import { toast } from 'sonner';
const authMocks = vi.hoisted(() => ({
startAuth: vi.fn(),
@@ -35,6 +36,14 @@ vi.mock('@/hooks/use-cliproxy', () => ({
}),
}));
vi.mock('sonner', () => ({
toast: {
success: vi.fn(),
error: vi.fn(),
warning: vi.fn(),
},
}));
function createJsonResponse(body: Record<string, unknown>): Response {
return new Response(JSON.stringify(body), {
status: 200,
@@ -42,7 +51,7 @@ function createJsonResponse(body: Record<string, unknown>): Response {
});
}
describe('AddAccountDialog Gemini power user mode', () => {
describe('AddAccountDialog power user mode', () => {
const fetchMock = vi.fn<typeof fetch>();
beforeEach(async () => {
@@ -101,4 +110,66 @@ describe('AddAccountDialog Gemini power user mode', () => {
expect(screen.queryByText('Power user mode enabled')).not.toBeInTheDocument();
expect(authMocks.startAuth).not.toHaveBeenCalled();
});
it('surfaces a power user mode fetch failure and fails closed for Gemini', async () => {
fetchMock.mockRejectedValue(new Error('network down'));
render(
<AddAccountDialog open onClose={vi.fn()} provider="gemini" displayName="Gemini" />
);
await waitFor(() =>
expect(toast.error).toHaveBeenCalledWith(
'Failed to load power user mode settings. Check Settings > Proxy and try again.'
)
);
expect(
screen.getByText('Failed to load power user mode settings. Check Settings > Proxy and try again.')
).toBeInTheDocument();
expect(screen.getByText(/Type exact phrase to continue/i)).toBeInTheDocument();
expect(screen.getByRole('button', { name: 'Authenticate' })).toBeDisabled();
});
it('skips the AGY responsibility checklist when power user mode is enabled', async () => {
fetchMock.mockResolvedValue(createJsonResponse({ antigravityAckBypass: true }));
render(<AddAccountDialog open onClose={vi.fn()} provider="agy" displayName="AGY" />);
await waitFor(() =>
expect(fetchMock).toHaveBeenCalledWith('/api/settings/auth/antigravity-risk')
);
const authenticateButton = screen.getByRole('button', { name: 'Authenticate' });
await waitFor(() => expect(authenticateButton).toBeEnabled());
expect(screen.getByText('Power user mode enabled')).toBeInTheDocument();
expect(screen.queryByText(/Step 1: I reviewed issue #509/i)).not.toBeInTheDocument();
await userEvent.click(authenticateButton);
expect(authMocks.startAuth).toHaveBeenCalledWith(
'agy',
expect.objectContaining({
riskAcknowledgement: undefined,
})
);
});
it('keeps the AGY responsibility checklist when power user mode is disabled', async () => {
fetchMock.mockResolvedValue(createJsonResponse({ antigravityAckBypass: false }));
render(<AddAccountDialog open onClose={vi.fn()} provider="agy" displayName="AGY" />);
await waitFor(() =>
expect(fetchMock).toHaveBeenCalledWith('/api/settings/auth/antigravity-risk')
);
const authenticateButton = screen.getByRole('button', { name: 'Authenticate' });
await waitFor(() => expect(authenticateButton).toBeDisabled());
expect(screen.getByText(/Step 1: I reviewed issue #509/i)).toBeInTheDocument();
expect(screen.queryByText('Power user mode enabled')).not.toBeInTheDocument();
expect(authMocks.startAuth).not.toHaveBeenCalled();
});
});