diff --git a/desktop/src/__tests__/generalSettings.test.tsx b/desktop/src/__tests__/generalSettings.test.tsx index 00025e98..7d4e5c65 100644 --- a/desktop/src/__tests__/generalSettings.test.tsx +++ b/desktop/src/__tests__/generalSettings.test.tsx @@ -58,6 +58,11 @@ vi.mock('../api/providers', () => ({ vi.mock('../lib/desktopNotifications', () => desktopNotificationsMock) vi.mock('../components/chat/clipboard', () => clipboardMock) +vi.mock('qrcode', () => ({ + default: { + toDataURL: vi.fn().mockResolvedValue('data:image/png;base64,h5qr'), + }, +})) vi.mock('../components/settings/ClaudeOfficialLogin', () => ({ ClaudeOfficialLogin: () =>
, @@ -160,9 +165,38 @@ describe('Settings > General tab', () => { setWebSearch: vi.fn().mockImplementation(async (webSearch) => { useSettingsStore.setState({ webSearch }) }), - enableH5Access: vi.fn().mockResolvedValue('h5_default_generated_token'), - disableH5Access: vi.fn(), - regenerateH5AccessToken: vi.fn().mockResolvedValue('h5_default_regenerated_token'), + enableH5Access: vi.fn().mockImplementation(async () => { + const current = useSettingsStore.getState().h5Access + useSettingsStore.setState({ + h5Access: { + ...current, + enabled: true, + tokenPreview: 'h5_default_generated_token'.slice(0, 8), + }, + }) + return 'h5_default_generated_token' + }), + disableH5Access: vi.fn().mockImplementation(async () => { + const current = useSettingsStore.getState().h5Access + useSettingsStore.setState({ + h5Access: { + ...current, + enabled: false, + tokenPreview: null, + }, + }) + }), + regenerateH5AccessToken: vi.fn().mockImplementation(async () => { + const current = useSettingsStore.getState().h5Access + useSettingsStore.setState({ + h5Access: { + ...current, + enabled: true, + tokenPreview: 'h5_default_regenerated_token'.slice(0, 8), + }, + }) + return 'h5_default_regenerated_token' + }), updateH5AccessSettings: vi.fn(), }) @@ -291,19 +325,99 @@ describe('Settings > General tab', () => { }) }) - it('renders the H5 section without token controls while access is open', () => { + it('renders the H5 section with access disabled by default', () => { render(+ {h5GeneratedToken + ? t('settings.general.h5AccessQrHint') + : t('settings.general.h5AccessQrRefreshHint')} +
+ {h5LaunchUrl && ( +{t('settings.general.h5AccessSafetyNote')}
@@ -1859,6 +2068,20 @@ function GeneralSettings() {