Пример #1
0
        public void QueryWithDefaultArgumentsOverrideCodeDefault()
        {
            var schemaProvider = SchemaBuilder.FromObject <TestSchema>();

            // code default of 5
            schemaProvider.ReplaceField("people", new { limit = 5 }, (db, p) => db.People.Take(p.limit), "List of people with limit");

            // should use gql default of 6
            var tree = new GraphQLCompiler(schemaProvider, new DefaultMethodProvider()).Compile(@"
query MyQuery($limit: Int = 6) {
    people(limit: $limit) { id name projects { id name } }
}
");

            Assert.Single(tree.Operations.First().Fields);
            TestSchema context = new TestSchema();

            for (int i = 0; i < 20; i++)
            {
                context.People.Add(new Person());
            }
            var     qr     = tree.ExecuteQuery(context);
            dynamic people = (dynamic)qr.Data["people"];

            // we only have the fields requested
            Assert.Equal(6, Enumerable.Count(people));
        }
Пример #2
0
 public Expression <Func <TestSchema, Person> > AddPersonNames(TestSchema db, PeopleMutationsArgs args)
 {
     db.People.Add(new Person {
         Id = 11, Name = args.Names[0], LastName = args.Names[1]
     });
     return(ctx => ctx.People.First(p => p.Id == 11));
 }
Пример #3
0
        public void SupportsMutationArray()
        {
            var schemaProvider = SchemaBuilder.FromObject <TestSchema>(false);

            schemaProvider.AddInputType <InputObject>("InputObject", "Using an object in the arguments");
            schemaProvider.AddMutationFrom(new PeopleMutations());
            // Add a argument field with a require parameter
            var gql = new QueryRequest
            {
                Query     = @"mutation AddPerson($names: [String]) {
  addPersonNames(names: $names) {
    id name lastName
  }
}",
                Variables = new QueryVariables {
                    { "names", new [] { "Bill", "Frank" } }
                }
            };
            var     testSchema      = new TestSchema();
            var     results         = schemaProvider.ExecuteQuery(gql, testSchema, null, null);
            dynamic addPersonResult = results.Data["addPersonNames"];

            // we only have the fields requested
            Assert.Equal(3, addPersonResult.GetType().GetFields().Length);
            Assert.Equal("id", addPersonResult.GetType().GetFields()[0].Name);
            Assert.Equal(11, addPersonResult.id);
            Assert.Equal("name", addPersonResult.GetType().GetFields()[1].Name);
            Assert.Equal("Bill", addPersonResult.name);
            Assert.Equal("Frank", addPersonResult.lastName);
        }
Пример #4
0
        public void SupportsMutationObject()
        {
            var schemaProvider = SchemaBuilder.FromObject <TestSchema>(false);

            schemaProvider.AddMutationFrom(new PeopleMutations());
            // Add a argument field with a require parameter
            var gql = new QueryRequest {
                Query = @"mutation AddPerson($names: [String]) {
  addPersonInput(nameInput: $names) {
    id name lastName
  }
}",
                // object will come through as json in the request
                Variables = new QueryVariables {
                    { "names", Newtonsoft.Json.JsonConvert.DeserializeObject("{\"name\": \"Lisa\", \"lastName\": \"Simpson\"}") }
                }
            };
            dynamic addPersonResult = new TestSchema().QueryObject(gql, schemaProvider);

            Assert.Empty(addPersonResult.Errors);
            addPersonResult = Enumerable.First(addPersonResult.Data);
            addPersonResult = addPersonResult.Value;
            // we only have the fields requested
            Assert.Equal(3, addPersonResult.GetType().GetFields().Length);
            Assert.Equal("id", addPersonResult.GetType().GetFields()[0].Name);
            Assert.Equal(0, addPersonResult.id);
            Assert.Equal("name", addPersonResult.GetType().GetFields()[1].Name);
            Assert.Equal("Lisa", addPersonResult.name);
            Assert.Equal("Simpson", addPersonResult.lastName);
        }
Пример #5
0
        public void SupportsSelectionFromConstant()
        {
            var schemaProvider = SchemaBuilder.FromObject <TestSchema>(false);

            schemaProvider.AddInputType <InputObject>("InputObject", "Using an object in the arguments");
            schemaProvider.AddMutationFrom(new PeopleMutations());
            // Add a argument field with a require parameter
            var gql = new QueryRequest
            {
                Query     = @"mutation AddPerson($name: String) {
  addPersonAdv(name: $name) {
    id name projects { id }
  }
}",
                Variables = new QueryVariables {
                    { "name", "Bill" }
                }
            };
            var     testSchema      = new TestSchema();
            var     results         = schemaProvider.ExecuteQuery(gql, testSchema, null, null);
            dynamic addPersonResult = results.Data;

            addPersonResult = Enumerable.First(addPersonResult);
            addPersonResult = addPersonResult.Value;
            // we only have the fields requested
            Assert.Equal(3, addPersonResult.GetType().GetFields().Length);
            Assert.Equal("id", addPersonResult.GetType().GetFields()[0].Name);
            Assert.Equal("projects", addPersonResult.GetType().GetFields()[2].Name);
            Assert.Equal(1, Enumerable.Count(addPersonResult.projects));
            Assert.Equal("Bill", addPersonResult.name);
        }
Пример #6
0
        public void SupportsMutationOptional()
        {
            var schemaProvider = SchemaBuilder.FromObject <TestSchema>(false);

            schemaProvider.AddMutationFrom(new PeopleMutations());
            // Add a argument field with a require parameter
            var gql = new QueryRequest {
                Query     = @"
                mutation AddPerson($name: String) {
  addPerson(name: $name) {
    id name
  }
}",
                Variables = new QueryVariables {
                }
            };
            dynamic addPersonResult = new TestSchema().QueryObject(gql, schemaProvider).Data["addPerson"];

            // we only have the fields requested
            Assert.Equal(2, addPersonResult.GetType().GetFields().Length);
            Assert.Equal("id", addPersonResult.GetType().GetFields()[0].Name);
            Assert.Equal(555, addPersonResult.id);
            Assert.Equal("name", addPersonResult.GetType().GetFields()[1].Name);
            Assert.Equal("Default", addPersonResult.name);
        }
Пример #7
0
        public void SupportsMutationArray()
        {
            var schemaProvider = SchemaBuilder.FromObject <TestSchema>(false);

            schemaProvider.AddMutationFrom(new PeopleMutations());
            // Add a argument field with a require parameter
            var gql = new QueryRequest {
                Query     = @"mutation AddPerson($names: [String]) {
  addPersonNames(names: $names) {
    id name lastName
  }
}",
                Variables = new QueryVariables {
                    { "names", new [] { "Bill", "Frank" } }
                }
            };
            var     testSchema      = new TestSchema();
            var     results         = testSchema.QueryObject(gql, schemaProvider);
            dynamic addPersonResult = results.Data;

            addPersonResult = Enumerable.First(addPersonResult);
            addPersonResult = addPersonResult.Value;
            // we only have the fields requested
            Assert.Equal(3, addPersonResult.GetType().GetFields().Length);
            Assert.Equal("id", addPersonResult.GetType().GetFields()[0].Name);
            Assert.Equal(11, addPersonResult.id);
            Assert.Equal("name", addPersonResult.GetType().GetFields()[1].Name);
            Assert.Equal("Bill", addPersonResult.name);
            Assert.Equal("Frank", addPersonResult.lastName);
        }
Пример #8
0
        public void MissingRequiredVar()
        {
            var schemaProvider = SchemaBuilder.FromObject <TestSchema>(false);

            schemaProvider.AddMutationFrom(new PeopleMutations());
            // Add a argument field with a require parameter
            var gql = new QueryRequest {
                Query     = @"mutation AddPerson($name: String!) {
  addPerson(name: $name) { id name }
}",
                Variables = new QueryVariables {
                    { "na", "Frank" }
                }
            };
            dynamic addPersonResult = new TestSchema().QueryObject(gql, schemaProvider).Errors;
            var     err             = Enumerable.First(addPersonResult);

            Assert.Equal("Missing required variable 'name' on query 'AddPerson'", err.Message);
        }
Пример #9
0
        public void SupportEntityQueryArgument()
        {
            var schemaProvider = SchemaBuilder.FromObject <TestSchema>(false);

            schemaProvider.ReplaceField("users", new { filter = EntityQuery <User>() }, (ctx, p) => ctx.Users.Where(p.filter), "Return filtered users");
            var gql = new QueryRequest {
                Query     = @"query {
                    users(filter: $filter) { field2 }
                }",
                Variables = new QueryVariables {
                    { "filter", "field2 = \"2\"" }
                }
            };
            var     tree  = new TestSchema().QueryObject(gql, schemaProvider);
            dynamic users = ((IDictionary <string, object>)tree.Data)["users"];

            Assert.Equal(1, Enumerable.Count(users));
            var user = Enumerable.First(users);

            Assert.Equal("2", user.field2);
        }
Пример #10
0
        public Expression <Func <TestSchema, Person> > AddPersonAdv(TestSchema db, PeopleMutationsArgs args)
        {
            // test returning a constant in the expression which allows graphql selection over the schema (assuming the constant is a type in the schema)
            // Ie. in the mutation query you can select any valid fields in the schema from Person
            var person = new Person
            {
                Name  = args.Name,
                Tasks = new List <Task> {
                    new Task {
                        Name = "A"
                    }
                },
                Projects = new List <Project> {
                    new Project {
                        Id = 123
                    }
                }
            };

            return(ctx => person);
        }
Пример #11
0
 public Person AddPersonInput(TestSchema db, PeopleMutationsArgs args)
 {
     return(new Person {
         Name = args.NameInput.Name, LastName = args.NameInput.LastName
     });
 }
Пример #12
0
 public Person AddPerson(TestSchema db, PeopleMutationsArgs args)
 {
     return(new Person {
         Name = string.IsNullOrEmpty(args.Name) ? "Default" : args.Name, Id = 555
     });
 }
Пример #13
0
 public Person AddPersonNames(TestSchema db, PeopleMutationsArgs args)
 {
     return(new Person {
         Name = args.Names[0], LastName = args.Names[1]
     });
 }