Esempio n. 1
0
        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"));
        }
Esempio n. 2
0
        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"));
        }
Esempio n. 3
0
        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();
        }
Esempio n. 4
0
        public static string Serialize(ISchema schema)
        {
            if (schema is null)
            {
                throw new ArgumentNullException(nameof(schema));
            }

            DocumentNode document = SerializeSchema(schema);

            return(document.Print());
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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());
        }
Esempio n. 7
0
        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();
        }
Esempio n. 9
0
        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());
        }
Esempio n. 10
0
        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();
        }
Esempio n. 11
0
        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();
        }
Esempio n. 12
0
        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();
        }
Esempio n. 13
0
        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();
        }
Esempio n. 14
0
        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();
        }
Esempio n. 15
0
        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();
        }
Esempio n. 17
0
        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();
        }
Esempio n. 18
0
        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();
        }
Esempio n. 19
0
        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();
        }
Esempio n. 20
0
        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();
        }
Esempio n. 21
0
        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();
        }
Esempio n. 22
0
        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();
        }
Esempio n. 23
0
        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();
        }