Skip to content
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

Add peek to ObservableStream and use ObservableStream in an existing test #12307

Merged
merged 4 commits into from
Jan 24, 2025

Conversation

jerelmiller
Copy link
Member

This change introduces two things:

  • Adds a peek function to ObservableStream that lets you peek at the next value "without" consuming the next reader event
  • Refactors an existing test that checks that updates to reactive vars will rerender queries.

The peek function was necessary due to how these tests operate. Several areas of the refactored test did something like the following:

// Modify the reactive var to ensure changes are broadcasted
aVar(aVar() + 111)

await expect(aStream).toEmitValue(...)
// ensure that a change unrelated to this query didn't emit a new event
await expect(bStream).not.toEmitAnything()

Because toEmitAnything consumed a reader event, that meant using await expect(bStream).toEmitValue(...) wouldn't quite work as you'd expect since it would be reporting the value after the event consumed by the previous not.toEmitAnything(). Rather than omitting this check entirely, I added a peek function that will consume the reader event, then queue it so that take will take from the peeked event rather than advancing the reader. This allowed me to update toEmitAnything to use peek instead so that I could continue to use toEmitValue further down.

@jerelmiller jerelmiller requested a review from phryneas January 24, 2025 22:19
Copy link

changeset-bot bot commented Jan 24, 2025

⚠️ No Changeset found

Latest commit: acb14b9

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@svc-apollo-docs
Copy link

svc-apollo-docs commented Jan 24, 2025

✅ Docs preview has no changes

The preview was not built because there were no changes.

Build ID: 8bf57c32c3b676722dcd8c13

Copy link

pkg-pr-new bot commented Jan 24, 2025

npm i https://pkg.pr.new/@apollo/client@12307

commit: acb14b9

Copy link

netlify bot commented Jan 24, 2025

Deploy Preview for apollo-client-docs ready!

Name Link
🔨 Latest commit acb14b9
🔍 Latest deploy log https://app.netlify.com/sites/apollo-client-docs/deploys/679415c06b0d740008ec5df2
😎 Deploy Preview https://deploy-preview-12307--apollo-client-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

Copy link
Contributor

github-actions bot commented Jan 24, 2025

size-limit report 📦

Path Size
dist/apollo-client.min.cjs 40.67 KB (0%)
import { ApolloClient, InMemoryCache, HttpLink } from "dist/main.cjs" 50.08 KB (0%)
import { ApolloClient, InMemoryCache, HttpLink } from "dist/main.cjs" (production) 47.2 KB (0%)
import { ApolloClient, InMemoryCache, HttpLink } from "dist/index.js" 36.18 KB (0%)
import { ApolloClient, InMemoryCache, HttpLink } from "dist/index.js" (production) 33.58 KB (0%)
import { ApolloProvider } from "dist/react/index.js" 1.26 KB (0%)
import { ApolloProvider } from "dist/react/index.js" (production) 1.24 KB (0%)
import { useQuery } from "dist/react/index.js" 5.21 KB (0%)
import { useQuery } from "dist/react/index.js" (production) 4.29 KB (0%)
import { useLazyQuery } from "dist/react/index.js" 5.7 KB (0%)
import { useLazyQuery } from "dist/react/index.js" (production) 4.78 KB (0%)
import { useMutation } from "dist/react/index.js" 3.62 KB (0%)
import { useMutation } from "dist/react/index.js" (production) 2.84 KB (0%)
import { useSubscription } from "dist/react/index.js" 4.42 KB (0%)
import { useSubscription } from "dist/react/index.js" (production) 3.48 KB (0%)
import { useSuspenseQuery } from "dist/react/index.js" 5.51 KB (0%)
import { useSuspenseQuery } from "dist/react/index.js" (production) 4.17 KB (0%)
import { useBackgroundQuery } from "dist/react/index.js" 5.01 KB (0%)
import { useBackgroundQuery } from "dist/react/index.js" (production) 3.66 KB (0%)
import { useLoadableQuery } from "dist/react/index.js" 5.09 KB (0%)
import { useLoadableQuery } from "dist/react/index.js" (production) 3.74 KB (0%)
import { useReadQuery } from "dist/react/index.js" 3.41 KB (0%)
import { useReadQuery } from "dist/react/index.js" (production) 3.35 KB (0%)
import { useFragment } from "dist/react/index.js" 2.36 KB (0%)
import { useFragment } from "dist/react/index.js" (production) 2.31 KB (0%)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Many of these tests were hard to reason about because it was difficult to tell that some of the assertions were there to ensure that the observable didn't emit any new values (which is why it looked like some values were tested multiple times).

Moving this to ObservableStream makes it much easier to read through the expected changes. This will be useful in #12304 which will better show off the changes to the values made in that branch.

@jerelmiller
Copy link
Member Author

@phryneas I'm going to go ahead and merge this so I can continue using it in #12304, but feel free to add comments if you have additional feedback and we can get those changes in next week.

@jerelmiller jerelmiller merged commit 4bd6362 into main Jan 24, 2025
46 checks passed
@jerelmiller jerelmiller deleted the jerel/improve-reactive-var-test branch January 24, 2025 22:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants