コード例 #1
0
        public virtual void Execute_Selection_Object_Paging_Edges()
        {
            // arrange
            IServiceCollection services;
            Func <IResolverContext, IEnumerable <Foo> > resolver;

            (services, resolver) = _provider.CreateResolver(SAMPLE);

            Connection <Foo> resultCtx = null;
            ISchema          schema    = SchemaBuilder.New()
                                         .AddServices(services.BuildServiceProvider())
                                         .AddQueryType <Query>(
                d => d.Field(t => t.Foos)
                .Resolver(resolver)
                .Use(next => async ctx =>
            {
                await next(ctx).ConfigureAwait(false);
                resultCtx = ctx.Result as Connection <Foo>;
            })
                .UsePaging <ObjectType <Foo> >()
                .UseFiltering()
                .UseSorting()
                .UseSelection())
                                         .Create();
            IQueryExecutor executor = schema.MakeExecutable();

            // act
            IExecutionResult result = executor.Execute(
                "{ foos { edges { node { bar }} } }");

            // assert
            Assert.NotNull(resultCtx);
            Assert.Collection(resultCtx.Edges.ToArray(),
                              x =>
            {
                Assert.Equal("aa", x.Node.Bar);
                Assert.Equal(0, x.Node.Baz);
                Assert.Null(x.Node.Nested);
                Assert.Null(x.Node.ObjectArray);
            },
                              x =>
            {
                Assert.Equal("bb", x.Node.Bar);
                Assert.Equal(0, x.Node.Baz);
                Assert.Null(x.Node.Nested);
                Assert.Null(x.Node.ObjectArray);
            });
        }
コード例 #2
0
        public Task Subscribe_With_ObjectValue()
        {
            return(TestHelper.TryTest(async() =>
            {
                // arrange
                var services = new ServiceCollection();
                services.AddRedisSubscriptionProvider(_connection);

                IServiceProvider serviceProvider = services.BuildServiceProvider();

                var cts = new CancellationTokenSource(30000);
                string name = "field_" + Guid.NewGuid().ToString("N");
                IQueryExecutor executor = SchemaBuilder.New()
                                          .AddServices(serviceProvider)
                                          .AddQueryType(d => d
                                                        .Name("foo")
                                                        .Field("a")
                                                        .Resolver("b"))
                                          .AddSubscriptionType(d => d.Name("bar")
                                                               .Field(name)
                                                               .Argument("a", a => a.Type <FooType>())
                                                               .Resolver("baz"))
                                          .Create()
                                          .MakeExecutable();

                var eventDescription = new EventDescription(name,
                                                            new ArgumentNode("a",
                                                                             new ObjectValueNode(
                                                                                 new ObjectFieldNode("def", "xyz"))));
                var outgoing = new EventMessage(eventDescription, "bar");

                IExecutionResult result = executor.Execute(
                    "subscription { " + name + "(a: { def: \"xyz\" }) }");

                // act
                await _sender.SendAsync(outgoing);

                // assert
                var stream = (IResponseStream)result;
                IReadOnlyQueryResult message = null;
                await foreach (IReadOnlyQueryResult item in stream.WithCancellation(cts.Token))
                {
                    message = item;
                    break;
                }
                Assert.Equal("baz", message.Data.First().Value);
            }));
        }
コード例 #3
0
        public void ExecutionDepthShouldNotLeadToEmptyObects()
        {
            // arrange
            var query = @"
            query ExecutionDepthShouldNotLeadToEmptyObects {
                hero(episode: NEWHOPE) {
                    __typename
                    id
                    name
                    ... on Human {
                        __typename
                        homePlanet
                    }
                    ... on Droid {
                        __typename
                        primaryFunction
                    }
                    friends {
                        __typename
                        ... on Human {
                            __typename
                            homePlanet
                            friends {
                                __typename
                            }
                        }
                        ... on Droid {
                            __typename
                            primaryFunction
                            friends {
                                __typename
                            }
                        }
                    }
                }
            }";

            IQueryExecutor executor = CreateSchema().MakeExecutable(
                new QueryExecutionOptions {
                MaxExecutionDepth = 3
            });

            // act
            IExecutionResult result = executor.Execute(query);

            // assert
            result.MatchSnapshot();
        }
コード例 #4
0
        public Room Create(string name)
        {
            var query = new FindRoomByNameQuery(name);
            var roomNameIsAlreadyTaken = _queryExecute.Execute(query).Any();

            if (roomNameIsAlreadyTaken)
            {
                throw new RoomNameIsAlreadyTakenException(name);
            }

            var newRoom = Room.CreateRoom(name, _clock.UtcNow);

            _roomRepository.Add(newRoom);

            return(newRoom);
        }
コード例 #5
0
        public void Execute_Filter_Nullable_Equals_Null()
        {
            // arrange
            ISchema schema = SchemaBuilder.New()
                             .AddQueryType <Query>(d => d.Field(t => t.Foos).UseFiltering())
                             .Create();

            IQueryExecutor executor = schema.MakeExecutable();

            // act
            IExecutionResult result = executor.Execute(
                "{ foos(where: { qux: null }) { bar qux } }");

            // assert
            result.MatchSnapshot();
        }
コード例 #6
0
        public void Execute_Filter_Is_Null()
        {
            // arrange
            ISchema schema = SchemaBuilder.New()
                             .AddQueryType <QueryType>()
                             .Create();

            IQueryExecutor executor = schema.MakeExecutable();

            // act
            IExecutionResult result = executor.Execute(
                "{ foos { bar } }");

            // assert
            result.MatchSnapshot();
        }
コード例 #7
0
        /// <summary>
        /// If a page isnt found, check to see if we have a redirection rule
        /// in place for the url.
        /// </summary>
        private ActionResult GetRewriteResult(string path)
        {
            var query = new GetRewriteRuleByPathQuery()
            {
                Path = path
            };
            var rewriteRule = _queryExecutor.Execute(query);

            if (rewriteRule != null)
            {
                string writeTo = rewriteRule.WriteTo;
                return(new RedirectResult(rewriteRule.WriteTo, true));
            }

            return(null);
        }
コード例 #8
0
        public void Infer_Filter_From_Field()
        {
            // arrange
            ISchema schema = SchemaBuilder.New()
                             .AddQueryType <Query>(d => d.Field(t => t.Foos).UseFiltering())
                             .Create();

            IQueryExecutor executor = schema.MakeExecutable();

            // act
            IExecutionResult result = executor.Execute(
                "{ foos(where: { bar_starts_with: \"a\" }) { bar } }");

            // assert
            result.MatchSnapshot();
        }
コード例 #9
0
        public void Execute_Filter_Comparable_In()
        {
            // arrange
            ISchema schema = SchemaBuilder.New()
                             .AddQueryType <Query>(d => d.Field(t => t.Foos).UseFiltering())
                             .Create();

            IQueryExecutor executor = schema.MakeExecutable();

            // act
            IExecutionResult result = executor.Execute(
                "{ foos(where: { baz_in: [ 1 0 ] }) { bar } }");

            // assert
            result.MatchSnapshot();
        }
コード例 #10
0
        public async Task <GetAllAssignmentsResponse> Handle(GetAllAssignmentsRequest request, CancellationToken cancellationToken)
        {
            var query = new GetAssignmentsQuery()
            {
                CustomerId = request.customerId,
                CompanyId  = request.AuthenticatorCompanyId
            };
            var assignments = await queryExecutor.Execute(query);

            var mappedAssignments = mapper.Map <List <AssignmentDto> >(assignments);

            return(new GetAllAssignmentsResponse()
            {
                Data = mappedAssignments
            });
        }
コード例 #11
0
        public void Execute_Filter()
        {
            // arrange
            ISchema schema = SchemaBuilder.New()
                             .AddQueryType <QueryType>()
                             .Create();

            IQueryExecutor executor = schema.MakeExecutable();

            // act
            IExecutionResult result = executor.Execute(
                "{ foos(where: { bar_starts_with: \"a\" }) { bar } }");

            // assert
            result.MatchSnapshot();
        }
コード例 #12
0
ファイル: Member.cs プロジェクト: BenVanZyl/Reliance
        public static async Task <Member> Create(IQueryExecutor executor, OrganisationMemberDto data)
        {
            //does data.Email exists?  no duplicates allowed
            var value = await executor.Execute(new GetOrganisationMemberQuery(data.OrgId, data.Email));

            if (value != null)
            {
                throw new ThisAppException(StatusCodes.Status409Conflict, Messages.Err409ObjectExists("Organisation Member"));
            }

            value = new Member(data);
            await executor.Add <Member>(value);

            await executor.Save();

            return(value);
        }
コード例 #13
0
        public void Execute_Selection_MultipleScalar()
        {
            // arrange
            IServiceCollection services;
            Func <IResolverContext, IEnumerable <Foo> > resolver;

            (services, resolver) = _provider.CreateResolver(
                Foo.Create("aa", 1, false),
                Foo.Create("bb", 2, false));

            IQueryable <Foo> resultCtx = null;
            ISchema          schema    = SchemaBuilder.New()
                                         .AddServices(services.BuildServiceProvider())
                                         .AddQueryType <Query>(d =>
                                                               d.Field(t => t.Foos)
                                                               .Resolver(resolver)
                                                               .Use(next => async ctx =>
            {
                await next(ctx).ConfigureAwait(false);
                resultCtx = ctx.Result as IQueryable <Foo>;
            }))
                                         .Create();
            IQueryExecutor executor = schema.MakeExecutable();

            // act
            executor.Execute(
                "{ foos { bar baz } }");

            // assert
            Assert.NotNull(resultCtx);
            Assert.Collection(resultCtx.ToArray(),
                              x =>
            {
                Assert.Equal("aa", x.Bar);
                Assert.Equal(1, x.Baz);
                Assert.Null(x.Nested);
                Assert.Null(x.NestedCollection);
            },
                              x =>
            {
                Assert.Equal("bb", x.Bar);
                Assert.Equal(2, x.Baz);
                Assert.Null(x.Nested);
                Assert.Null(x.NestedCollection);
            });
        }
コード例 #14
0
        public void Execute_Filter_Equals_Or()
        {
            // arrange
            ISchema schema = SchemaBuilder.New()
                             .AddQueryType <Query>(d => d.Field(t => t.Foos).UseFiltering())
                             .Create();

            IQueryExecutor executor = schema.MakeExecutable();

            // act
            IExecutionResult result = executor.Execute(
                "{ foos(where: { OR: [ { bar: \"aa\" } { bar: \"ba\" } ] })" +
                " { bar } }");

            // assert
            result.MatchSnapshot();
        }
コード例 #15
0
        public QueryResult Execute(
            long userId,
            [NotNull] ReportQuery reportQuery,
            IEnumerable <KeyValuePair <string, string> > parameters)
        {
            if (reportQuery == null)
            {
                throw new ArgumentNullException(nameof(reportQuery));
            }

            if (string.IsNullOrEmpty(reportQuery.Text))
            {
                throw new Exception($"Empry report query. Query key='{reportQuery.Key}'");
            }

            return(_queryExecutor.Execute(reportQuery.Text, userId, parameters.ToArray()));
        }
コード例 #16
0
ファイル: CreateUser.cs プロジェクト: PatrickDinh/Windtalker
        public User Create(string email, string plainTextPassword)
        {
            var query        = new FindUserByEmailQuery(email);
            var existingUser = _queryExecutor.Execute(query);

            if (existingUser.Count > 0)
            {
                throw new EmailAddressAlreadyTakenException();
            }

            var hashedPassword = _passwordHashingService.SaltAndHash(plainTextPassword);
            var user           = User.Register(email, hashedPassword, _clock.UtcNow);

            _userRepository.Add(user);

            return(user);
        }
コード例 #17
0
        protected void SearchButton_OnClick(object sender, EventArgs e)
        {
            var shipDtos = _queryExecutor.Execute <GetShipsByNameQuery, ShipDto>(
                new GetShipsByNameQuery {
                ShipName = SearchShipNameTextBox.Text
            }
                )
                           .ToList();

            NumberOfShipQueriedLabel.Text = $"{shipDtos.Count}";

            SearchedShipsListBox.Items.Clear();
            foreach (var shipDto in shipDtos)
            {
                SearchedShipsListBox.Items.Add($"Id: {shipDto.Id}, ship name: {shipDto.Name}");
            }
        }
コード例 #18
0
        /// <summary>
        /// Gets the JSON object from given resource class.
        /// </summary>
        /// <param name="resourceClassName">Name of the resource class.</param>
        /// <param name="languageName">Name of the language.</param>
        /// <param name="fallbackCollection">List of fallback languages collection.</param>
        /// <param name="camelCase">if set to <c>true</c> JSON properties will be in camelCase; otherwise PascalCase is used.</param>
        /// <returns>JSON object that represents resource</returns>
        public JObject GetJson(
            string resourceClassName,
            string languageName,
            FallbackLanguagesCollection fallbackCollection,
            bool camelCase = false)
        {
            var resources         = _queryExecutor.Execute(new GetAllResources.Query());
            var filteredResources = resources
                                    .Where(r => r.ResourceKey.StartsWith(resourceClassName, StringComparison.InvariantCultureIgnoreCase))
                                    .ToList();

            return(Convert(
                       filteredResources,
                       languageName,
                       fallbackCollection,
                       camelCase));
        }
コード例 #19
0
        public async Task <GetAllEmployeesResponse> Handle(GetAllEmployeesRequest request, CancellationToken cancellationToken)
        {
            var query = new GetEmployeesQuery()
            {
                Name      = request.Name,
                Surname   = request.Surname,
                CompanyId = request.AuthenticatorCompanyId
            };
            var employes = await queryExecutor.Execute(query);

            var mappedEmployes = mapper.Map <List <EmployeeDto> >(employes);

            return(new GetAllEmployeesResponse()
            {
                Data = mappedEmployes
            });
        }
コード例 #20
0
        public async Task <AddBoardResponse> Handle(AddBoardRequest request, CancellationToken cancellationToken)
        {
            if (request.AuthenticatorRole == AppRole.Employee)
            {
                return(new AddBoardResponse()
                {
                    Error = new ErrorModel(ErrorType.Unauthorized)
                });
            }

            var query = new GetEmployeeQuery()
            {
                Id = request.EmployeeId
            };

            var employee = await queryExecutor.Execute(query);

            if (employee == null)
            {
                return(new AddBoardResponse()
                {
                    Error = new ErrorModel(ErrorType.NotFound)
                });
            }

            if (employee.Board != null)
            {
                return(new AddBoardResponse()
                {
                    Error = new ErrorModel(ErrorType.UnsupportedMethod)
                });
            }

            var board   = mapper.Map <Board>(request);
            var command = new AddBoardCommand()
            {
                Parameter = board
            };
            var boardFromDb = await commandExecutor.Execute(command);

            return(new AddBoardResponse()
            {
                Data = mapper.Map <BoardDto>(boardFromDb)
            });
        }
コード例 #21
0
        public void ResolverResultIsObject()
        {
            // arrange
            ISchema schema = SchemaBuilder.New()
                             .AddQueryType <QueryType>()
                             .Create();

            IQueryExecutor executor = schema.MakeExecutable();

            // act
            IExecutionResult result = executor.Execute(
                QueryRequestBuilder.New()
                .SetQuery("{ foo { bar { baz }}}")
                .Create());

            // assert
            result.MatchSnapshot();
        }
コード例 #22
0
        /// <summary>
        /// Creates new translation class from single found text.
        /// </summary>
        /// <param name="translation">Text of the resource translation.</param>
        /// <returns>Discovered translation (as list for easier other API support)</returns>
        public List <DiscoveredTranslation> FromSingle(string translation)
        {
            var defaultCulture = _executor.Execute(new DetermineDefaultCulture.Query());

            var result = new List <DiscoveredTranslation>
            {
                // invariant translation
                new DiscoveredTranslation(translation, CultureInfo.InvariantCulture.Name)
            };

            // register additional culture if default is not set to invariant
            if (defaultCulture != string.Empty)
            {
                result.Add(new DiscoveredTranslation(translation, defaultCulture));
            }

            return(result);
        }
コード例 #23
0
        public QueryResult Execute(long userId, ReportQueryLink reportQuery, IEnumerable <KeyValuePair <string, string> > parameters)
        {
            List <KeyValuePair <string, string> > reportQueryParameters = null;

            // ReSharper disable once InvertIf
            if ((parameters != null) && (reportQuery.Parameters != null))
            {
                reportQueryParameters = new List <KeyValuePair <string, string> >(parameters);

                // ReSharper disable once LoopCanBeConvertedToQuery
                foreach (var queryParameter in reportQuery.Parameters)
                {
                    reportQueryParameters.Add(new KeyValuePair <string, string>(queryParameter.Key, queryParameter.Value));
                }
            }

            return(_queryExecutor.Execute(reportQuery.QueryId, userId, reportQueryParameters?.ToArray()));
        }
コード例 #24
0
        public static IExecutionResult Execute(
            this IQueryExecutor executor,
            string query)
        {
            if (executor == null)
            {
                throw new ArgumentNullException(nameof(executor));
            }

            if (string.IsNullOrEmpty(query))
            {
                throw new ArgumentException(
                          CoreResources.QueryExecutorExtensions_QueryIsNullOrEmpty,
                          nameof(query));
            }

            return(executor.Execute(new QueryRequest(query)));
        }
コード例 #25
0
        /// <inheritdoc/>
        public bool Process(string name,
                            IDictionary <string, string> data, out string result)
        {
            IQuery         query_to_execute = resolver_.GetQuery(name);
            IQueryExecutor executor         = resolver_.GetQueryExecutor(query_to_execute);

            if (!(executor is NoOpQueryExecutor))
            {
                try {
                    result = executor.Execute(query_to_execute, data);
                } catch (KeyNotFoundException key_not_found_exception) {
                    result = key_not_found_exception.Message;
                }
                return(true);
            }
            result = string.Format(Resources.QueryProcessor_ProcessorNotFound, name);
            return(false);
        }
コード例 #26
0
ファイル: Badge.cs プロジェクト: BenVanZyl/Reliance
        internal static async Task <Badge> Create(IQueryExecutor executor, long appId, long stageId, string badgeUrl)
        {
            //validation - confirm app does not already exists
            var existingValue = await executor.Execute(new GetBadgeQuery(appId, stageId));

            if (existingValue != null)
            {
                throw new ThisAppException(StatusCodes.Status409Conflict, Messages.Err409ObjectExists("Badge"));
            }
            //create new record
            var value = new Badge(appId, stageId, badgeUrl);
            await executor.Add <Badge>(value);

            await executor.Save();

            //return record
            return(value);
        }
コード例 #27
0
        public void EnumValueIsCoercedToListValue()
        {
            // arrange
            var query = @"
            {
                heroes(episodes: EMPIRE) {
                    name
                }
            }";

            IQueryExecutor executor = CreateSchema().MakeExecutable();

            // act
            IExecutionResult result = executor.Execute(query);

            // assert
            result.MatchSnapshot();
        }
コード例 #28
0
        public void Skip_With_Literal(string ifValue)
        {
            // arrange
            var query = $@"
            {{
                human(id: ""1000"") {{
                    name @skip(if: {ifValue})
                    height
                }}
            }}";

            IQueryExecutor executor = CreateSchema().MakeExecutable();

            // act
            IExecutionResult result = executor.Execute(query);

            // assert
            result.MatchSnapshot(new SnapshotNameExtension(ifValue));
        }
コード例 #29
0
        public void GraphQLOrgFieldArgumentExample2()
        {
            // arrange
            var query = @"
            {
                human(id: ""1000"") {
                    name
                    height(unit: FOOT)
                }
            }";

            IQueryExecutor executor = CreateSchema().MakeExecutable();

            // act
            IExecutionResult result = executor.Execute(query);

            // assert
            result.MatchSnapshot();
        }
コード例 #30
0
        internal static async Task <Organisation> Create(IQueryExecutor executor, string name, string masterEmail)
        {
            //validation
            var existingValue = await executor.Execute(new GetOrganisationQuery(name, masterEmail));

            if (existingValue != null)
            {
                throw new ThisAppException(StatusCodes.Status409Conflict, Messages.Err409ObjectExists("Organisation"));
            }

            //create new record
            var value = new Organisation(name, masterEmail);
            await executor.Add <Organisation>(value);

            await executor.Save();

            //return record
            return(value);
        }
コード例 #31
0
ファイル: LucQuery.cs プロジェクト: jhuntsman/FlexNet
 internal IEnumerable<LucObject> Execute(bool allVersions, IQueryExecutor executor)
 {
     var result = executor.Execute(this, allVersions);
     TotalCount = executor.TotalCount;
     return result;
 }