Skip to content

test: add callback return type tests for mutation callbacks #9252

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

braden-w
Copy link
Contributor

@braden-w braden-w commented Jun 5, 2025

This PR builds on #9251 and adds test coverage for mutation callback return types, inspired by the discussions and TkDodo's comment in #9245 and the original Promise.all() edge case identified in #9202.

The original PR #9202 narrowed callback return types from Promise<unknown> | unknown
to Promise<void> | void, but this broke common patterns like:

onSuccess: (data) => Promise.all([
  invalidateQueries(),
  trackAnalytics(),
])

As noted in the original discussion,
this Promise.all() pattern was a legitimate use case that many users relied on.

These tests ensure we support all the callback patterns that users expect:

  • Sync patterns: Implicit void, explicit void, non-void returns
  • Async patterns: Async functions, Promise.resolve(), Promise returns
  • Promise.all() patterns: The original breaking case from refactor: narrow onSuccess/onError/onMutate/onSettled callback types to Promise<void> | void #9202
  • Promise.allSettled() patterns: Additional parallel operation support
  • Mixed patterns: Different callback types in same mutation
  • Error handling: All patterns work in error scenarios
  • Return value isolation: Callback returns don't affect mutation result

Shoutouts

These tests ensure we maintain backward compatibility while providing clear intent about callback usage patterns.

braden-w added 2 commits June 4, 2025 17:14
…callback types to Promise<void> | void (TanStack#9202)"

This reverts commit 982f6ca.
Adds test coverage for mutation callback return types, inspired by the discussions and [TkDodo's comment](TanStack#9245 (comment)
) in TanStack#9245 and the original Promise.all() edge case identified in TanStack#9202.

The original PR TanStack#9202 narrowed callback return types from `Promise<unknown> | unknown`
to `Promise<void> | void`, but this broke common patterns like:

```ts
onSuccess: (data) => Promise.all([
  invalidateQueries(),
  trackAnalytics(),
])
```

As noted in [the original discussion](TanStack#9202 (comment)),
this `Promise.all()` pattern was a legitimate use case that many users relied on.

These tests ensure we support all the callback patterns that users expect:

✅ **Sync patterns**: Implicit void, explicit void, non-void returns
✅ **Async patterns**: Async functions, Promise.resolve(), Promise<T> returns
✅ **Promise.all() patterns**: The original breaking case from TanStack#9202
✅ **Promise.allSettled() patterns**: Additional parallel operation support
✅ **Mixed patterns**: Different callback types in same mutation
✅ **Error handling**: All patterns work in error scenarios
✅ **Return value isolation**: Callback returns don't affect mutation result
Copy link

nx-cloud bot commented Jun 5, 2025

View your CI Pipeline Execution ↗ for commit 53fc0db.

Command Status Duration Result
nx affected --targets=test:sherif,test:knip,tes... ✅ Succeeded 3m 11s View ↗
nx run-many --target=build --exclude=examples/*... ✅ Succeeded 1m 46s View ↗

☁️ Nx Cloud last updated this comment at 2025-06-05 15:24:54 UTC

@braden-w braden-w changed the title test: add callback return type tests for mutation callbacks wip test: add callback return type tests for mutation callbacks Jun 5, 2025
Copy link

pkg-pr-new bot commented Jun 5, 2025

More templates

@tanstack/angular-query-devtools-experimental

npm i https://pkg.pr.new/@tanstack/angular-query-devtools-experimental@9252

@tanstack/angular-query-experimental

npm i https://pkg.pr.new/@tanstack/angular-query-experimental@9252

@tanstack/eslint-plugin-query

npm i https://pkg.pr.new/@tanstack/eslint-plugin-query@9252

@tanstack/query-async-storage-persister

npm i https://pkg.pr.new/@tanstack/query-async-storage-persister@9252

@tanstack/query-broadcast-client-experimental

npm i https://pkg.pr.new/@tanstack/query-broadcast-client-experimental@9252

@tanstack/query-core

npm i https://pkg.pr.new/@tanstack/query-core@9252

@tanstack/query-devtools

npm i https://pkg.pr.new/@tanstack/query-devtools@9252

@tanstack/query-persist-client-core

npm i https://pkg.pr.new/@tanstack/query-persist-client-core@9252

@tanstack/query-sync-storage-persister

npm i https://pkg.pr.new/@tanstack/query-sync-storage-persister@9252

@tanstack/react-query

npm i https://pkg.pr.new/@tanstack/react-query@9252

@tanstack/react-query-devtools

npm i https://pkg.pr.new/@tanstack/react-query-devtools@9252

@tanstack/react-query-next-experimental

npm i https://pkg.pr.new/@tanstack/react-query-next-experimental@9252

@tanstack/react-query-persist-client

npm i https://pkg.pr.new/@tanstack/react-query-persist-client@9252

@tanstack/solid-query

npm i https://pkg.pr.new/@tanstack/solid-query@9252

@tanstack/solid-query-devtools

npm i https://pkg.pr.new/@tanstack/solid-query-devtools@9252

@tanstack/solid-query-persist-client

npm i https://pkg.pr.new/@tanstack/solid-query-persist-client@9252

@tanstack/svelte-query

npm i https://pkg.pr.new/@tanstack/svelte-query@9252

@tanstack/svelte-query-devtools

npm i https://pkg.pr.new/@tanstack/svelte-query-devtools@9252

@tanstack/svelte-query-persist-client

npm i https://pkg.pr.new/@tanstack/svelte-query-persist-client@9252

@tanstack/vue-query

npm i https://pkg.pr.new/@tanstack/vue-query@9252

@tanstack/vue-query-devtools

npm i https://pkg.pr.new/@tanstack/vue-query-devtools@9252

commit: 53fc0db

@braden-w braden-w changed the title wip test: add callback return type tests for mutation callbacks test: add callback return type tests for mutation callbacks Jun 5, 2025
Copy link

codecov bot commented Jun 5, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 59.68%. Comparing base (dfbda9d) to head (53fc0db).
Report is 2 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff             @@
##             main    #9252       +/-   ##
===========================================
+ Coverage   45.37%   59.68%   +14.31%     
===========================================
  Files         207      136       -71     
  Lines        8276     5514     -2762     
  Branches     1865     1485      -380     
===========================================
- Hits         3755     3291      -464     
+ Misses       4080     1925     -2155     
+ Partials      441      298      -143     
Components Coverage Δ
@tanstack/angular-query-devtools-experimental ∅ <ø> (∅)
@tanstack/angular-query-experimental 85.00% <ø> (ø)
@tanstack/eslint-plugin-query ∅ <ø> (∅)
@tanstack/query-async-storage-persister 43.85% <ø> (ø)
@tanstack/query-broadcast-client-experimental 24.39% <ø> (ø)
@tanstack/query-codemods ∅ <ø> (∅)
@tanstack/query-core 98.15% <ø> (ø)
@tanstack/query-devtools 3.55% <ø> (ø)
@tanstack/query-persist-client-core 79.47% <ø> (ø)
@tanstack/query-sync-storage-persister 84.61% <ø> (ø)
@tanstack/query-test-utils ∅ <ø> (∅)
@tanstack/react-query 95.93% <ø> (ø)
@tanstack/react-query-devtools 10.00% <ø> (ø)
@tanstack/react-query-next-experimental ∅ <ø> (∅)
@tanstack/react-query-persist-client 100.00% <ø> (ø)
@tanstack/solid-query 78.13% <ø> (ø)
@tanstack/solid-query-devtools ∅ <ø> (∅)
@tanstack/solid-query-persist-client 100.00% <ø> (ø)
@tanstack/svelte-query 88.07% <ø> (ø)
@tanstack/svelte-query-devtools ∅ <ø> (∅)
@tanstack/svelte-query-persist-client 100.00% <ø> (ø)
@tanstack/vue-query 71.10% <ø> (ø)
@tanstack/vue-query-devtools ∅ <ø> (∅)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions github-actions bot removed documentation Improvements or additions to documentation package: react-query-persist-client labels Jun 5, 2025
@TkDodo TkDodo merged commit 2b9b122 into TanStack:main Jun 5, 2025
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants