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)); }
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)); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
public Person AddPersonInput(TestSchema db, PeopleMutationsArgs args) { return(new Person { Name = args.NameInput.Name, LastName = args.NameInput.LastName }); }
public Person AddPerson(TestSchema db, PeopleMutationsArgs args) { return(new Person { Name = string.IsNullOrEmpty(args.Name) ? "Default" : args.Name, Id = 555 }); }
public Person AddPersonNames(TestSchema db, PeopleMutationsArgs args) { return(new Person { Name = args.Names[0], LastName = args.Names[1] }); }