Exemple #1
0
        public void ApplyToOfTSkipTokenQueryOption_Calls_ApplyToOfTOnSkipTokenHandler()
        {
            // Arrange
            Mock <SkipTokenHandler> handler   = new Mock <SkipTokenHandler>();
            ODataQuerySettings      settings  = new ODataQuerySettings();
            SkipTokenQueryValidator validator = new SkipTokenQueryValidator();
            IServiceProvider        sp        = new ServiceCollection()
                                                .AddSingleton <SkipTokenHandler>(handler.Object)
                                                .AddSingleton <SkipTokenQueryValidator>(validator)
                                                .BuildServiceProvider();

            ODataQueryContext context = new ODataQueryContext(EdmCoreModel.Instance, typeof(int))
            {
                RequestContainer = sp
            };

            SkipTokenQueryOption skipTokenQuery = new SkipTokenQueryOption("abc", context);

            IQueryable <SkipTokenCustomer> query = Array.Empty <SkipTokenCustomer>().AsQueryable();

            handler.Setup(h => h.ApplyTo <SkipTokenCustomer>(query, skipTokenQuery, settings, null)).Returns(query).Verifiable();

            // Act
            skipTokenQuery.ApplyTo <SkipTokenCustomer>(query, settings, null);

            // Assert
            handler.Verify();
        }
Exemple #2
0
        public void ApplyToOfTDefaultSkipTokenHandler_Applies_ToQuaryable()
        {
            // Arrange
            ODataQuerySettings settings = new ODataQuerySettings
            {
                HandleNullPropagation = HandleNullPropagationOption.False
            };
            ODataQueryContext context = new ODataQueryContext(_model, typeof(SkipCustomer));

            SkipTokenQueryOption      skipTokenQuery = new SkipTokenQueryOption("Id-2", context);
            DefaultSkipTokenHandler   handler        = new DefaultSkipTokenHandler();
            IQueryable <SkipCustomer> customers      = new List <SkipCustomer>
            {
                new SkipCustomer {
                    Id = 2, Name = "Aaron"
                },
                new SkipCustomer {
                    Id = 1, Name = "Andy"
                },
                new SkipCustomer {
                    Id = 3, Name = "Alex"
                }
            }.AsQueryable();

            // Act
            SkipCustomer[] results = handler.ApplyTo(customers, skipTokenQuery, settings, null).ToArray();

            // Assert
            SkipCustomer skipTokenCustomer = Assert.Single(results);

            Assert.Equal(3, skipTokenCustomer.Id);
            Assert.Equal("Alex", skipTokenCustomer.Name);
        }
Exemple #3
0
        public void ValidateSkipTokenQueryOption_ThrowsArgumentNull_ValidationSettings()
        {
            // Arrange
            ODataQueryContext    context   = new ODataQueryContext(EdmCoreModel.Instance, typeof(int));
            SkipTokenQueryOption skipToken = new SkipTokenQueryOption("abc", context);

            // Act & Assert
            ExceptionAssert.ThrowsArgumentNull(() => skipToken.Validate(null), "validationSettings");
        }
Exemple #4
0
        public void ApplyToSkipTokenHandler_ThrowsArgumentNull_QuerySettings()
        {
            // Arrange
            DefaultSkipTokenHandler handler           = new DefaultSkipTokenHandler();
            IQueryable           query                = Array.Empty <int>().AsQueryable();
            ODataQueryContext    context              = new ODataQueryContext(EdmCoreModel.Instance, EdmCoreModel.Instance.GetInt32(false).Definition);
            SkipTokenQueryOption skipTokenQueryOption = new SkipTokenQueryOption("abc", context);

            // Act & Assert
            ExceptionAssert.ThrowsArgumentNull(() => handler.ApplyTo(query, skipTokenQueryOption, null, null), "querySettings");
        }
        public void ValidateSkipTokenQueryValidator_ThrowsOnNullSettings()
        {
            // Arrange & Act
            SkipTokenQueryValidator validator = new SkipTokenQueryValidator();

            ODataQueryContext    context = new ODataQueryContext(EdmCoreModel.Instance, typeof(int), null);
            SkipTokenQueryOption query   = new SkipTokenQueryOption("abc", context);

            // Assert
            ExceptionAssert.Throws <ArgumentNullException>(() => validator.Validate(query, null));
        }
Exemple #6
0
        public void ApplyToSkipTokenHandler_ThrowsNotSupported_WithoutElementType()
        {
            // Arrange
            DefaultSkipTokenHandler handler = new DefaultSkipTokenHandler();
            ODataQueryContext       context = new ODataQueryContext(EdmCoreModel.Instance, EdmCoreModel.Instance.GetInt32(false).Definition);
            SkipTokenQueryOption    skipTokenQueryOption = new SkipTokenQueryOption("abc", context);
            IQueryable query = Array.Empty <int>().AsQueryable();

            // Act & Assert
            ExceptionAssert.Throws <NotSupportedException>(
                () => handler.ApplyTo(query, skipTokenQueryOption, new ODataQuerySettings(), null),
                "The query option is not bound to any CLR type. 'ApplyTo' is only supported with a query option bound to a CLR type.");
        }
        public void ValidateSkipTokenQueryValidator_ThrowsNotAllowedQueryOption()
        {
            // Arrange
            ODataValidationSettings settings = new ODataValidationSettings();

            ODataQueryContext context = new ODataQueryContext(EdmCoreModel.Instance, typeof(int), null);

            context.DefaultQuerySettings.EnableSkipToken = false;
            SkipTokenQueryOption query = new SkipTokenQueryOption("abc", context);

            SkipTokenQueryValidator validator = new SkipTokenQueryValidator();

            // Act & Assert
            ExceptionAssert.Throws <ODataException>(() => validator.Validate(query, settings),
                                                    "Query option 'SkipToken' is not allowed. To allow it, set the 'AllowedQueryOptions' property on EnableQueryAttribute or QueryValidationSettings.");
        }
Exemple #8
0
        public void ApplyToSkipTokenHandler_ThrowsODataException_InvalidSkipTokenValue()
        {
            // Arrange
            DefaultSkipTokenHandler handler  = new DefaultSkipTokenHandler();
            ODataQuerySettings      settings = new ODataQuerySettings
            {
                HandleNullPropagation = HandleNullPropagationOption.False
            };
            ODataQueryContext context = new ODataQueryContext(_model, typeof(SkipCustomer));

            SkipTokenQueryOption      skipTokenQuery = new SkipTokenQueryOption("abc", context);
            IQueryable <SkipCustomer> customers      = new List <SkipCustomer>().AsQueryable();

            // Act & Assert
            ExceptionAssert.Throws <ODataException>(
                () => handler.ApplyTo(customers, skipTokenQuery, new ODataQuerySettings(), null),
                "Unable to parse the skiptoken value 'abc'. Skiptoken value should always be server generated.");
        }
Exemple #9
0
        /// <summary>
        /// Validates a <see cref="SkipTokenQueryOption" />.
        /// </summary>
        /// <param name="skipToken">The $skiptoken query.</param>
        /// <param name="validationSettings">The validation settings.</param>
        public virtual void Validate(SkipTokenQueryOption skipToken, ODataValidationSettings validationSettings)
        {
            if (skipToken == null)
            {
                throw Error.ArgumentNull(nameof(skipToken));
            }

            if (validationSettings == null)
            {
                throw Error.ArgumentNull(nameof(validationSettings));
            }

            if (skipToken.Context != null)
            {
                DefaultQuerySettings defaultSetting = skipToken.Context.DefaultQuerySettings;
                if (!defaultSetting.EnableSkipToken)
                {
                    throw new ODataException(Error.Format(SRResources.NotAllowedQueryOption, AllowedQueryOptions.SkipToken, "AllowedQueryOptions"));
                }
            }
        }
Exemple #10
0
        public void ApplyToOfTSkipTokenQueryOption_Applies_ToQuaryable_WithOrderby()
        {
            // Arrange
            IEdmModel          model    = GetEdmModel();
            ODataQuerySettings settings = new ODataQuerySettings
            {
                HandleNullPropagation = HandleNullPropagationOption.False
            };
            ODataQueryContext context = new ODataQueryContext(model, typeof(SkipTokenCustomer));

            HttpRequest request = RequestFactory.Create(HttpMethods.Get, "http://server/Customers/?$orderby=Name&$skiptoken=Name-'Alex',Id-3");

            ODataQueryOptions    queryOptions   = new ODataQueryOptions(context, request);
            SkipTokenQueryOption skipTokenQuery = queryOptions.SkipToken;

            IQueryable <SkipTokenCustomer> customers = new List <SkipTokenCustomer>
            {
                new SkipTokenCustomer {
                    Id = 2, Name = "Caron"
                },
                new SkipTokenCustomer {
                    Id = 1, Name = "Bndy"
                },
                new SkipTokenCustomer {
                    Id = 3, Name = "Alex"
                },
                new SkipTokenCustomer {
                    Id = 4, Name = "Aab"
                }
            }.AsQueryable();

            // Act
            SkipTokenCustomer[] results = skipTokenQuery.ApplyTo(customers, settings, queryOptions).ToArray();

            // Assert
            Assert.Equal(2, results.Length);
            Assert.Equal(2, results[0].Id);
            Assert.Equal(1, results[1].Id);
        }
Exemple #11
0
        public void CtorSkipTokenQueryOption_SetsProperties()
        {
            // Arrange
            Mock <SkipTokenHandler> handler   = new Mock <SkipTokenHandler>();
            SkipTokenQueryValidator validator = new SkipTokenQueryValidator();
            IServiceProvider        sp        = new ServiceCollection()
                                                .AddSingleton <SkipTokenHandler>(handler.Object)
                                                .AddSingleton <SkipTokenQueryValidator>(validator)
                                                .BuildServiceProvider();

            ODataQueryContext context = new ODataQueryContext(EdmCoreModel.Instance, typeof(int))
            {
                RequestContainer = sp
            };

            // Act
            SkipTokenQueryOption skipTokenQuery = new SkipTokenQueryOption("abc", context);

            // Assert
            Assert.Equal("abc", skipTokenQuery.RawValue);
            Assert.Same(context, skipTokenQuery.Context);
            Assert.Same(handler.Object, skipTokenQuery.Handler);
            Assert.Same(validator, skipTokenQuery.Validator);
        }