public void LastFieldRenameWins() { // arrange DocumentNode schema_a = Utf8GraphQLParser.Parse( "type A { b1: B } " + "type B implements D { c: String } " + "type C implements D { c: String } " + "interface D { c: String }"); DocumentNode schema_b = Utf8GraphQLParser.Parse( "type B { b1: String b3: String } type C { c: String }"); // act DocumentNode a = SchemaMerger.New() .AddSchema("A", schema_a) .AddSchema("B", schema_b) .RenameField(new FieldReference("B", "c"), "c123", "A") .RenameField(new FieldReference("C", "c"), "c456", "A") .RenameField(new FieldReference("D", "c"), "c789", "A") .Merge(); DocumentNode b = SchemaMerger.New() .AddSchema("A", schema_a) .AddSchema("B", schema_b) .RenameField(new FieldReference("B", "c"), "c123", "A") .RenameField(new FieldReference("D", "c"), "c789", "A") .RenameField(new FieldReference("C", "c"), "c456", "A") .Merge(); // assert a.Print().MatchSnapshot(SnapshotNameExtension.Create("A")); b.Print().MatchSnapshot(SnapshotNameExtension.Create("B")); }
public void RenameReferencingType() { // arrange DocumentNode schema_a = Utf8GraphQLParser.Parse( "type A { b1: B } " + "type B implements C { c: String } " + "interface C { c: String }"); DocumentNode schema_b = Utf8GraphQLParser.Parse( "type B { b1: String b3: String } type C { c: String }"); // act DocumentNode a = SchemaMerger.New() .AddSchema("A", schema_a) .AddSchema("B", schema_b) .RenameType("A", "B", "Foo") .Merge(); DocumentNode b = SchemaMerger.New() .AddSchema("B", schema_b) .AddSchema("A", schema_a) .RenameType("A", "B", "Foo") .Merge(); // assert a.Print().MatchSnapshot(SnapshotNameExtension.Create("A")); b.Print().MatchSnapshot(SnapshotNameExtension.Create("B")); }
public void MergeTypeWithCustomRule() { // arrange DocumentNode schema_a = Utf8GraphQLParser.Parse("type Foo { a: String }"); DocumentNode schema_b = Utf8GraphQLParser.Parse("type Foo { b: String }"); // act DocumentNode a = SchemaMerger.New() .AddSchema("A", schema_a) .AddSchema("B", schema_b) .AddTypeMergeRule(next => (context, types) => { ObjectTypeInfo[] typeInfos = types.OfType <ObjectTypeInfo>().ToArray(); var fields = typeInfos[0].Definition.Fields.ToList(); fields.AddRange(typeInfos[1].Definition.Fields); context.AddType( typeInfos[0].Definition.WithFields(fields)); }) .Merge(); // assert a.Print().MatchSnapshot(); }
public static string Serialize(ISchema schema) { if (schema is null) { throw new ArgumentNullException(nameof(schema)); } DocumentNode document = SerializeSchema(schema); return(document.Print()); }
public void Serialize_FragmentWithVariableDefs_InOutShouldBeTheSame() { // arrange var query = "fragment Foo ($bar: [String!]!) on Bar { baz }"; DocumentNode queryDocument = Utf8GraphQLParser.Parse(query, new ParserOptions(allowFragmentVariables: true)); // act var printed = queryDocument.Print(false); // assert Assert.Equal(query, printed); }
public void Serialize_KitchenSinkWithoutIndentation_CanBeParsed() { // arrange var query = FileResource.Open("kitchen-sink.graphql"); DocumentNode queryDocument = Utf8GraphQLParser.Parse(query); // act var serializedQuery = queryDocument.Print(); // assert DocumentNode parsedQuery = Utf8GraphQLParser.Parse(serializedQuery); Assert.Equal(serializedQuery, parsedQuery.Print()); }
public void Serialize_QueryWithVarDeclaration_InOutShouldBeTheSame() { // arrange var query = "query Foo($bar: [String!]!) { foo(s: \"String\") " + "{ bar @foo { baz @foo @bar } } }"; DocumentNode queryDocument = Utf8GraphQLParser.Parse(query); // act var printed = queryDocument.Print(false); // assert Assert.Equal(query, printed); }
public void EnumType_AddValue() { // arrange const string schema = "enum Foo { BAR BAZ }"; const string extensions = "extend enum Foo { QUX }"; // act var rewriter = new AddSchemaExtensionRewriter(); DocumentNode merged = rewriter.AddExtensions( Utf8GraphQLParser.Parse(schema), Utf8GraphQLParser.Parse(extensions)); // assert merged.Print().MatchSnapshot(); }
public static void Serialize(ISchema schema, TextWriter textWriter) { if (schema is null) { throw new ArgumentNullException(nameof(schema)); } if (textWriter is null) { throw new ArgumentNullException(nameof(textWriter)); } DocumentNode document = SerializeSchema(schema); textWriter.Write(document.Print()); }
public void MergeSimpleSchemaWithDefaultHandler() { // arrange DocumentNode schema_a = Utf8GraphQLParser.Parse("union Foo = Bar | Baz union A = B | C"); DocumentNode schema_b = Utf8GraphQLParser.Parse("union Foo = Bar | Baz"); // act DocumentNode schema = SchemaMerger.New() .AddSchema("A", schema_a) .AddSchema("B", schema_b) .Merge(); // assert schema.Print().MatchSnapshot(); }
public void MergeTypeWithCustomHandler() { // arrange DocumentNode schema_a = Utf8GraphQLParser.Parse("type Foo { a: String }"); DocumentNode schema_b = Utf8GraphQLParser.Parse("type Foo { b: String }"); // act DocumentNode a = SchemaMerger.New() .AddSchema("A", schema_a) .AddSchema("B", schema_b) .AddTypeMergeHandler <CustomTypeMergeHandler>() .Merge(); // assert a.Print().MatchSnapshot(); }
public void Rename_Type_With_Various_Variants() { // arrange DocumentNode initial = Utf8GraphQLParser.Parse( "type A { b1: B! b2: [B!] b3: [B] b4: [B!]! } " + "type B implements C { c: String } " + "interface C { c: String }"); // act DocumentNode merged = SchemaMerger.New() .AddSchema("A", initial) .RenameType("B", "Foo", "A") .Merge(); // assert merged.Print().MatchSnapshot(); }
public void MergeDirectivesWithCustomHandler() { // arrange DocumentNode schema_a = Utf8GraphQLParser.Parse("directive @foo on FIELD"); DocumentNode schema_b = Utf8GraphQLParser.Parse("directive @foo(a: String) on FIELD"); // act DocumentNode a = SchemaMerger.New() .AddSchema("A", schema_a) .AddSchema("B", schema_b) .AddDirectiveMergeHandler <CustomDirectiveMergeHandler>() .Merge(); // assert a.Print().MatchSnapshot(); }
public void FieldDefinitionDoesNotHaveSameTypeShape() { // arrange DocumentNode schema_a = Utf8GraphQLParser.Parse( "type A { b1: String b2: String } type B { c: String! }"); DocumentNode schema_b = Utf8GraphQLParser.Parse( "type A { b1: String b3: String } type B { c: String }"); // act DocumentNode merged = SchemaMerger.New() .AddSchema("A", schema_a) .AddSchema("B", schema_b) .Merge(); // assert merged.Print().MatchSnapshot(); }
public void MergeDemoSchemaWithDefaultHandler() { // arrange DocumentNode schema_a = Utf8GraphQLParser.Parse( FileResource.Open("Contract.graphql")); DocumentNode schema_b = Utf8GraphQLParser.Parse( FileResource.Open("Customer.graphql")); // act DocumentNode schema = SchemaMerger.New() .AddSchema("A", schema_a) .AddSchema("B", schema_b) .Merge(); // assert schema.Print().MatchSnapshot(); }
public void BuildRemoteQueryCanOverrideOperationName() { // arrange IImmutableStack <SelectionPathComponent> path = SelectionPathParser.Parse("a.b.c.d(a: $fields:bar)"); DocumentNode initialQuery = Utf8GraphQLParser.Parse( @"{ foo { bar { baz { ... on Baz { qux } } } } } "); FieldNode field = initialQuery.Definitions .OfType <OperationDefinitionNode>().Single() .SelectionSet.Selections .OfType <FieldNode>().Single() .SelectionSet !.Selections .OfType <FieldNode>().Single(); // act DocumentNode newQuery = RemoteQueryBuilder.New() .SetOperation(new NameNode( nameof(BuildRemoteQueryCanOverrideOperationName)), OperationType.Query) .SetSelectionPath(path) .SetRequestField(field) .AddVariable("__fields_bar", new NamedTypeNode(null, new NameNode("String"))) .Build("abc", new Dictionary <(NameString Type, NameString Schema), NameString>()); // assert newQuery.Print().MatchSnapshot(); }
public void AddDelegationPath_SingleComponent_TwoArgs() { // arrange var fieldNode = new FieldDefinitionNode( null, new NameNode("foo"), null, Array.Empty <InputValueDefinitionNode>(), new NamedTypeNode(new NameNode("Type")), Array.Empty <DirectiveNode>()); // act var path = new SelectionPathComponent( new NameNode("bar"), new[] { new ArgumentNode("baz", new ScopedVariableNode( null, new NameNode("qux"), new NameNode("quux"))), new ArgumentNode("value_arg", "value") }); fieldNode = fieldNode.AddDelegationPath("schemName", path); // assert var schema = new DocumentNode(new[] { new ObjectTypeDefinitionNode ( null, new NameNode("Object"), null, Array.Empty <DirectiveNode>(), Array.Empty <NamedTypeNode>(), new[] { fieldNode } ) }); schema.Print().MatchSnapshot(); }
public void MergeSchemaAndRemoveTypeAOnSchemaA() { // arrange DocumentNode schema_a = Utf8GraphQLParser.Parse( "type A { b1: String } type B { c: String }"); DocumentNode schema_b = Utf8GraphQLParser.Parse( "type A { b2: String } type B { c: String }"); // act DocumentNode schema = SchemaMerger.New() .AddSchema("A", schema_a) .AddSchema("B", schema_b) .IgnoreType("A", "A") .Merge(); // assert schema.Print().MatchSnapshot(); }
public void MergeSchemaAndRenameFieldB1toB11OnSchemaA() { // arrange DocumentNode schema_a = Utf8GraphQLParser.Parse( "type A { b1: String b2: String } type B { c: String }"); DocumentNode schema_b = Utf8GraphQLParser.Parse( "type A { b1: String b3: String } type B { c: String }"); // act DocumentNode schema = SchemaMerger.New() .AddSchema("A", schema_a) .AddSchema("B", schema_b) .RenameField(new FieldReference("A", "b1"), "b11", "A") .Merge(); // assert schema.Print().MatchSnapshot(); }
public void MergeSchemaAndRenameTypeAtoXyzOnAllSchemas() { // arrange DocumentNode schema_a = Utf8GraphQLParser.Parse( "type A { b1: String b2: String } type B { c: String }"); DocumentNode schema_b = Utf8GraphQLParser.Parse( "type A { b1: String b3: String } type B { c: String }"); // act DocumentNode schema = SchemaMerger.New() .AddSchema("A", schema_a) .AddSchema("B", schema_b) .RenameType("A", "Xyz") .Merge(); // assert schema.Print().MatchSnapshot(); }
public void MergeDemoSchemaAndRemoveRootTypesOnSchemaA() { // arrange DocumentNode schema_a = Utf8GraphQLParser.Parse( FileResource.Open("Contract.graphql")); DocumentNode schema_b = Utf8GraphQLParser.Parse( FileResource.Open("Customer.graphql")); // act DocumentNode schema = SchemaMerger.New() .AddSchema("A", schema_a) .AddSchema("B", schema_b) .IgnoreRootTypes("A") .Merge(); // assert schema.Print().MatchSnapshot(); }
public void MergeDirectivesWithCustomRule() { // arrange DocumentNode schema_a = Utf8GraphQLParser.Parse("directive @foo on FIELD"); DocumentNode schema_b = Utf8GraphQLParser.Parse("directive @foo(a: String) on FIELD"); // act DocumentNode a = SchemaMerger.New() .AddSchema("A", schema_a) .AddSchema("B", schema_b) .AddDirectiveMergeRule(next => (context, directives) => { context.AddDirective( directives.First(t => t.Definition.Arguments.Any()).Definition); }) .Merge(); // assert a.Print().MatchSnapshot(); }
public void RenameInterfaceField() { // arrange DocumentNode schema_a = Utf8GraphQLParser.Parse( "type A { b1: B } " + "type B implements D { c: String } " + "type C implements D { c: String } " + "interface D { c: String }"); DocumentNode schema_b = Utf8GraphQLParser.Parse( "type B { b1: String b3: String } type C { c: String }"); // act DocumentNode a = SchemaMerger.New() .AddSchema("A", schema_a) .AddSchema("B", schema_b) .RenameField(new FieldReference("D", "c"), "c123", "A") .Merge(); // assert a.Print().MatchSnapshot(); }