Skip to content

Commit 3528ee1

Browse files
authored
Reference implementation of defer and stream spec (#4537)
1 parent eb0accb commit 3528ee1

39 files changed

+12995
-109
lines changed

src/execution/__tests__/cancellation-test.ts

Lines changed: 746 additions & 1 deletion
Large diffs are not rendered by default.

src/execution/__tests__/collectFields-test.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,52 @@ function collectRootFields(query: string) {
4242

4343
describe('collectFields', () => {
4444
describe('overlapping fragment spreads', () => {
45+
it('should not collect a deferred spread after a non-deferred spread has been collected', () => {
46+
const { newDeferUsages } = collectRootFields(`
47+
query {
48+
...FragmentName
49+
...FragmentName @defer
50+
}
51+
fragment FragmentName on Query {
52+
field
53+
}
54+
`);
55+
56+
expect(newDeferUsages).to.have.lengthOf(0);
57+
});
58+
59+
it('should not collect a deferred spread after a deferred spread has been collected', () => {
60+
const { newDeferUsages } = collectRootFields(`
61+
query {
62+
...FragmentName @defer
63+
...FragmentName @defer
64+
}
65+
fragment FragmentName on Query {
66+
field
67+
}
68+
`);
69+
70+
expect(newDeferUsages).to.have.lengthOf(1);
71+
});
72+
73+
it('should collect a non-deferred spread after a deferred spread has been collected', () => {
74+
const { groupedFieldSet } = collectRootFields(`
75+
query {
76+
...FragmentName @defer
77+
...FragmentName
78+
}
79+
fragment FragmentName on Query {
80+
field
81+
}
82+
`);
83+
84+
const fieldDetailsList = groupedFieldSet.get('field');
85+
86+
invariant(fieldDetailsList != null);
87+
88+
expect(fieldDetailsList).to.have.lengthOf(2);
89+
});
90+
4591
it('should not collect a non-deferred spread after a non-deferred spread has been collected', () => {
4692
const { groupedFieldSet } = collectRootFields(`
4793
query {

0 commit comments

Comments
 (0)