Skip to content

Commit db9df27

Browse files
committed
some edge cases for discussion!
1 parent d9493e9 commit db9df27

File tree

1 file changed

+215
-0
lines changed

1 file changed

+215
-0
lines changed

src/execution/__tests__/defer-test.ts

Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,221 @@ describe('Execute: defer directive', () => {
431431
},
432432
]);
433433
});
434+
435+
it('Can separately emit defer fragments with different labels with varying fields', async () => {
436+
const document = parse(`
437+
query HeroNameQuery {
438+
hero {
439+
id
440+
name
441+
... @defer(label: "DeferID") {
442+
id
443+
}
444+
... @defer(label: "DeferName") {
445+
name
446+
}
447+
}
448+
}
449+
`);
450+
const result = await complete(document);
451+
expectJSON(result).toDeepEqual([
452+
{
453+
data: {
454+
hero: {
455+
id: '1',
456+
name: 'Luke',
457+
},
458+
},
459+
hasNext: true,
460+
},
461+
{
462+
incremental: [
463+
{
464+
data: {
465+
id: '1',
466+
},
467+
path: ['hero'],
468+
label: 'DeferID',
469+
},
470+
{
471+
data: {
472+
name: 'Luke',
473+
},
474+
path: ['hero'],
475+
label: 'DeferName',
476+
},
477+
],
478+
hasNext: false,
479+
},
480+
]);
481+
});
482+
483+
it('Does not (yet) separately emit defer fragments with different labels with varying subfields', async () => {
484+
const document = parse(`
485+
query HeroNameQuery {
486+
hero {
487+
id
488+
name
489+
}
490+
... @defer(label: "DeferID") {
491+
hero {
492+
id
493+
}
494+
}
495+
... @defer(label: "DeferName") {
496+
hero {
497+
name
498+
}
499+
}
500+
}
501+
`);
502+
const result = await complete(document);
503+
expectJSON(result).toDeepEqual([
504+
{
505+
data: {
506+
hero: {
507+
id: '1',
508+
name: 'Luke',
509+
},
510+
},
511+
hasNext: true,
512+
},
513+
{
514+
incremental: [
515+
{
516+
data: {
517+
hero: {
518+
id: '1',
519+
name: 'Luke',
520+
},
521+
},
522+
path: [],
523+
label: 'DeferID',
524+
},
525+
{
526+
data: {
527+
hero: {
528+
id: '1',
529+
name: 'Luke',
530+
},
531+
},
532+
path: [],
533+
label: 'DeferName',
534+
},
535+
],
536+
hasNext: false,
537+
},
538+
]);
539+
});
540+
541+
it('Does not (yet) separately emit defer fragments with varying subfields of same priorities but different level of defers', async () => {
542+
const document = parse(`
543+
query HeroNameQuery {
544+
hero {
545+
id
546+
name
547+
}
548+
hero {
549+
... @defer(label: "DeferID") {
550+
id
551+
}
552+
}
553+
... @defer(label: "DeferName") {
554+
hero {
555+
name
556+
}
557+
}
558+
}
559+
`);
560+
const result = await complete(document);
561+
expectJSON(result).toDeepEqual([
562+
{
563+
data: {
564+
hero: {
565+
id: '1',
566+
name: 'Luke',
567+
},
568+
},
569+
hasNext: true,
570+
},
571+
{
572+
incremental: [
573+
{
574+
data: {
575+
id: '1',
576+
},
577+
path: ['hero'],
578+
label: 'DeferID',
579+
},
580+
{
581+
data: {
582+
hero: {
583+
id: '1',
584+
name: 'Luke',
585+
},
586+
},
587+
path: [],
588+
label: 'DeferName',
589+
},
590+
],
591+
hasNext: false,
592+
},
593+
]);
594+
});
595+
596+
it('Does not (yet) separately emit nested defer fragments with varying subfields of same priorities but different level of defers', async () => {
597+
const document = parse(`
598+
query HeroNameQuery {
599+
hero {
600+
id
601+
name
602+
}
603+
... @defer(label: "DeferName") {
604+
hero {
605+
name
606+
... @defer(label: "DeferID") {
607+
id
608+
}
609+
}
610+
}
611+
}
612+
`);
613+
const result = await complete(document);
614+
expectJSON(result).toDeepEqual([
615+
{
616+
data: {
617+
hero: {
618+
id: '1',
619+
name: 'Luke',
620+
},
621+
},
622+
hasNext: true,
623+
},
624+
{
625+
incremental: [
626+
{
627+
data: {
628+
id: '1',
629+
},
630+
path: ['hero'],
631+
label: 'DeferID',
632+
},
633+
{
634+
data: {
635+
hero: {
636+
id: '1',
637+
name: 'Luke',
638+
},
639+
},
640+
path: [],
641+
label: 'DeferName',
642+
},
643+
],
644+
hasNext: false,
645+
},
646+
]);
647+
});
648+
434649
it('Handles errors thrown in deferred fragments', async () => {
435650
const document = parse(`
436651
query HeroNameQuery {

0 commit comments

Comments
 (0)