Skip to content

Commit 38d96e0

Browse files
committed
test: add unit tests for initialData enabling bug
1 parent 23531d8 commit 38d96e0

1 file changed

Lines changed: 95 additions & 0 deletions

File tree

src/query.test.ts

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import { sleep, waitAsync } from 'yummies/async';
3333

3434
import { createQuery } from './preset';
3535
import { Query } from './query';
36+
import { QueryClient as MobxQueryClient } from './query-client';
3637
import {
3738
QueryConfig,
3839
QueryDynamicOptions,
@@ -2728,4 +2729,98 @@ describe('Query', () => {
27282729
>();
27292730
expect(queryWithSelect.result.data).toBeDefined();
27302731
});
2732+
2733+
it('initialData is not enabling query bug', async () => {
2734+
vi.useFakeTimers();
2735+
2736+
const queryClient = new MobxQueryClient({
2737+
defaultOptions: {
2738+
queries: {
2739+
enableOnDemand: true,
2740+
},
2741+
},
2742+
});
2743+
const box = observable.box(false);
2744+
const queryFn = vi.fn(() => {
2745+
return Promise.resolve({
2746+
meta: {
2747+
limit: 0,
2748+
offset: 0,
2749+
total: 0,
2750+
},
2751+
fruits: ['fruit1', 'fruit2', 'fruit3'],
2752+
});
2753+
});
2754+
2755+
const query = new Query({
2756+
queryClient,
2757+
queryFn: async () => {
2758+
const result = await queryFn();
2759+
return result;
2760+
},
2761+
initialData: {
2762+
meta: {
2763+
limit: 0,
2764+
offset: 0,
2765+
total: 0,
2766+
},
2767+
fruits: [],
2768+
} as Awaited<ReturnType<typeof queryFn>>,
2769+
options: () => ({
2770+
queryKey: ['fruits', box.get() ? 'enabled' : 'disabled'] as const,
2771+
enabled: box.get(),
2772+
}),
2773+
select: (data) =>
2774+
data.fruits.map((fruit) => ({
2775+
fruit,
2776+
searchText: fruit,
2777+
})),
2778+
});
2779+
2780+
sleep(100);
2781+
await vi.runAllTimersAsync();
2782+
2783+
expect(query.data).toStrictEqual([]);
2784+
2785+
const managedQueryData = {
2786+
get isEmpty() {
2787+
return !query.data?.length;
2788+
},
2789+
get data() {
2790+
return query.data ?? [];
2791+
},
2792+
get isLoading() {
2793+
return query.isFetching;
2794+
},
2795+
};
2796+
2797+
makeObservable(managedQueryData, {
2798+
isEmpty: computed.struct,
2799+
data: computed.struct,
2800+
isLoading: computed.struct,
2801+
});
2802+
2803+
// it runs query
2804+
managedQueryData.isLoading;
2805+
2806+
if (managedQueryData.isEmpty) {
2807+
managedQueryData.data;
2808+
managedQueryData.isLoading;
2809+
}
2810+
2811+
sleep(100);
2812+
await vi.runAllTimersAsync();
2813+
2814+
expect(managedQueryData.data).toStrictEqual([]);
2815+
2816+
box.set(true);
2817+
sleep(100);
2818+
await vi.runAllTimersAsync();
2819+
2820+
expect(managedQueryData.data).toEqual([
2821+
{ fruit: 'fruit1', searchText: 'fruit1' },
2822+
{ fruit: 'fruit2', searchText: 'fruit2' },
2823+
{ fruit: 'fruit3', searchText: 'fruit3' },
2824+
]);
2825+
});
27312826
});

0 commit comments

Comments
 (0)