public async void ShouldBeBindModelWithModelErrorAsyncTest()
        {
            var queryCollection = Helper.QueryCollection("query", "name=a*");
            var context         = new DefaultHttpContext();

            context.Request.Query = queryCollection;
            var actionContext = new ActionContext {
                HttpContext = context
            };
            var mock = new MockModelBindingContext
            {
                ActionContext = actionContext, ModelState = new ModelStateDictionary()
            };
            var mockLogger = new Mock <ILogger <Customer> >();

            mockLogger.Setup(m => m.IsEnabled(It.IsAny <LogLevel>())).Returns(true);
            var queryModelBinder = new RSqlQueryModelBinder <Customer>(new Settings(), Helper.JsonOptions(), mockLogger.Object);
            await queryModelBinder.BindModelAsync(mock);

            var expected = mock.Result;

            expected.Model
            .Should().BeNull();

            mock.ModelState
            .IsValid.Should().BeFalse();
        }
Example #2
0
        public static Expression <Func <T, bool> > Expression <T>(string query,
                                                                  Action <Settings> settingsConfiguration = null, Action <JsonOptions> jsonOptionsConfiguration = null)
            where T : class
        {
            var settings        = Settings(settingsConfiguration);
            var jsonOptions     = JsonOptions(jsonOptionsConfiguration);
            var queryCollection = QueryCollection(
                jsonOptions.Value.JsonSerializerOptions.PropertyNamingPolicy.ConvertName(settings.QueryField),
                query);
            var mockLogger = new Mock <ILogger <T> >();

            mockLogger.Setup(m => m.IsEnabled(It.IsAny <LogLevel>())).Returns(true);
            var rSqlQueryModelBinder = new RSqlQueryModelBinder <T>(settings, jsonOptions, mockLogger.Object);

            return(rSqlQueryModelBinder
                   .Build(queryCollection)
                   .Value());
        }
        public async void ShouldBeBindModelAsyncWithCacheTest()
        {
            const string query           = "name==a*";
            var          queryCollection = Helper.QueryCollection("query", query);

            var context = new DefaultHttpContext();

            context.Request.Query = queryCollection;
            var actionContext = new ActionContext {
                HttpContext = context
            };
            var mock = new MockModelBindingContext
            {
                ActionContext = actionContext, ModelState = new ModelStateDictionary()
            };

            var settings = new Settings
            {
                QueryCache         = new MemoryCache(new MemoryCacheOptions()),
                OnCreateCacheEntry = (m) => { m.Size = 1024; }
            };
            var mockLogger = new Mock <ILogger <Customer> >();

            mockLogger.Setup(m => m.IsEnabled(It.IsAny <LogLevel>())).Returns(true);


            var queryModelBinder = new RSqlQueryModelBinder <Customer>(settings, Helper.JsonOptions(), mockLogger.Object);
            await queryModelBinder.BindModelAsync(mock);

            var expected = mock.Result.Model as IRSqlQuery <Customer>;

            expected
            .Should().NotBeNull();

            mock.ModelState
            .IsValid.Should().BeTrue();

            settings.QueryCache.TryGetValue(query, out var expected2);
            expected.Should().Be(expected2);
        }
        public void ShouldBeThrowArgumentNullException()
        {
            var option   = Helper.JsonOptions();
            var settings = Helper.Settings();

            // constructor : settings is null
            this.Invoking((a) =>
            {
                _ = new RSqlQueryModelBinder <Customer>(null, option, Helper.MockLogger <Customer>().Object);
            })
            .Should()
            .Throw <ArgumentNullException>();

            // constructor: options is null
            this.Invoking((a) =>
            {
                _ = new RSqlQueryModelBinder <Customer>(settings, null, Helper.MockLogger <Customer>().Object);
            })
            .Should()
            .Throw <ArgumentNullException>();

            // constructor: options is null
            this.Invoking((a) =>
            {
                _ = new RSqlQueryModelBinder <Customer>(settings, Helper.JsonOptions(), null);
            })
            .Should()
            .Throw <ArgumentNullException>();

            // build
            this.Invoking((a) =>
            {
                var binder = new RSqlQueryModelBinder <Customer>(Helper.Settings(), Helper.JsonOptions(), Helper.MockLogger <Customer>().Object);
                binder.Build(null);
            })
            .Should()
            .Throw <ArgumentNullException>();
        }
        public async void ShouldBeBindModelAsyncTest()
        {
            var queryCollection = Helper.QueryCollection("query", "name==a*");
            var context         = new DefaultHttpContext();

            context.Request.Query = queryCollection;
            var actionContext = new ActionContext {
                HttpContext = context
            };
            var mock = new MockModelBindingContext
            {
                ActionContext = actionContext, ModelState = new ModelStateDictionary()
            };
            var queryModelBinder = new RSqlQueryModelBinder <Customer>(new Settings(), Helper.JsonOptions(), Helper.MockLogger <Customer>().Object);
            await queryModelBinder.BindModelAsync(mock);

            var expected = mock.Result.Model as IRSqlQuery <Customer>;

            expected
            .Should().NotBeNull();

            mock.ModelState
            .IsValid.Should().BeTrue();
        }