Skip to content

Cache control e2e and example#2159

Open
enisdenjo wants to merge 9 commits intomainfrom
e2e-entitiyy
Open

Cache control e2e and example#2159
enisdenjo wants to merge 9 commits intomainfrom
e2e-entitiyy

Conversation

@enisdenjo
Copy link
Copy Markdown
Member

No description provided.

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request establishes a robust example and end-to-end testing framework for entity caching in a GraphQL federation environment. It illustrates the complete flow from gateway configuration with an in-memory cache to the implementation of type-level and field-level caching directives within subgraph schemas, ensuring that data is efficiently served from the cache on subsequent requests.

Highlights

  • New E2E Test Suite: Introduced a new end-to-end test suite specifically for entity caching, demonstrating its functionality within a federated GraphQL setup.
  • Gateway Configuration for Caching: Configured the GraphQL gateway to utilize an in-memory LRU cache for response caching, including extension metadata in responses.
  • Subgraph Services with Cache Control: Created two new subgraph services (products and reviews) that showcase the application of @cacheControl directives at both type-level and field-level for effective data caching.
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/examples.yml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces an end-to-end test suite for GraphQL response caching, demonstrating both type-level and field-level caching with specific TTLs. The changes include new e2e tests, gateway configuration with an in-memory LRU cache, and two subgraph services defining the @cacheControl directive. Feedback suggests refactoring duplicated test setup logic in entity-caching.e2e.ts using describe and beforeEach blocks, and extracting duplicated schema definitions (like CacheControlScope and @cacheControl directive) from products.ts and reviews.ts into a shared file to improve maintainability.

Comment on lines +47 to +54
const products = await service('products');
const reviews = await service('reviews');
const gw = await gateway({
supergraph: {
with: 'apollo',
services: [products, reviews],
},
});
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

This setup logic is duplicated from the test above (lines 7-14). To improve maintainability and adhere to the DRY (Don't Repeat Yourself) principle, consider using a describe block to group related tests and a beforeEach hook for common setup. This will make the tests cleaner and easier to maintain.

Comment on lines +20 to +29
enum CacheControlScope {
PUBLIC
PRIVATE
}

directive @cacheControl(
maxAge: Int
scope: CacheControlScope
inheritMaxAge: Boolean
) on FIELD_DEFINITION | OBJECT | INTERFACE | UNION
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

The definitions for CacheControlScope and the @cacheControl directive are duplicated in e2e/entity-caching/services/reviews.ts. To improve maintainability, these common schema definitions should be extracted to a shared file. The same applies to the extend schema block on lines 43-51.

@enisdenjo enisdenjo changed the title Entity caching e2e and example Cache control e2e and example Mar 25, 2026
@theguild-bot
Copy link
Copy Markdown
Collaborator

theguild-bot commented Mar 25, 2026

🚀 Snapshot Release (alpha)

The latest changes of this PR are available as alpha on npm (based on the declared changesets):

Package Version Info
@graphql-hive/gateway-testing 6.0.11-alpha-510dd091d6a2a0455b264207b8b8570b230387a6 npm ↗︎ unpkg ↗︎

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