Beispiel #1
0
        public async Task <IEnumerable <User> > GetAllAsync(string query)
        {
            var queryResult = await Task.Run(() => _graphQl.ExecuteQuery(query));

            var serializedResult = JsonConvert.SerializeObject(queryResult["users"], Formatting.Indented);
            var users            = JsonConvert.DeserializeObject <IEnumerable <User> >(serializedResult);

            return(users);
        }
Beispiel #2
0
        public static void ChildFieldWithParameters <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery("{ account(id:1) { id, name, firstUserWithActive(active:true) { id, name } } }");

            Test.DeepEquals(results, "{ account: { id: 1, name: 'My Test Account', firstUserWithActive: { id: 1, name: 'Joe User' } } }");

            results = gql.ExecuteQuery("{ account(id:1) { id, name, firstUserWithActive(active:false) { id, name } } }");
            Test.DeepEquals(results, "{ account: { id: 1, name: 'My Test Account', firstUserWithActive: null } }");
        }
Beispiel #3
0
        public static bool ChildListFieldWithParameters <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery("{ account(id:1) { id, name, usersWithActive(active:true) { id, name } } }");

            return(Test.DeepEquals(results, "{ account: { id: 1, name: 'My Test Account', usersWithActive: [{ id: 1, name: 'Joe User' }] } }"));

            results = gql.ExecuteQuery("{ account(id:1) { id, name, usersWithActive(active:false) { id, name } } }");
            return(Test.DeepEquals(results, "{ account: { id: 1, name: 'My Test Account', usersWithActive: [] } }"));
        }
Beispiel #4
0
        public static void SimpleMutation <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery("mutation { mutate(id:1,newVal:5) { id, value } }");

            Test.DeepEquals(results, "{ mutate: { id: 1, value: 5 } }");

            var results2 = gql.ExecuteQuery("mutation { mutate(id:1,newVal:123) { id, value } }");

            Test.DeepEquals(results2, "{ mutate: { id: 1, value: 123 } }");
        }
Beispiel #5
0
        public static void EnumerableSubField <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery("{ account(id:1) { activeUsers { id, name } } }");

            Test.DeepEquals(results, "{ account: { activeUsers: [{ id: 1, name: 'Joe User' }] } }");

            var results2 = gql.ExecuteQuery("{ account(id:2) { activeUsers { id, name } } }");

            Test.DeepEquals(results2, "{ account: { activeUsers: [] } }");
        }
Beispiel #6
0
        public static void BasicQueryFetchLuke <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery("query FetchLukeQuery { human(id: \"1000\") { name } }");

            Test.DeepEquals(results,
                            "{ human: { name: 'Luke Skywalker' } }");
        }
Beispiel #7
0
        public static void TypenameLukeHuman <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery("query CheckTypeOfLuke { hero(episode: EMPIRE) { __typename, name } }");

            Test.DeepEquals(results,
                            "{ hero: { __typename: 'Human', name: 'Luke Skywalker' } }");
        }
Beispiel #8
0
        public static void TypenameR2Droid <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery("query CheckTypeOfR2 { hero { __typename, name } }");

            Test.DeepEquals(results,
                            "{ hero: { __typename: 'Droid', name: 'R2-D2' } }");
        }
Beispiel #9
0
        public static void BasicQueryHeroWithIdAndFriends <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery("query HeroNameQuery { hero { id, name, friends { name } } }");

            Test.DeepEquals(results,
                            "{ hero: { id: '2001', name: 'R2-D2', friends: [ { name: 'Luke Skywalker' },{ name: 'Han Solo' }, { name: 'Leia Organa'} ] } }");
        }
        public void RunExample2()
        {
            var schema = GraphQL <Context> .CreateDefaultSchema(() =>
                                                                new Context
            {
                Humans = new List <Human> {
                    new Human {
                        Id = "1000", Name = "Luke Skywalker", Height = 1.72
                    }
                }
            });

            var humanSchema = schema.AddType <Human>();

            humanSchema.AddField(h => h.Id);
            humanSchema.AddField(h => h.Name);
            humanSchema.AddField(
                "height",
                new { unit = "METER" },
                (c, args, h) => args.unit == "FOOT" ? h.Height * 3.28084 : h.Height);

            schema.AddField(
                "human",
                new { id = "-1" },
                (c, args) => c.Humans.SingleOrDefault(h => h.Id == args.id));

            schema.Complete();

            var gql         = new GraphQL <Context>(schema);
            var queryResult = gql.ExecuteQuery("{human(id: \"1000\") {name, height(unit: \"FOOT\")}}");

            DeepEquals(queryResult, "{human: {name: 'Luke Skywalker', height: 5.6430448}}");
        }
        public void RunExample()
        {
            var schema = GraphQL <Context> .CreateDefaultSchema(() =>
                                                                new Context
            {
                Humans = new List <Human> {
                    new Human {
                        Id = "1000", Name = "Luke Skywalker", Height = 1.72
                    }
                }
            });

            schema.AddType <Human>().AddAllFields();
            schema.AddField(
                "human",
                new { id = "-1" },
                (c, args) => c.Humans.SingleOrDefault(h => h.Id == args.id));

            schema.Complete();

            var gql         = new GraphQL <Context>(schema);
            var queryResult = gql.ExecuteQuery("{human(id: \"1000\") {name, height}}");

            DeepEquals(queryResult, "{human: {name: 'Luke Skywalker', height: 1.72}}");
        }
Beispiel #12
0
        public static void FragmentsDuplicatedContent <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery(
                @"
            query DuplicateFields {
              luke: human(id: ""1000"") {
                name
                  homePlanet
              }
              leia: human(id: ""1003"") {
                name
                  homePlanet
              }
            }
            "
                );

            Test.DeepEquals(results,
                            @"
                {
                  luke: {
                    name: 'Luke Skywalker',
                    homePlanet: 'Tatooine'
                  },
                  leia: {
                    name: 'Leia Organa',
                    homePlanet: 'Alderaan'
                  }
                }
            ");
        }
        public void RunExample2()
        {
            var schema = GraphQL<Context>.CreateDefaultSchema(() =>
            new Context
            {
                Humans = new List<Human> {
                    new Human { Id = "1000", Name = "Luke Skywalker", Height = 1.72 }
                }
            });
            var humanSchema = schema.AddType<Human>();
            humanSchema.AddField(h => h.Id);
            humanSchema.AddField(h => h.Name);
            humanSchema.AddField(
                "height",
                new { unit = "METER"},
                (c, args, h) => args.unit == "FOOT" ? h.Height * 3.28084 : h.Height);

            schema.AddField(
                "human",
                new { id = "-1" },
                (c, args) => c.Humans.SingleOrDefault(h => h.Id == args.id));

            schema.Complete();

            var gql = new GraphQL<Context>(schema);
            var queryResult = gql.ExecuteQuery("{human(id: \"1000\") {name, height(unit: \"FOOT\")}}");
            DeepEquals(queryResult, "{human: {name: 'Luke Skywalker', height: 5.6430448}}");
        }
Beispiel #14
0
        public static void ByteArrayParameter <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery("{ account(id:1) { id, byteArray } }");

            Test.DeepEquals(results,
                            "{ account: { id: 1, byteArray: 'AQIDBA==' } }"); // [1, 2, 3, 4] serialized to base64 by Json.NET
        }
        public void RunExample()
        {
            var schema = GraphQL <Context> .CreateDefaultSchema(() =>
                                                                new Context
            {
                Heros = new List <Hero> {
                    new Hero {
                        Id = "1000", Name = "Luke Skywalker", Episode = "EMPIRE"
                    },
                    new Hero {
                        Id = "1001", Name = "R2-D2", Episode = "JEDI"
                    }
                }
            });

            schema.AddType <Hero>().AddAllFields();
            schema.AddField(
                "hero",
                new { episode = "EMPIRE" },
                (c, args) => c.Heros.SingleOrDefault(h => h.Episode == args.episode));

            schema.Complete();

            var gql         = new GraphQL <Context>(schema);
            var queryResult = gql.ExecuteQuery("{empireHero: hero(episode: \"EMPIRE\") {name}, jediHero: hero(episode: \"JEDI\") {name}}");

            DeepEquals(queryResult, "{empireHero: {name: 'Luke Skywalker'}, jediHero: {name: 'R2-D2'}}");
        }
Beispiel #16
0
        public static void EnumFieldQuery <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery("{ accountsByType(accountType:accountType_Gold) { id, accountType } }");

            Test.DeepEquals(results, @"{ 
                                            accountsByType: [
                                                    { id: 1, accountType: 'Gold' }
                                            ]
                                        }");
        }
Beispiel #17
0
        public static void GuidParameter <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery("{ accountsByGuid(guid:\"00000000-0000-0000-0000-000000000000\") { id, someGuid } }");

            Test.DeepEquals(results, @"{
                                           accountsByGuid: [
                                               { id: 1, someGuid: '00000000-0000-0000-0000-000000000000' },
                                               { id: 2, someGuid: '00000000-0000-0000-0000-000000000000' },
                                           ]
                                       }");
        }
        public void AddAllFields()
        {
            var schema = GraphQL<MemContext>.CreateDefaultSchema(() => new MemContext());
            schema.AddType<User>().AddAllFields();
            schema.AddType<Account>().AddAllFields();
            schema.AddField("user", new { id = 0 }, (db, args) => db.Users.AsQueryable().FirstOrDefault(u => u.Id == args.id));
            schema.Complete();

            var gql = new GraphQL<MemContext>(schema);
            var results = gql.ExecuteQuery("{ user(id:1) { id, name } }");
            Test.DeepEquals(results, "{ user: { id: 1, name: 'Joe User' } }");
        }
Beispiel #19
0
        public static void InlineFragementWithoutTypenameFieldWithoutOtherFields <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery("{ heros { ... on Stormtrooper { height, specialization } } }");

            Test.DeepEquals(
                results,
                "{ heros: [ " +
                "{ }, " +
                "{ height: 4.9, specialization: 'Imperial Snowtrooper'}, " +
                "{ } ] }"
                );
        }
Beispiel #20
0
        public static void IntrospectionDroidType <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery(
                @"query IntrospectionDroidTypeQuery {
                    __type(name: ""Droid"") {
                      name
                    }
                  }");

            Test.DeepEquals(results,
                            "{ __type: { name: 'Droid' } }");
        }
Beispiel #21
0
        public static void UnionTypeDroid <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery(
                @"query UnionTypeStarshipQuery {
                  search(text: ""droid"") {
                    __typename
                  }
                }");

            Test.DeepEquals(results,
                            "{ search: { __typename: 'Droid'} }");
        }
Beispiel #22
0
        public static void FragementWithMultiLevelInheritance <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery("{ heros { name, __typename, ... on Stormtrooper { height, specialization } } }");

            Test.DeepEquals(
                results,
                "{ heros: [ " +
                "{ name: 'Han Solo', __typename: 'Human'}, " +
                "{ name: 'FN-2187', __typename: 'Stormtrooper',  height: 4.9, specialization: 'Imperial Snowtrooper'}, " +
                "{ name: 'R2-D2', __typename: 'Droid' } ] }"
                );
        }
Beispiel #23
0
        public static void InlineFragementWithoutTypenameField <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery("{ heros { name, ... on Stormtrooper { height, specialization } } }");

            Test.DeepEquals(
                results,
                "{ heros: [ " +
                "{ name: 'Han Solo'}, " +
                "{ name: 'FN-2187', height: 4.9, specialization: 'Imperial Snowtrooper'}, " +
                "{ name: 'R2-D2' } ] }"
                );
        }
Beispiel #24
0
        public static bool FragementWithMultipleTypenameFields <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery(
                "{ heros { name, ...stormtrooper, __typename } }, fragment stormtrooper on Stormtrooper { height, specialization, __typename } ");

            return(Test.DeepEquals(
                       results,
                       "{ heros: [ " +
                       "{ name: 'Han Solo', __typename: 'Human'}, " +
                       "{ name: 'FN-2187', height: 4.9, specialization: 'Imperial Snowtrooper', __typename: 'Stormtrooper'}, " +
                       "{ name: 'R2-D2', __typename: 'Droid'} ] }"
                       ));
        }
Beispiel #25
0
        public static void IntrospectionCharacterInterface <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery(
                @"query IntrospectionCharacterKindQuery {
                  __type(name: ""ICharacter"") {
                    name
                    kind
                  }
                }");

            Test.DeepEquals(results,
                            "{ __type: { name: 'ICharacter', kind: 'INTERFACE' } }");
        }
Beispiel #26
0
        public static void FragementWithMultipleTypenameFieldsMixedWithInlineFragment <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery(
                "{ heros { ...stormtrooper, __typename, ... on Human {name}, ... on Droid {name}}}, fragment stormtrooper on Stormtrooper { name, height, specialization, __typename } ");

            Test.DeepEquals(
                results,
                "{ heros: [ " +
                "{ __typename: 'Human',  name: 'Han Solo'}, " +
                "{ name: 'FN-2187', height: 4.9, specialization: 'Imperial Snowtrooper', __typename: 'Stormtrooper'}, " +
                "{ __typename: 'Droid', name: 'R2-D2'} ] }"
                );
        }
Beispiel #27
0
        public void AddAllFields()
        {
            var schema = GraphQL <EfContext> .CreateDefaultSchema(() => new EfContext());

            schema.AddType <User>().AddAllFields();
            schema.AddType <Account>().AddAllFields();
            schema.AddField("user", new { id = 0 }, (db, args) => db.Users.FirstOrDefault(u => u.Id == args.id));
            schema.Complete();

            var gql     = new GraphQL <EfContext>(schema);
            var results = gql.ExecuteQuery("{ user(id:1) { id, name } }");

            Test.DeepEquals(results, "{ user: { id: 1, name: 'Joe User' } }");
        }
Beispiel #28
0
        public HttpResponseMessage GraphQLData(HttpRequestMessage query)
        {
            try
            {
                var gql  = new GraphQL <BeerContext>(_schema);
                var dict = gql.ExecuteQuery(query.Content.ReadAsStringAsync().Result);

                return(Request.CreateResponse(HttpStatusCode.Accepted, dict));
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, ex));
            }
        }
Beispiel #29
0
        public static void InlineFragementWithListField <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery(
                "{ heros { name, __typename, ... on Human { height, vehicles { name } }, ... on Stormtrooper { specialization }, " +
                "... on Droid { primaryFunction } } }");

            Test.DeepEquals(
                results,
                "{ heros: [ " +
                "{ name: 'Han Solo', __typename: 'Human',  height: 5.6430448, vehicles: [ {name: 'Millennium falcon'}] }, " +
                "{ name: 'FN-2187', __typename: 'Stormtrooper',  height: 4.9, vehicles: [ {name: 'Speeder bike'}], specialization: 'Imperial Snowtrooper'}, " +
                "{ name: 'R2-D2', __typename: 'Droid', primaryFunction: 'Astromech' } ] }"
                );
        }
Beispiel #30
0
        public static void InlineFragements <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery(
                "{ heros { name, __typename, ... on Human { height }, ... on Stormtrooper { specialization }, " +
                "... on Droid { primaryFunction } } }");

            Test.DeepEquals(
                results,
                "{ heros: [ " +
                "{ name: 'Han Solo', __typename: 'Human',  height: 5.6430448}, " +
                "{ name: 'FN-2187', __typename: 'Stormtrooper',  height: 4.9, specialization: 'Imperial Snowtrooper'}, " +
                "{ name: 'R2-D2', __typename: 'Droid', primaryFunction: 'Astromech' } ] }"
                );
        }
Beispiel #31
0
        public static bool Fragements <TContext>(GraphQL <TContext> gql)
        {
            var results = gql.ExecuteQuery(
                "{ heros { name, __typename, ...human, ...stormtrooper, ...droid } }, " +
                "fragment human on Human { height }, " +
                "fragment stormtrooper on Stormtrooper { specialization }, " +
                "fragment droid on Droid { primaryFunction }");

            return(Test.DeepEquals(
                       results,
                       "{ heros: [ " +
                       "{ name: 'Han Solo', __typename: 'Human',  height: 5.6430448}, " +
                       "{ name: 'FN-2187', __typename: 'Stormtrooper',  height: 4.9, specialization: 'Imperial Snowtrooper'}, " +
                       "{ name: 'R2-D2', __typename: 'Droid', primaryFunction: 'Astromech' } ] }"
                       ));
        }
Beispiel #32
0
        public void RunExample()
        {
            var schema = GraphQL <Context> .CreateDefaultSchema(CreateDefaultContext);

            schema.AddType <Character>().AddAllFields();
            schema.AddField("hero", c => c.Hero);

            schema.Complete();

            var gql         = new GraphQL <Context>(schema);
            var queryResult = gql.ExecuteQuery(
                @"{
                    hero {
                        name,
                        friends {
                            name
                        }
                    }
                  }"
                );

            DeepEquals(
                queryResult,
                @"{
                    hero: {
                        name: 'R2-D2',
                        friends: [
                            {
                              name: 'Luke Skywalker'
                            },
                            {
                                name: 'Han Solo'
                            },
                            {
                                name: 'Leia Organa'
                            }
                        ]
                    }
                  }"
                );
        }
        public void RunExample()
        {
            var schema = GraphQL<Context>.CreateDefaultSchema(() =>
            new Context
            {
                Humans = new List<Human> {
                    new Human { Id = "1000", Name = "Luke Skywalker", Height = 1.72 }
                }
            });
            schema.AddType<Human>().AddAllFields();
            schema.AddField(
                "human",
                new { id = "-1" },
                (c, args) => c.Humans.SingleOrDefault(h => h.Id == args.id));

            schema.Complete();

            var gql = new GraphQL<Context>(schema);
            var queryResult = gql.ExecuteQuery("{human(id: \"1000\") {name, height}}");
            DeepEquals(queryResult, "{human: {name: 'Luke Skywalker', height: 1.72}}");
        }
        public void RunExample()
        {
            var schema = GraphQL<Context>.CreateDefaultSchema(CreateDefaultContext);
            schema.AddType<Character>().AddAllFields();
            schema.AddField("hero", c => c.Hero);

            schema.Complete();

            var gql = new GraphQL<Context>(schema);
            var queryResult = gql.ExecuteQuery(
                @"{
                    hero {
                        name,
                        friends {
                            name
                        }
                    }
                  }"
                );
            DeepEquals(
                queryResult,
                @"{
                    hero: {
                        name: 'R2-D2',
                        friends: [
                            {
                              name: 'Luke Skywalker'
                            },
                            {
                                name: 'Han Solo'
                            },
                            {
                                name: 'Leia Organa'
                            }
                        ]
                    }
                  }"
                );
        }
Beispiel #35
0
        public void RunExample()
        {
            var schema = GraphQL<Context>.CreateDefaultSchema(() =>
            new Context
            {
                Heros = new List<Hero> {
                    new Hero { Id = "1000", Name = "Luke Skywalker", Episode = "EMPIRE" },
                    new Hero { Id = "1001", Name = "R2-D2", Episode = "JEDI" }
                }
            });
            schema.AddType<Hero>().AddAllFields();
            schema.AddField(
                "hero",
                new { episode = "EMPIRE" },
                (c, args) => c.Heros.SingleOrDefault(h => h.Episode == args.episode));

            schema.Complete();

            var gql = new GraphQL<Context>(schema);
            var queryResult = gql.ExecuteQuery("{empireHero: hero(episode: \"EMPIRE\") {name}, jediHero: hero(episode: \"JEDI\") {name}}");
            DeepEquals(queryResult, "{empireHero: {name: 'Luke Skywalker'}, jediHero: {name: 'R2-D2'}}");
        }
        public void RunExample()
        {
            var schema = GraphQL<Context>.CreateDefaultSchema(() =>
            new Context
            {
                Heros = new List<Character> {
                    new Character {
                        Id = "1000",
                        Name = "Luke Skywalker",
                        Episode = "EMPIRE",
                        AppearsIn = new string[] { "NEWHOPE", "EMPIRE", "JEDI"},
                        Friends = new List<Character> {
                            new Character { Name = "Han Solo"},
                            new Character { Name = "Leia Organa"},
                            new Character { Name = "C-3PO"},
                            new Character { Name = "R2-D2"}
                        }
                    },
                    new Character {
                        Id = "1001",
                        Name = "R2-D2",
                        Episode = "JEDI",
                        AppearsIn = new string[] {"NEWHOPE", "EMPIRE", "JEDI" },
                        Friends = new List<Character> {
                            new Character { Name = "Luke Skywalker"},
                            new Character { Name = "Han Solo"},
                            new Character { Name = "Leia Organa"}
                        }
                    }
                }
            });
            schema.AddType<Character>().AddAllFields();
            schema.AddField(
                "hero",
                new { episode = "EMPIRE" },
                (c, args) => c.Heros.SingleOrDefault(h => h.Episode == args.episode));

            schema.Complete();

            var gql = new GraphQL<Context>(schema);
            var queryResult = gql.ExecuteQuery(
                @"{
                      leftComparison: hero(episode: ""EMPIRE"") {
                        ...comparisonFields
                      }
                      rightComparison: hero(episode: ""JEDI"") {
                        ...comparisonFields
                      }
                  }
                  fragment comparisonFields on Character {
                    name
                    appearsIn
                    friends {
                        name
                    }
                  }"
                );
            DeepEquals(
                queryResult,
                @"{
                    ""leftComparison"": {
                        ""name"": ""Luke Skywalker"",
                        ""appearsIn"": [
                            ""NEWHOPE"",
                            ""EMPIRE"",
                            ""JEDI""
                        ],
                        ""friends"": [
                            {
                              ""name"": ""Han Solo""
                            },
                            {
                              ""name"": ""Leia Organa""
                            },
                            {
                              ""name"": ""C-3PO""
                            },
                            {
                              ""name"": ""R2-D2""
                            }
                        ]
                    },
                    ""rightComparison"": {
                      ""name"": ""R2-D2"",
                      ""appearsIn"": [
                        ""NEWHOPE"",
                        ""EMPIRE"",
                        ""JEDI""
                      ],
                      ""friends"": [
                        {
                          ""name"": ""Luke Skywalker""
                        },
                        {
                          ""name"": ""Han Solo""
                        },
                        {
                          ""name"": ""Leia Organa""
                        }
                      ]
                    }
                  }
                ");
        }