public void TestMutation() { string query = @"{ ""query"": ""mutation ($human:HumanInput!){ createHuman(human: $human) { id fullname } }"", ""variables"": { ""human"": { ""fullname"": ""Bobba Fett"",""id"": ""3"" } } }"; string expected = @"{ ""data"": { ""createHuman"": { ""id"": ""3"",""fullname"": ""Bobba Fett"" } } }"; StarWarsSchema swss = this._provider.GetRequiredService <StarWarsSchema>(); var result = swss.Execute(_ => { //get the input into GraphQL format GraphQL.Inputs queryInputs = query.ToInputs(); foreach (KeyValuePair <string, object> qIn in queryInputs) { if (qIn.Key == "variables") { string json = JsonConvert.SerializeObject(qIn.Value, Formatting.Indented); _.Inputs = json.ToInputs(); } if (qIn.Key == "query") { _.Query = qIn.Value.ToString(); } } }); _output.WriteLine("Query:" + query); _output.WriteLine("Result:" + result); JToken actualJson = JToken.Parse(result); JToken expectedJson = JToken.Parse(expected); Assert.Equal(expectedJson.ToString(), actualJson.ToString()); }
static void Main(string[] args) { //setup our DI IServiceCollection services = new ServiceCollection() .AddSingleton <IDependencyResolver>(s => new FuncDependencyResolver(s.GetRequiredService)) .AddSingleton <IDocumentExecuter, DocumentExecuter>() .AddSingleton <StarWarsData>() .AddSingleton <StarWarsQuery>() .AddSingleton <StarWarsMutation>() .AddSingleton <HumanType>() .AddSingleton <HumanInputType>() .AddSingleton <DroidType>() .AddSingleton <CharacterInterface>() .AddSingleton <EpisodeEnum>() .AddSingleton <ISchema, StarWarsSchema>() .AddSingleton <StarWarsSchema>(); //setup the schema ServiceProvider provider = services.BuildServiceProvider(); StarWarsSchema swss = provider.GetRequiredService <StarWarsSchema>(); //do the GUI stuff Console.WriteLine("Welcome to the Star Wars GraphQL Implementation"); Console.WriteLine("Press CTRL C or type EXIT to exit"); var inputLine = ""; while (inputLine.ToUpper() != "EXIT") { Console.WriteLine("Please enter a valid query:"); inputLine = Console.ReadLine(); var result = swss.Execute(_ => { //get the input into GraphQL format GraphQL.Inputs queryInputs = inputLine.ToInputs(); foreach (KeyValuePair <string, object> qIn in queryInputs) { if (qIn.Key == "variables") { string json = JsonConvert.SerializeObject(qIn.Value, Formatting.Indented); _.Inputs = json.ToInputs(); } if (qIn.Key == "query") { _.Query = qIn.Value.ToString(); } } }); Console.WriteLine($"Result = {result}"); } }
public async Task<IActionResult> Post([FromBody] GraphQlQuery query) { var schema = new MySchema(); var inputs = new GraphQL.Inputs(query.Variables.AsDictionary());//.ToInputs(); var result = await new DocumentExecuter().ExecuteAsync( schema.GraphQlSchema, null, query.Query, query.OperationName, inputs); if (result.Errors?.Count > 0) { return BadRequest(); } return Ok(result); }
public Variables GetVariableValues(Document document, ISchema schema, VariableDefinitions variableDefinitions, Inputs inputs) { var variables = new Variables(); variableDefinitions.Apply(v => { var variable = new Variable(); variable.Name = v.Name; object variableValue = null; inputs?.TryGetValue(v.Name, out variableValue); variable.Value = GetVariableValue(document, schema, v, variableValue); variables.Add(variable); }); return(variables); }
public Variables GetVariableValues(ISchema schema, VariableDefinitions variableDefinitions, Inputs inputs) { var variables = new Variables(); variableDefinitions.Apply(v => { var variable = new Variable(); variable.Name = v.Name; object variableValue; if (inputs != null && inputs.TryGetValue(v.Name, out variableValue)) { var valueAst = variableValue.AstFromValue(schema, v.Type.GraphTypeFromType(schema)); variable.Value = GetVariableValue(schema, v, valueAst); } else { variable.Value = GetVariableValue(schema, v, v.DefaultValue); } variables.Add(variable); }); return(variables); }