Skip to content

Commit 71f6ee3

Browse files
committed
Add failing type test for constant variable types with modern signatures
1 parent f25b12a commit 71f6ee3

1 file changed

Lines changed: 162 additions & 0 deletions

File tree

  • integration-tests/type-tests/signatures/modern

integration-tests/type-tests/signatures/modern/useQuery.ts

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,168 @@ test("requires variables with mixed TVariables", () => {
367367
);
368368
});
369369

370+
// https://github.com/apollographql/apollo-client/issues/13342
371+
test("constant variable types do not widen returnPartialData", () => {
372+
{
373+
const query: TypedDocumentNode<{ character: string }, { type: "main" }> =
374+
gql``;
375+
376+
const { data, dataState } = useQuery(query, {
377+
variables: { type: "main" },
378+
});
379+
380+
expectTypeOf(data).toEqualTypeOf<
381+
| DataValue.Complete<{ character: string }>
382+
| DataValue.Streaming<{ character: string }>
383+
| undefined
384+
>();
385+
expectTypeOf(dataState).toEqualTypeOf<"empty" | "streaming" | "complete">();
386+
}
387+
388+
{
389+
const query: TypedDocumentNode<{ character: string }, { type: "main" }> =
390+
gql``;
391+
392+
const { data, dataState } = useQuery(query, {
393+
variables: { type: "main" },
394+
returnPartialData: false,
395+
});
396+
397+
expectTypeOf(data).toEqualTypeOf<
398+
| DataValue.Complete<{ character: string }>
399+
| DataValue.Streaming<{ character: string }>
400+
| undefined
401+
>();
402+
expectTypeOf(dataState).toEqualTypeOf<"empty" | "streaming" | "complete">();
403+
}
404+
405+
{
406+
const query: TypedDocumentNode<{ character: string }, { type: "main" }> =
407+
gql``;
408+
409+
const { data, dataState } = useQuery(query, {
410+
variables: { type: "main" },
411+
returnPartialData: true,
412+
});
413+
414+
expectTypeOf(data).toEqualTypeOf<
415+
| DataValue.Complete<{ character: string }>
416+
| DataValue.Streaming<{ character: string }>
417+
| DataValue.Partial<{ character: string }>
418+
| undefined
419+
>();
420+
expectTypeOf(dataState).toEqualTypeOf<
421+
"empty" | "partial" | "streaming" | "complete"
422+
>();
423+
}
424+
425+
{
426+
const query: TypedDocumentNode<{ character: string }, { episode: 10 }> =
427+
gql``;
428+
429+
const { data, dataState } = useQuery(query, {
430+
variables: { episode: 10 },
431+
});
432+
433+
expectTypeOf(data).toEqualTypeOf<
434+
| DataValue.Complete<{ character: string }>
435+
| DataValue.Streaming<{ character: string }>
436+
| undefined
437+
>();
438+
expectTypeOf(dataState).toEqualTypeOf<"empty" | "streaming" | "complete">();
439+
}
440+
441+
{
442+
const query: TypedDocumentNode<{ character: string }, { episode: 10 }> =
443+
gql``;
444+
445+
const { data, dataState } = useQuery(query, {
446+
variables: { episode: 10 },
447+
returnPartialData: false,
448+
});
449+
450+
expectTypeOf(data).toEqualTypeOf<
451+
| DataValue.Complete<{ character: string }>
452+
| DataValue.Streaming<{ character: string }>
453+
| undefined
454+
>();
455+
expectTypeOf(dataState).toEqualTypeOf<"empty" | "streaming" | "complete">();
456+
}
457+
458+
{
459+
const query: TypedDocumentNode<{ character: string }, { episode: 10 }> =
460+
gql``;
461+
462+
const { data, dataState } = useQuery(query, {
463+
variables: { episode: 10 },
464+
returnPartialData: true,
465+
});
466+
467+
expectTypeOf(data).toEqualTypeOf<
468+
| DataValue.Complete<{ character: string }>
469+
| DataValue.Streaming<{ character: string }>
470+
| DataValue.Partial<{ character: string }>
471+
| undefined
472+
>();
473+
expectTypeOf(dataState).toEqualTypeOf<
474+
"empty" | "partial" | "streaming" | "complete"
475+
>();
476+
}
477+
478+
{
479+
const query: TypedDocumentNode<{ character: string }, { main: true }> =
480+
gql``;
481+
482+
const { data, dataState } = useQuery(query, {
483+
variables: { main: true },
484+
});
485+
486+
expectTypeOf(data).toEqualTypeOf<
487+
| DataValue.Complete<{ character: string }>
488+
| DataValue.Streaming<{ character: string }>
489+
| undefined
490+
>();
491+
expectTypeOf(dataState).toEqualTypeOf<"empty" | "streaming" | "complete">();
492+
}
493+
494+
{
495+
const query: TypedDocumentNode<{ character: string }, { main: true }> =
496+
gql``;
497+
498+
const { data, dataState } = useQuery(query, {
499+
variables: { main: true },
500+
returnPartialData: false,
501+
});
502+
503+
expectTypeOf(data).toEqualTypeOf<
504+
| DataValue.Complete<{ character: string }>
505+
| DataValue.Streaming<{ character: string }>
506+
| undefined
507+
>();
508+
expectTypeOf(dataState).toEqualTypeOf<"empty" | "streaming" | "complete">();
509+
}
510+
511+
{
512+
const query: TypedDocumentNode<{ character: string }, { main: true }> =
513+
gql``;
514+
515+
const { data, dataState } = useQuery(query, {
516+
variables: { main: true },
517+
returnPartialData: true,
518+
});
519+
520+
expectTypeOf(data).toEqualTypeOf<
521+
| DataValue.Complete<{ character: string }>
522+
| DataValue.Streaming<{ character: string }>
523+
| DataValue.Partial<{ character: string }>
524+
| undefined
525+
>();
526+
expectTypeOf(dataState).toEqualTypeOf<
527+
"empty" | "partial" | "streaming" | "complete"
528+
>();
529+
}
530+
});
531+
370532
test("always returns empty data/dataState with unconditional skipToken", () => {
371533
const query: TypedDocumentNode<
372534
{ character: string },

0 commit comments

Comments
 (0)