From b263d409ab3f9e8ffd27f2287db479e8a126265c Mon Sep 17 00:00:00 2001 From: Wonsuk Choi Date: Thu, 1 Oct 2026 03:38:40 +0900 Subject: [PATCH] test(lit-query/{createQueryController,createInfiniteQueryController,createQueriesController}): add tests for returning the same result between reads when nothing changed --- .../createInfiniteQueryController.test.ts | 25 +++++++++++++++++ .../__tests__/createQueriesController.test.ts | 27 +++++++++++++++++++ .../__tests__/createQueryController.test.ts | 23 ++++++++++++++++ 3 files changed, 75 insertions(+) diff --git a/packages/lit-query/src/__tests__/createInfiniteQueryController.test.ts b/packages/lit-query/src/__tests__/createInfiniteQueryController.test.ts index da71862061..097c666cc9 100644 --- a/packages/lit-query/src/__tests__/createInfiniteQueryController.test.ts +++ b/packages/lit-query/src/__tests__/createInfiniteQueryController.test.ts @@ -409,6 +409,31 @@ describe('createInfiniteQueryController', () => { } }) + it('should return the same result between reads when nothing changed', async () => { + const key = queryKey() + + class Host extends LitElement { + readonly infinite = createInfiniteQueryController( + this, + { + queryKey: key, + queryFn: () => sleep(10).then(() => 'data'), + initialPageParam: 0, + getNextPageParam: () => undefined, + }, + queryClient, + ) + } + customElements.define(generateElementName(), Host) + const host = new Host() + container.append(host) + const infinite = host.infinite + + await vi.advanceTimersByTimeAsync(10) + const result = infinite() + expect(infinite()).toBe(result) + }) + it('should preserve prior pages consistently when fetching the next page fails', async () => { const key = queryKey() diff --git a/packages/lit-query/src/__tests__/createQueriesController.test.ts b/packages/lit-query/src/__tests__/createQueriesController.test.ts index ae9e81f0ee..e234983b4f 100644 --- a/packages/lit-query/src/__tests__/createQueriesController.test.ts +++ b/packages/lit-query/src/__tests__/createQueriesController.test.ts @@ -410,6 +410,33 @@ describe('createQueriesController', () => { } }) + it('should return the same result between reads when nothing changed', async () => { + const key = queryKey() + + class Host extends LitElement { + readonly queries = createQueriesController( + this, + { + queries: [ + { + queryKey: key, + queryFn: () => sleep(10).then(() => 'data'), + }, + ], + }, + queryClient, + ) + } + customElements.define(generateElementName(), Host) + const host = new Host() + container.append(host) + const queries = host.queries + + await vi.advanceTimersByTimeAsync(10) + const result = queries() + expect(queries()).toBe(result) + }) + it('should support dynamic add/remove and keep partial failure stability', async () => { const key1 = queryKey() const key2 = queryKey() diff --git a/packages/lit-query/src/__tests__/createQueryController.test.ts b/packages/lit-query/src/__tests__/createQueryController.test.ts index cbb7fa0e47..f331ad89f0 100644 --- a/packages/lit-query/src/__tests__/createQueryController.test.ts +++ b/packages/lit-query/src/__tests__/createQueryController.test.ts @@ -288,6 +288,29 @@ describe('createQueryController', () => { } }) + it('should return the same result between reads when nothing changed', async () => { + const key = queryKey() + + class Host extends LitElement { + readonly query = createQueryController( + this, + { + queryKey: key, + queryFn: () => sleep(10).then(() => 'data'), + }, + queryClient, + ) + } + customElements.define(generateElementName(), Host) + const host = new Host() + container.append(host) + const query = host.query + + await vi.advanceTimersByTimeAsync(10) + const result = query() + expect(query()).toBe(result) + }) + it('should transition from pending to success with expected contract', async () => { const key = queryKey()