From d9f30fe9a187a8f021605c9bdefdb0dc71ec5f4c Mon Sep 17 00:00:00 2001 From: Wonsuk Choi Date: Sun, 23 Aug 2026 11:58:41 +0900 Subject: [PATCH] test(*): add adapter-level type coverage for optional undefinable mutate variables --- .../src/__tests__/inject-mutation.test-d.ts | 9 +++++++++ .../src/__tests__/useMutation.test-d.tsx | 9 +++++++++ .../src/__tests__/useMutation.test-d.tsx | 9 +++++++++ .../src/__tests__/useMutation.test-d.tsx | 9 +++++++++ .../tests/createMutation/createMutation.test-d.ts | 9 +++++++++ .../vue-query/src/__tests__/useMutation.test-d.tsx | 13 +++++++++++++ 6 files changed, 58 insertions(+) diff --git a/packages/angular-query-experimental/src/__tests__/inject-mutation.test-d.ts b/packages/angular-query-experimental/src/__tests__/inject-mutation.test-d.ts index e241ce58c94..f83774a0525 100644 --- a/packages/angular-query-experimental/src/__tests__/inject-mutation.test-d.ts +++ b/packages/angular-query-experimental/src/__tests__/inject-mutation.test-d.ts @@ -72,4 +72,13 @@ describe('injectMutation', () => { >() }) }) + + it('should allow calling mutate with no arguments when TVariables is optional undefinable', () => { + const mutation = injectMutation(() => ({ + mutationFn: (_variables: number | undefined) => sleep(0).then(() => 1), + })) + + expectTypeOf(mutation.mutate).toBeCallableWith() + expectTypeOf(mutation.mutateAsync).toBeCallableWith() + }) }) diff --git a/packages/preact-query/src/__tests__/useMutation.test-d.tsx b/packages/preact-query/src/__tests__/useMutation.test-d.tsx index 7b7a5806058..cba067db9db 100644 --- a/packages/preact-query/src/__tests__/useMutation.test-d.tsx +++ b/packages/preact-query/src/__tests__/useMutation.test-d.tsx @@ -79,6 +79,15 @@ describe('useMutation', () => { expectTypeOf(mutation.mutate).toBeCallableWith() }) + it('should allow calling mutate with no arguments when TVariables is optional undefinable', () => { + const mutation = useMutation({ + mutationFn: (_variables: number | undefined) => Promise.resolve(1), + }) + + expectTypeOf(mutation.mutate).toBeCallableWith() + expectTypeOf(mutation.mutateAsync).toBeCallableWith() + }) + it('should infer custom TError type', () => { class CustomError extends Error { code: number diff --git a/packages/react-query/src/__tests__/useMutation.test-d.tsx b/packages/react-query/src/__tests__/useMutation.test-d.tsx index 7b7a5806058..cba067db9db 100644 --- a/packages/react-query/src/__tests__/useMutation.test-d.tsx +++ b/packages/react-query/src/__tests__/useMutation.test-d.tsx @@ -79,6 +79,15 @@ describe('useMutation', () => { expectTypeOf(mutation.mutate).toBeCallableWith() }) + it('should allow calling mutate with no arguments when TVariables is optional undefinable', () => { + const mutation = useMutation({ + mutationFn: (_variables: number | undefined) => Promise.resolve(1), + }) + + expectTypeOf(mutation.mutate).toBeCallableWith() + expectTypeOf(mutation.mutateAsync).toBeCallableWith() + }) + it('should infer custom TError type', () => { class CustomError extends Error { code: number diff --git a/packages/solid-query/src/__tests__/useMutation.test-d.tsx b/packages/solid-query/src/__tests__/useMutation.test-d.tsx index 9bc689ea9b0..b5ae427d6e8 100644 --- a/packages/solid-query/src/__tests__/useMutation.test-d.tsx +++ b/packages/solid-query/src/__tests__/useMutation.test-d.tsx @@ -79,6 +79,15 @@ describe('useMutation', () => { expectTypeOf(mutation.mutate).toBeCallableWith() }) + it('should allow calling mutate with no arguments when TVariables is optional undefinable', () => { + const mutation = useMutation(() => ({ + mutationFn: (_variables: number | undefined) => Promise.resolve(1), + })) + + expectTypeOf(mutation.mutate).toBeCallableWith() + expectTypeOf(mutation.mutateAsync).toBeCallableWith() + }) + it('should infer custom TError type', () => { class CustomError extends Error { code: number diff --git a/packages/svelte-query/tests/createMutation/createMutation.test-d.ts b/packages/svelte-query/tests/createMutation/createMutation.test-d.ts index 4ea6027949e..a5a4bd8419a 100644 --- a/packages/svelte-query/tests/createMutation/createMutation.test-d.ts +++ b/packages/svelte-query/tests/createMutation/createMutation.test-d.ts @@ -79,6 +79,15 @@ describe('createMutation', () => { expectTypeOf(mutation.mutate).toBeCallableWith() }) + it('should allow calling mutate with no arguments when TVariables is optional undefinable', () => { + const mutation = createMutation(() => ({ + mutationFn: (_variables: number | undefined) => Promise.resolve(1), + })) + + expectTypeOf(mutation.mutate).toBeCallableWith() + expectTypeOf(mutation.mutateAsync).toBeCallableWith() + }) + it('should infer custom TError type', () => { class CustomError extends Error { code: number diff --git a/packages/vue-query/src/__tests__/useMutation.test-d.tsx b/packages/vue-query/src/__tests__/useMutation.test-d.tsx index 8433c72c4d4..80d8996e982 100644 --- a/packages/vue-query/src/__tests__/useMutation.test-d.tsx +++ b/packages/vue-query/src/__tests__/useMutation.test-d.tsx @@ -84,3 +84,16 @@ describe('Discriminated union return type', () => { expectTypeOf(mutation.variables).toEqualTypeOf() }) }) + +describe('useMutation', () => { + it('should allow calling mutate with no arguments when TVariables is optional undefinable', () => { + const mutation = reactive( + useMutation({ + mutationFn: (_variables: number | undefined) => sleep(0).then(() => 1), + }), + ) + + expectTypeOf(mutation.mutate).toBeCallableWith() + expectTypeOf(mutation.mutateAsync).toBeCallableWith() + }) +})