From fb640ab13f463ad3d5d183baba003a67ef5f9f09 Mon Sep 17 00:00:00 2001 From: Wonsuk Choi Date: Tue, 14 Apr 2026 02:12:38 +0900 Subject: [PATCH 1/2] test({react,preact}-query/useMutation): add single callback tests for 'onSuccess', 'onError', and 'onSettled' --- .../src/__tests__/useMutation.test.tsx | 114 ++++++++++++++++++ .../src/__tests__/useMutation.test.tsx | 114 ++++++++++++++++++ 2 files changed, 228 insertions(+) diff --git a/packages/preact-query/src/__tests__/useMutation.test.tsx b/packages/preact-query/src/__tests__/useMutation.test.tsx index a981e73c665..d5824ecc5f6 100644 --- a/packages/preact-query/src/__tests__/useMutation.test.tsx +++ b/packages/preact-query/src/__tests__/useMutation.test.tsx @@ -264,6 +264,120 @@ describe('useMutation', () => { ) }) + it('should be able to call `onSuccess` callback after successful mutate', async () => { + const callbacks: Array = [] + + function Page() { + const { mutate } = useMutation({ + mutationFn: (text: string) => sleep(10).then(() => text), + onSuccess: () => { + callbacks.push('useMutation.onSuccess') + }, + }) + + return ( + + ) + } + + const rendered = renderWithClient(queryClient, ) + + fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) + await vi.advanceTimersByTimeAsync(10) + + expect(callbacks).toEqual([ + 'useMutation.onSuccess', + 'mutate.onSuccess', + ]) + }) + + it('should be able to call `onError` callback after failed mutate', async () => { + const callbacks: Array = [] + + function Page() { + const { mutate } = useMutation({ + mutationFn: (_text: string) => + sleep(10).then(() => { + throw new Error('oops') + }), + onError: () => { + callbacks.push('useMutation.onError') + }, + }) + + return ( + + ) + } + + const rendered = renderWithClient(queryClient, ) + + fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) + await vi.advanceTimersByTimeAsync(10) + + expect(callbacks).toEqual([ + 'useMutation.onError', + 'mutate.onError', + ]) + }) + + it('should be able to call `onSettled` callback after mutate', async () => { + const callbacks: Array = [] + + function Page() { + const { mutate } = useMutation({ + mutationFn: (text: string) => sleep(10).then(() => text), + onSettled: () => { + callbacks.push('useMutation.onSettled') + }, + }) + + return ( + + ) + } + + const rendered = renderWithClient(queryClient, ) + + fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) + await vi.advanceTimersByTimeAsync(10) + + expect(callbacks).toEqual([ + 'useMutation.onSettled', + 'mutate.onSettled', + ]) + }) + it('should be able to override the useMutation success callbacks', async () => { const callbacks: Array = [] diff --git a/packages/react-query/src/__tests__/useMutation.test.tsx b/packages/react-query/src/__tests__/useMutation.test.tsx index 12f001f85bc..3caab7cc2be 100644 --- a/packages/react-query/src/__tests__/useMutation.test.tsx +++ b/packages/react-query/src/__tests__/useMutation.test.tsx @@ -263,6 +263,120 @@ describe('useMutation', () => { ) }) + it('should be able to call `onSuccess` callback after successful mutate', async () => { + const callbacks: Array = [] + + function Page() { + const { mutate } = useMutation({ + mutationFn: (text: string) => sleep(10).then(() => text), + onSuccess: () => { + callbacks.push('useMutation.onSuccess') + }, + }) + + return ( + + ) + } + + const rendered = renderWithClient(queryClient, ) + + fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) + await vi.advanceTimersByTimeAsync(10) + + expect(callbacks).toEqual([ + 'useMutation.onSuccess', + 'mutate.onSuccess', + ]) + }) + + it('should be able to call `onError` callback after failed mutate', async () => { + const callbacks: Array = [] + + function Page() { + const { mutate } = useMutation({ + mutationFn: (_text: string) => + sleep(10).then(() => { + throw new Error('oops') + }), + onError: () => { + callbacks.push('useMutation.onError') + }, + }) + + return ( + + ) + } + + const rendered = renderWithClient(queryClient, ) + + fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) + await vi.advanceTimersByTimeAsync(10) + + expect(callbacks).toEqual([ + 'useMutation.onError', + 'mutate.onError', + ]) + }) + + it('should be able to call `onSettled` callback after mutate', async () => { + const callbacks: Array = [] + + function Page() { + const { mutate } = useMutation({ + mutationFn: (text: string) => sleep(10).then(() => text), + onSettled: () => { + callbacks.push('useMutation.onSettled') + }, + }) + + return ( + + ) + } + + const rendered = renderWithClient(queryClient, ) + + fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) + await vi.advanceTimersByTimeAsync(10) + + expect(callbacks).toEqual([ + 'useMutation.onSettled', + 'mutate.onSettled', + ]) + }) + it('should be able to override the useMutation success callbacks', async () => { const callbacks: Array = [] From b83e14a8235f9df124be4568dd2808e3ad8845b5 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 17:13:59 +0000 Subject: [PATCH 2/2] ci: apply automated fixes --- .../src/__tests__/useMutation.test.tsx | 15 +++------------ .../src/__tests__/useMutation.test.tsx | 15 +++------------ 2 files changed, 6 insertions(+), 24 deletions(-) diff --git a/packages/preact-query/src/__tests__/useMutation.test.tsx b/packages/preact-query/src/__tests__/useMutation.test.tsx index d5824ecc5f6..39e56cc3c5a 100644 --- a/packages/preact-query/src/__tests__/useMutation.test.tsx +++ b/packages/preact-query/src/__tests__/useMutation.test.tsx @@ -295,10 +295,7 @@ describe('useMutation', () => { fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) await vi.advanceTimersByTimeAsync(10) - expect(callbacks).toEqual([ - 'useMutation.onSuccess', - 'mutate.onSuccess', - ]) + expect(callbacks).toEqual(['useMutation.onSuccess', 'mutate.onSuccess']) }) it('should be able to call `onError` callback after failed mutate', async () => { @@ -335,10 +332,7 @@ describe('useMutation', () => { fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) await vi.advanceTimersByTimeAsync(10) - expect(callbacks).toEqual([ - 'useMutation.onError', - 'mutate.onError', - ]) + expect(callbacks).toEqual(['useMutation.onError', 'mutate.onError']) }) it('should be able to call `onSettled` callback after mutate', async () => { @@ -372,10 +366,7 @@ describe('useMutation', () => { fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) await vi.advanceTimersByTimeAsync(10) - expect(callbacks).toEqual([ - 'useMutation.onSettled', - 'mutate.onSettled', - ]) + expect(callbacks).toEqual(['useMutation.onSettled', 'mutate.onSettled']) }) it('should be able to override the useMutation success callbacks', async () => { diff --git a/packages/react-query/src/__tests__/useMutation.test.tsx b/packages/react-query/src/__tests__/useMutation.test.tsx index 3caab7cc2be..b8deb78eed9 100644 --- a/packages/react-query/src/__tests__/useMutation.test.tsx +++ b/packages/react-query/src/__tests__/useMutation.test.tsx @@ -294,10 +294,7 @@ describe('useMutation', () => { fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) await vi.advanceTimersByTimeAsync(10) - expect(callbacks).toEqual([ - 'useMutation.onSuccess', - 'mutate.onSuccess', - ]) + expect(callbacks).toEqual(['useMutation.onSuccess', 'mutate.onSuccess']) }) it('should be able to call `onError` callback after failed mutate', async () => { @@ -334,10 +331,7 @@ describe('useMutation', () => { fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) await vi.advanceTimersByTimeAsync(10) - expect(callbacks).toEqual([ - 'useMutation.onError', - 'mutate.onError', - ]) + expect(callbacks).toEqual(['useMutation.onError', 'mutate.onError']) }) it('should be able to call `onSettled` callback after mutate', async () => { @@ -371,10 +365,7 @@ describe('useMutation', () => { fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) await vi.advanceTimersByTimeAsync(10) - expect(callbacks).toEqual([ - 'useMutation.onSettled', - 'mutate.onSettled', - ]) + expect(callbacks).toEqual(['useMutation.onSettled', 'mutate.onSettled']) }) it('should be able to override the useMutation success callbacks', async () => {