From 74409cc235707ce96902df09adaf9a2fb396bf92 Mon Sep 17 00:00:00 2001 From: Wonsuk Choi Date: Mon, 13 Apr 2026 11:57:15 +0900 Subject: [PATCH] test(vue-query/mutationOptions): add 'useMutationState' tests for getter overloads --- .../src/__tests__/mutationOptions.test.ts | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/packages/vue-query/src/__tests__/mutationOptions.test.ts b/packages/vue-query/src/__tests__/mutationOptions.test.ts index 0c1bb4608ad..12bae7a375f 100644 --- a/packages/vue-query/src/__tests__/mutationOptions.test.ts +++ b/packages/vue-query/src/__tests__/mutationOptions.test.ts @@ -564,6 +564,74 @@ describe('mutationOptions', () => { expect(states.value).toEqual(['data1']) }) + it('should return mutation states when used with useMutationState (getter without mutationKey in mutationOptions)', async () => { + const mutationOpts = mutationOptions(() => ({ + mutationFn: () => sleep(10).then(() => 'data'), + })) + + const { mutate } = useMutation(mutationOpts) + const states = useMutationState({ + filters: { status: 'success' }, + select: (mutation) => mutation.state.data, + }) + + expect(states.value).toEqual([]) + + mutate() + await vi.advanceTimersByTimeAsync(10) + expect(states.value).toEqual(['data']) + }) + + it('should return mutation states when used with useMutationState (getter)', async () => { + const mutationOpts1 = mutationOptions(() => ({ + mutationKey: ['mutation'], + mutationFn: () => sleep(10).then(() => 'data1'), + })) + const mutationOpts2 = mutationOptions(() => ({ + mutationFn: () => sleep(10).then(() => 'data2'), + })) + + const { mutate: mutate1 } = useMutation(mutationOpts1) + const { mutate: mutate2 } = useMutation(mutationOpts2) + const states = useMutationState({ + filters: { status: 'success' }, + select: (mutation) => mutation.state.data, + }) + + expect(states.value).toEqual([]) + + mutate1() + mutate2() + await vi.advanceTimersByTimeAsync(10) + expect(states.value).toEqual(['data1', 'data2']) + }) + + it('should return mutation states when used with useMutationState (getter, filter mutationOpts1.mutationKey)', async () => { + const mutationOpts1 = mutationOptions(() => ({ + mutationKey: ['mutation'], + mutationFn: () => sleep(10).then(() => 'data1'), + })) + const mutationOpts2 = mutationOptions(() => ({ + mutationFn: () => sleep(10).then(() => 'data2'), + })) + + const resolvedOpts1 = mutationOpts1() + + const { mutate: mutate1 } = useMutation(mutationOpts1) + const { mutate: mutate2 } = useMutation(mutationOpts2) + const states = useMutationState({ + filters: { mutationKey: resolvedOpts1.mutationKey, status: 'success' }, + select: (mutation) => mutation.state.data, + }) + + expect(states.value).toEqual([]) + + mutate1() + mutate2() + await vi.advanceTimersByTimeAsync(10) + expect(states.value).toEqual(['data1']) + }) + it('should work with getter passed to mutationOptions when used with useIsMutating', async () => { const keyRef = ref('isMutatingGetter') const mutationOpts = mutationOptions(() => ({