示例#1
0
        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());
        }
示例#2
0
        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}");
            }
        }
示例#3
0
        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);
        }
示例#5
0
        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);
        }