Skip to content

Commit 12869c8

Browse files
committed
more tests
1 parent e0208d7 commit 12869c8

File tree

1 file changed

+117
-1
lines changed

1 file changed

+117
-1
lines changed

packages/plugins/tanstack-query/tests/react-hooks-v5.test.tsx

Lines changed: 117 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1117,7 +1117,7 @@ describe('Tanstack Query React Hooks V5 Test', () => {
11171117
});
11181118
});
11191119

1120-
it('optimistic delete', async () => {
1120+
it('optimistic delete simple', async () => {
11211121
const { queryClient, wrapper } = createWrapper();
11221122

11231123
const data: any[] = [{ id: '1', name: 'foo' }];
@@ -1168,6 +1168,122 @@ describe('Tanstack Query React Hooks V5 Test', () => {
11681168
});
11691169
});
11701170

1171+
it('optimistic delete nested query', async () => {
1172+
const { queryClient, wrapper } = createWrapper();
1173+
1174+
const data: any = { id: '1', name: 'foo', posts: [{ id: 'p1', title: 'post1' }] };
1175+
1176+
nock(makeUrl('User', 'findFirst'))
1177+
.get(/.*/)
1178+
.reply(200, () => {
1179+
console.log('Querying data:', JSON.stringify(data));
1180+
return { data };
1181+
})
1182+
.persist();
1183+
1184+
const { result } = renderHook(
1185+
() =>
1186+
useModelQuery(
1187+
'User',
1188+
makeUrl('User', 'findFirst'),
1189+
{ include: { posts: true } },
1190+
{ optimisticUpdate: true }
1191+
),
1192+
{
1193+
wrapper,
1194+
}
1195+
);
1196+
await waitFor(() => {
1197+
expect(result.current.data).toMatchObject({ id: '1' });
1198+
});
1199+
1200+
nock(makeUrl('Post', 'delete'))
1201+
.delete(/.*/)
1202+
.reply(200, () => {
1203+
console.log('Not mutating data');
1204+
return { data };
1205+
});
1206+
1207+
const { result: mutationResult } = renderHook(
1208+
() =>
1209+
useModelMutation('Post', 'DELETE', makeUrl('Post', 'delete'), modelMeta, {
1210+
optimisticUpdate: true,
1211+
invalidateQueries: false,
1212+
}),
1213+
{
1214+
wrapper,
1215+
}
1216+
);
1217+
1218+
act(() => mutationResult.current.mutate({ where: { id: 'p1' } }));
1219+
1220+
await waitFor(() => {
1221+
const cacheData: any = queryClient.getQueryData(
1222+
getQueryKey(
1223+
'User',
1224+
'findFirst',
1225+
{ include: { posts: true } },
1226+
{ infinite: false, optimisticUpdate: true }
1227+
)
1228+
);
1229+
expect(cacheData.posts).toHaveLength(0);
1230+
});
1231+
});
1232+
1233+
it('optimistic nested delete update query', async () => {
1234+
const { queryClient, wrapper } = createWrapper();
1235+
1236+
const data: any = [
1237+
{ id: 'p1', title: 'post1' },
1238+
{ id: 'p2', title: 'post2' },
1239+
];
1240+
1241+
nock(makeUrl('Post', 'findMany'))
1242+
.get(/.*/)
1243+
.reply(200, () => {
1244+
console.log('Querying data:', JSON.stringify(data));
1245+
return { data };
1246+
})
1247+
.persist();
1248+
1249+
const { result } = renderHook(
1250+
() => useModelQuery('Post', makeUrl('Post', 'findMany'), undefined, { optimisticUpdate: true }),
1251+
{
1252+
wrapper,
1253+
}
1254+
);
1255+
await waitFor(() => {
1256+
expect(result.current.data).toHaveLength(2);
1257+
});
1258+
1259+
nock(makeUrl('User', 'update'))
1260+
.delete(/.*/)
1261+
.reply(200, () => {
1262+
console.log('Not mutating data');
1263+
return { data };
1264+
});
1265+
1266+
const { result: mutationResult } = renderHook(
1267+
() =>
1268+
useModelMutation('User', 'PUT', makeUrl('User', 'update'), modelMeta, {
1269+
optimisticUpdate: true,
1270+
invalidateQueries: false,
1271+
}),
1272+
{
1273+
wrapper,
1274+
}
1275+
);
1276+
1277+
act(() => mutationResult.current.mutate({ where: { id: '1' }, data: { posts: { delete: { id: 'p1' } } } }));
1278+
1279+
await waitFor(() => {
1280+
const cacheData: any = queryClient.getQueryData(
1281+
getQueryKey('Post', 'findMany', undefined, { infinite: false, optimisticUpdate: true })
1282+
);
1283+
expect(cacheData).toHaveLength(1);
1284+
});
1285+
});
1286+
11711287
it('top-level mutation and nested-read invalidation', async () => {
11721288
const { queryClient, wrapper } = createWrapper();
11731289

0 commit comments

Comments
 (0)