Skip to content

Commit

Permalink
Check if condition on defer/stream fragments
Browse files Browse the repository at this point in the history
Summary: Add support for if condition in defer and stream fragments in tests using Relay MockPayloadGenerator

Differential Revision: D55784435

fbshipit-source-id: 9cc509b8a10ed35d3fb4a4a9c64b14abde485684
  • Loading branch information
Fernando Gorodscy authored and facebook-github-bot committed Apr 5, 2024
1 parent d1cf472 commit 7cc4f2b
Show file tree
Hide file tree
Showing 13 changed files with 1,784 additions and 1 deletion.
4 changes: 3 additions & 1 deletion packages/relay-test-utils/RelayMockPayloadGenerator.js
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,9 @@ class RelayMockPayloadGenerator {
// falls through
case DEFER:
case STREAM: {
if (this._generateDeferredPayload) {
const isDeferreable =
selection.if == null || this._variables[selection.if];
if (this._generateDeferredPayload && isDeferreable) {
const deferredData = this._traverseSelections(
selection.selections,
typeName,
Expand Down
132 changes: 132 additions & 0 deletions packages/relay-test-utils/__tests__/RelayMockPayloadGenerator-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -1759,3 +1759,135 @@ test('generate mock for deferred fragments', () => {
{generateDeferredPayload: true},
);
});

test('generate mock for deferred fragments with if condition true', () => {
graphql`
fragment RelayMockPayloadGeneratorTest62Fragment on User {
name
}
`;
testGeneratedData(
graphql`
query RelayMockPayloadGeneratorTest62Query {
node(id: "my-id") {
id
...RelayMockPayloadGeneratorTest62Fragment @defer(if: true)
}
}
`,
null,
{generateDeferredPayload: true},
);
});

test('generate mock for deferred fragments with if condition false', () => {
graphql`
fragment RelayMockPayloadGeneratorTest63Fragment on User {
name
}
`;
testGeneratedData(
graphql`
query RelayMockPayloadGeneratorTest63Query {
node(id: "my-id") {
id
...RelayMockPayloadGeneratorTest63Fragment @defer(if: false)
}
}
`,
null,
{generateDeferredPayload: true},
);
});

test('generate mock for streamed fragments', () => {
graphql`
fragment RelayMockPayloadGeneratorTest64Fragment on User {
id
}
`;
testGeneratedData(
graphql`
query RelayMockPayloadGeneratorTest64Query {
me {
... on User {
friends(first: 10)
@stream_connection(initial_count: 4, key: "test-64__friends") {
edges {
node {
...RelayMockPayloadGeneratorTest64Fragment
}
}
}
}
}
}
`,
null,
{generateDeferredPayload: true},
);
});

test('generate mock for streamed fragments with if condition true', () => {
graphql`
fragment RelayMockPayloadGeneratorTest65Fragment on User {
id
}
`;
testGeneratedData(
graphql`
query RelayMockPayloadGeneratorTest65Query {
me {
... on User {
friends(first: 10)
@stream_connection(
initial_count: 4
key: "test-65__friends"
if: true
) {
edges {
node {
...RelayMockPayloadGeneratorTest65Fragment
}
}
}
}
}
}
`,
null,
{generateDeferredPayload: true},
);
});

test('generate mock for streamed fragments with if condition false', () => {
graphql`
fragment RelayMockPayloadGeneratorTest66Fragment on User {
id
}
`;
testGeneratedData(
graphql`
query RelayMockPayloadGeneratorTest66Query {
me {
... on User {
friends(first: 10)
@stream_connection(
initial_count: 4
key: "test-66__friends"
if: false
) {
edges {
node {
...RelayMockPayloadGeneratorTest66Fragment
}
}
}
}
}
}
`,
null,
{generateDeferredPayload: true},
);
});

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 7cc4f2b

Please sign in to comment.