public void Object_Field_Visibility_Is_Correctly_Inherited_2() { // arrange var variables = new Mock <IVariableValueCollection>(); variables.Setup(t => t.GetVariable <bool>(It.IsAny <NameString>())) .Returns((NameString name) => name.Equals("v")); ISchema schema = SchemaBuilder.New() .AddStarWarsTypes() .Create(); ObjectType droid = schema.GetType <ObjectType>("Droid"); DocumentNode document = Utf8GraphQLParser.Parse( @"query foo($v: Boolean, $q: Boolean) { hero(episode: EMPIRE) @include(if: $v) { name @include(if: $q) } ... on Query { hero(episode: EMPIRE) { id } } ... @include(if: $v) { hero(episode: EMPIRE) { height } } }"); OperationDefinitionNode operation = document.Definitions.OfType <OperationDefinitionNode>().Single(); var fragments = new FragmentCollection(schema, document); // act IReadOnlyDictionary <SelectionSetNode, PreparedSelectionSet> selectionSets = OperationCompiler.Compile(schema, fragments, operation); // assert var op = new PreparedOperation( "abc", document, operation, schema.QueryType, selectionSets); IPreparedSelectionList rootSelections = op.RootSelectionSet.GetSelections(op.RootSelectionSet.GetPossibleTypes().First()); IPreparedSelectionList droidSelections = op.GetSelections(rootSelections[0].SelectionSet !, droid); Assert.Collection( droidSelections.Where(t => t.IsIncluded(variables.Object)), t => Assert.Equal("id", t.ResponseName), t => Assert.Equal("height", t.ResponseName)); op.Print().MatchSnapshot(); }
public void Prepare_Inline_Fragment() { // arrange ISchema schema = SchemaBuilder.New() .AddStarWarsTypes() .Create(); DocumentNode document = Utf8GraphQLParser.Parse( @"{ hero(episode: EMPIRE) { name ... on Droid { primaryFunction } ... on Human { homePlanet } } }"); OperationDefinitionNode operation = document.Definitions.OfType <OperationDefinitionNode>().Single(); var fragments = new FragmentCollection(schema, document); // act IReadOnlyDictionary <SelectionSetNode, PreparedSelectionSet> selectionSets = OperationCompiler.Compile(schema, fragments, operation); // assert IPreparedSelection hero = selectionSets[operation.SelectionSet].GetSelections(schema.QueryType).Single(); Assert.Equal("hero", hero.ResponseName); Assert.Collection( selectionSets[hero.SelectionSet].GetSelections(schema.GetType <ObjectType>("Droid")), selection => Assert.Equal("name", selection.ResponseName), selection => Assert.Equal("primaryFunction", selection.ResponseName)); Assert.Collection( selectionSets[hero.SelectionSet].GetSelections(schema.GetType <ObjectType>("Human")), selection => Assert.Equal("name", selection.ResponseName), selection => Assert.Equal("homePlanet", selection.ResponseName)); var op = new PreparedOperation( "abc", document, operation, schema.QueryType, selectionSets); op.Print().MatchSnapshot(); }
public void Field_Based_Optimizers() { // arrange var variables = new Mock <IVariableValueCollection>(); variables.Setup(t => t.GetVariable <bool>(It.IsAny <NameString>())) .Returns((NameString name) => name.Equals("v")); ISchema schema = SchemaBuilder.New() .AddQueryType(d => d .Name("Query") .Field("root") .Resolve(new Foo()) .UseOptimizer(new SimpleOptimizer())) .Create(); DocumentNode document = Utf8GraphQLParser.Parse( @"{ root { bar { text } } }"); OperationDefinitionNode operation = document.Definitions.OfType <OperationDefinitionNode>().Single(); var fragments = new FragmentCollection(schema, document); var optimizers = new List <NoopOptimizer> { new NoopOptimizer() }; // act IReadOnlyDictionary <SelectionSetNode, PreparedSelectionSet> selectionSets = OperationCompiler.Compile(schema, fragments, operation, optimizers); // assert var op = new PreparedOperation( "abc", document, operation, schema.QueryType, selectionSets); op.Print().MatchSnapshot(); }
public void Prepare_Fragment_Definition() { // arrange ISchema schema = SchemaBuilder.New() .AddStarWarsTypes() .Create(); DocumentNode document = Utf8GraphQLParser.Parse( @"{ hero(episode: EMPIRE) { name ... abc ... def } } fragment abc on Droid { primaryFunction } fragment def on Human { homePlanet } "); OperationDefinitionNode operation = document.Definitions.OfType <OperationDefinitionNode>().Single(); var fragments = new FragmentCollection(schema, document); // act IReadOnlyDictionary <SelectionSetNode, PreparedSelectionSet> selectionSets = OperationCompiler.Compile(schema, fragments, operation); // assert var op = new PreparedOperation( "abc", document, operation, schema.QueryType, selectionSets); op.Print().MatchSnapshot(); }