fix(setup): refresh usage state after accepting consent

This commit is contained in:
Paul Nothaft
2026-09-08 17:25:20 +02:00
parent 9168bdd504
commit a5f7b38e02
2 changed files with 7 additions and 3 deletions
+3 -2
View File
@@ -1,6 +1,6 @@
import React, { useState } from 'react'; import React, { useState } from 'react';
import { Navigate, useNavigate } from 'react-router-dom'; 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 { 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 type { LucideIcon } from 'lucide-react';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
@@ -73,6 +73,7 @@ export const SetupPage: React.FC = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const navigate = useNavigate(); const navigate = useNavigate();
const { login } = useAdminAuth(); const { login } = useAdminAuth();
const queryClient = useQueryClient();
const { data: status, isLoading: statusLoading, isError: statusError } = useQuery({ const { data: status, isLoading: statusLoading, isError: statusError } = useQuery({
queryKey: ['setup-status'], queryKey: ['setup-status'],
@@ -300,7 +301,7 @@ export const SetupPage: React.FC = () => {
const enableUsageReporting = async () => { const enableUsageReporting = async () => {
setIsEnablingUsageReporting(true); setIsEnablingUsageReporting(true);
try { try {
await productUsageService.enable(); queryClient.setQueryData(['productUsage'], await productUsageService.enable());
toast.success(t('setup.usageReporting.enabled')); toast.success(t('setup.usageReporting.enabled'));
} catch { } catch {
toast.warn(t('setup.usageReporting.enableFailed')); toast.warn(t('setup.usageReporting.enableFailed'));
@@ -43,8 +43,10 @@ beforeEach(() => {
}); });
afterEach(cleanup); afterEach(cleanup);
let client: QueryClient;
async function reachInvitation() { async function reachInvitation() {
render(<QueryClientProvider client={new QueryClient({ defaultOptions: { queries: { retry: false } } })}> client = new QueryClient({ defaultOptions: { queries: { retry: false } } });
render(<QueryClientProvider client={client}>
<MemoryRouter><SetupPage /></MemoryRouter> <MemoryRouter><SetupPage /></MemoryRouter>
</QueryClientProvider>); </QueryClientProvider>);
fireEvent.change(await screen.findByLabelText('setup.tokenLabel'), { target: { value: 'test-token' } }); 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' })); fireEvent.click(dialog.getByRole('button', { name: 'productUsage.enable' }));
await screen.findByText('setup.community.mission'); await screen.findByText('setup.community.mission');
expect(usage.enable).toHaveBeenCalledTimes(1); expect(usage.enable).toHaveBeenCalledTimes(1);
expect(client.getQueryData(['productUsage'])).toMatchObject({ status: 'active' });
}); });
it('skipping the invitation never enables reporting', async () => { it('skipping the invitation never enables reporting', async () => {