コード例 #1
0
        public void VertifyRule_CacheHits_ReturnsTrueAndExceptionsIsNull()
        {
            var visitorMock = new Mock <DataPrivilegeVisitor <TestDbContext, TestEntity> >(null, null, null);
            DataPrivilegeVisitor <TestDbContext, TestEntity> dataPrivilegeVisitor       = visitorMock.Object;
            DataPrivilegeContext <TestDbContext, TestEntity, DataPrivilegeRule> context =
                new DataPrivilegeContext <TestDbContext, TestEntity, DataPrivilegeRule>(new List <DataPrivilegeRule>(), null, null, dataPrivilegeVisitor);
            DataPrivilegeRule rule = new DataPrivilegeRule()
            {
                TableName = "t0", ConditionExpression = "a=b"
            };
            DataPrivilegeInfo <TestEntity> dataPrivilegeInfo = new DataPrivilegeInfo <TestEntity>(t => t.BoolProp, new List <string>());
            //反射设置缓存
            FieldInfo  field      = typeof(DataPrivilegeContext <TestDbContext, TestEntity, DataPrivilegeRule>).GetField("_cache", BindingFlags.NonPublic | BindingFlags.Static);
            var        cache      = field.GetValue(null) as ConcurrentDictionary <string, DataPrivilegeInfo <TestEntity> >;
            MethodInfo methodInfo = typeof(DataPrivilegeContext <TestDbContext, TestEntity, DataPrivilegeRule>).GetMethod("GetCacheKey", BindingFlags.NonPublic | BindingFlags.Instance, Type.DefaultBinder, new Type[] { typeof(DataPrivilegeRule) }, null);
            object     key        = methodInfo.Invoke(context, new object[] { rule });

            cache.TryAdd(key.ToString(), dataPrivilegeInfo);

            bool result = context.VertifyRule(rule, out IList <Exception> exceptions);

            result.ShouldBeTrue();
            exceptions.ShouldBeNull();
            visitorMock.Verify(v => v.Visit(It.IsAny <string>()), Times.Never);
        }
コード例 #2
0
        public void QueryableFilter_NoCustomFields_Success()
        {
            var visitorMock = new Mock <DataPrivilegeVisitor <TestDbContext, TestEntity> >(null, null, null);

            visitorMock.Setup(d => d.Visit("BoolProp=1 and IntProp!=0"))
            .Returns(new VisitResult <TestEntity>(_p => _p.BoolProp == true && _p.IntProp != 0, new List <Exception>(), new List <string>()));
            visitorMock.Setup(d => d.Visit("ByteProp!=0"))
            .Returns(new VisitResult <TestEntity>(_p => _p.ByteProp != 0, new List <Exception>(), new List <string>()));
            TestDbContext dbContext = CreateDbContext();
            DataPrivilegeVisitor <TestDbContext, TestEntity> dataPrivilegeVisitor = visitorMock.Object;
            List <DataPrivilegeRule> rules = new List <DataPrivilegeRule>()
            {
                new DataPrivilegeRule()
                {
                    TableName = "TestEntity", ConditionExpression = "BoolProp=1 and IntProp!=0"
                },
                new DataPrivilegeRule()
                {
                    TableName = "TestEntity", ConditionExpression = "ByteProp!=0"
                }
            };
            DataPrivilegeContext <TestDbContext, TestEntity, DataPrivilegeRule> context =
                new DataPrivilegeContext <TestDbContext, TestEntity, DataPrivilegeRule>(rules, dbContext, null, dataPrivilegeVisitor);

            dbContext.TestEntities.Add(new TestEntity()
            {
                Id = "0", BoolProp = true, IntProp = 1
            });
            dbContext.TestEntities.Add(new TestEntity()
            {
                Id = "1", ByteProp = 1
            });
            dbContext.TestEntities.Add(new TestEntity()
            {
                Id = "11"
            });
            dbContext.TestEntities.Add(new TestEntity()
            {
                Id = "12"
            });
            dbContext.SaveChanges();

            var entities = context.Filter(dbContext.TestEntities).ToList();

            entities.Count.ShouldBe(2);
            entities.ShouldContain(t => t.Id == "0");
            entities.ShouldContain(t => t.Id == "1");
        }
コード例 #3
0
        public void VertifyRule_ParseSuccess_ReturnsTrueAndExceptionsIsEmpty()
        {
            var visitorMock = new Mock <DataPrivilegeVisitor <TestDbContext, TestEntity> >(null, null, null);
            VisitResult <TestEntity> visitResult = new VisitResult <TestEntity>(t => t.BoolProp, new List <Exception>(), new List <string>());

            visitorMock.Setup(v => v.Visit(It.IsNotNull <string>())).Returns(visitResult);
            DataPrivilegeVisitor <TestDbContext, TestEntity> dataPrivilegeVisitor       = visitorMock.Object;
            DataPrivilegeContext <TestDbContext, TestEntity, DataPrivilegeRule> context =
                new DataPrivilegeContext <TestDbContext, TestEntity, DataPrivilegeRule>(new List <DataPrivilegeRule>(), null, null, dataPrivilegeVisitor);

            bool result = context.VertifyRule(new DataPrivilegeRule()
            {
                TableName = "t", ConditionExpression = "a=b"
            }, out IList <Exception> exceptions);

            result.ShouldBeTrue();
            exceptions.ShouldBeEmpty();
            visitorMock.Verify(v => v.Visit(It.IsAny <string>()), Times.Once);
        }
コード例 #4
0
        public void VertifyRule_ParseError_ReturnsFalse()
        {
            var visitorMock = new Mock <DataPrivilegeVisitor <TestDbContext, TestEntity> >(null, null, null);
            VisitResult <TestEntity> visitResult = new VisitResult <TestEntity>(null, new List <Exception>()
            {
                new Exception()
            }, new List <string>());

            visitorMock.Setup(v => v.Visit("a=c")).Returns(visitResult);
            DataPrivilegeVisitor <TestDbContext, TestEntity> dataPrivilegeVisitor       = visitorMock.Object;
            DataPrivilegeContext <TestDbContext, TestEntity, DataPrivilegeRule> context =
                new DataPrivilegeContext <TestDbContext, TestEntity, DataPrivilegeRule>(new List <DataPrivilegeRule>(), null, null, dataPrivilegeVisitor);

            bool result = context.VertifyRule(new DataPrivilegeRule()
            {
                TableName = "table", ConditionExpression = "a=c"
            }, out IList <Exception> exceptions);

            result.ShouldBeFalse();
            exceptions.ShouldNotBeEmpty();
            visitorMock.Verify(v => v.Visit(It.IsAny <string>()), Times.Once);
        }
コード例 #5
0
 public DataPrivilegeContext(List <DataPrivilegeRule> rules, TestDbContext dbContext, IDataPrivilegeFieldProvider dataPrivilegeFieldProvider, DataPrivilegeVisitor <TestDbContext, TestEntity> dataPrivilegeVisitor) : base(rules, dbContext, dataPrivilegeFieldProvider, dataPrivilegeVisitor)
 {
 }