diff --git a/frontend/src/pages/SetupPage.tsx b/frontend/src/pages/SetupPage.tsx index 329fe89a..515c92b1 100644 --- a/frontend/src/pages/SetupPage.tsx +++ b/frontend/src/pages/SetupPage.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; import { Navigate, useNavigate } from 'react-router-dom'; -import { useQuery } from '@tanstack/react-query'; +import { useQuery, useQueryClient } from '@tanstack/react-query'; import { Key, Mail, Lock, Eye, EyeOff, AlertCircle, ArrowLeft, ArrowRight, Copy, Check, ExternalLink, Bug, Lightbulb, Star, Coffee, ShieldOff, Users, MessageSquare } from 'lucide-react'; import type { LucideIcon } from 'lucide-react'; import { toast } from 'react-toastify'; @@ -73,6 +73,7 @@ export const SetupPage: React.FC = () => { const { t } = useTranslation(); const navigate = useNavigate(); const { login } = useAdminAuth(); + const queryClient = useQueryClient(); const { data: status, isLoading: statusLoading, isError: statusError } = useQuery({ queryKey: ['setup-status'], @@ -300,7 +301,7 @@ export const SetupPage: React.FC = () => { const enableUsageReporting = async () => { setIsEnablingUsageReporting(true); try { - await productUsageService.enable(); + queryClient.setQueryData(['productUsage'], await productUsageService.enable()); toast.success(t('setup.usageReporting.enabled')); } catch { toast.warn(t('setup.usageReporting.enableFailed')); diff --git a/frontend/src/pages/__tests__/SetupPage.usageReporting.test.tsx b/frontend/src/pages/__tests__/SetupPage.usageReporting.test.tsx index 0b23a258..bdd7798b 100644 --- a/frontend/src/pages/__tests__/SetupPage.usageReporting.test.tsx +++ b/frontend/src/pages/__tests__/SetupPage.usageReporting.test.tsx @@ -43,8 +43,10 @@ beforeEach(() => { }); afterEach(cleanup); +let client: QueryClient; async function reachInvitation() { - render( + client = new QueryClient({ defaultOptions: { queries: { retry: false } } }); + render( ); fireEvent.change(await screen.findByLabelText('setup.tokenLabel'), { target: { value: 'test-token' } }); @@ -82,6 +84,7 @@ it('uses the full settings disclosure and configured collector before accepting fireEvent.click(dialog.getByRole('button', { name: 'productUsage.enable' })); await screen.findByText('setup.community.mission'); expect(usage.enable).toHaveBeenCalledTimes(1); + expect(client.getQueryData(['productUsage'])).toMatchObject({ status: 'active' }); }); it('skipping the invitation never enables reporting', async () => {