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(); }
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); }
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"); }
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)); }
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."); }
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."); }
/// <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")); } } }
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); }
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); }