Пример #1
0
        public void TestWriteComplexAndImplicitReadWrite()
        {
            var items = Enumerable.Range(0, 101).Select(a => new ComplexRP()
            {
                ID = Guid.NewGuid(), value = a
            }).ToArray();

            using (var container = new RhetosTestContainer(true))
            {
                var context         = container.Resolve <Common.ExecutionContext>();
                var currentUserName = context.UserInfo.UserName;
                var permRepository  = container.Resolve <GenericRepository <TestRowPermissions.ComplexRPPermissions> >();

                ComplexRPPermissions[] perms = new ComplexRPPermissions[]
                {
                    new ComplexRPPermissions()
                    {
                        userName = "******", minVal = 17, maxVal = 50
                    },
                    new ComplexRPPermissions()
                    {
                        userName = currentUserName, minVal = 5, maxVal = 90
                    },
                    new ComplexRPPermissions()
                    {
                        userName = "******", minVal = 9, maxVal = 1
                    },
                };
                permRepository.Save(perms, null, permRepository.Load());

                var gRepository = container.Resolve <GenericRepository <TestRowPermissions.ComplexRP> >();
                gRepository.Save(items, null, gRepository.Load());

                // first test results with explicit RP write filter calls
                {
                    var cAllowed = new ReadCommandInfo()
                    {
                        DataSource  = "TestRowPermissions.ComplexRP",
                        ReadRecords = true,
                        Filters     = new FilterCriteria[] { new FilterCriteria()
                                                             {
                                                                 Filter = _rowPermissionsWriteFilter
                                                             } }
                    };
                    var result = ExecuteReadCommand(cAllowed, container);
                    var values = ((ComplexRP[])result.Records).Select(a => a.value);
                    Assert.IsTrue(Enumerable.Range(5, 86).All(a => values.Contains(a)));
                }
            }

            // illegal insert
            {
                var result = TestWrite <ComplexRP>(null, items, null, null, _writeException);
                Assert.AreEqual(0, result.Count());
            }

            // illegal update subset
            {
                var toUpdate = items.Where(a => a.value > 80).ToArray();
                var result   = TestWrite <ComplexRP>(items, null, toUpdate, null, _writeException);
                Assert.AreEqual(items.Count(), result.Count());
            }

            // illegal delete subset
            {
                var toDelete = items.Where(a => a.value < 10).ToArray();
                var result   = TestWrite <ComplexRP>(items, null, null, toDelete, _writeException);
                Assert.AreEqual(items.Count(), result.Count());
            }

            var legal = items.Where(a => a.value >= 10 && a.value < 80).ToArray();

            // legal insert
            {
                var result = TestWrite <ComplexRP>(null, legal, null, null, null);
                Assert.AreEqual(legal.Count(), result.Count());
            }

            // legal update
            {
                var update = legal.Select(a => new ComplexRP()
                {
                    ID = a.ID, value = 50
                }).ToArray();
                var result = TestWrite <ComplexRP>(legal, null, update, null, null);
                Assert.AreEqual(legal.Count(), result.Count());
                Assert.IsTrue(result.All(a => a.value == 50));
            }

            // legal delete
            {
                var toDelete = legal.Take(10).ToArray();
                var result   = TestWrite <ComplexRP>(legal, null, null, toDelete, null);
                Assert.AreEqual(legal.Count() - 10, result.Count());
                var resIDs = result.Select(a => a.ID).ToList();
                Assert.IsTrue(toDelete.All(a => !resIDs.Contains(a.ID)));
            }
        }
Пример #2
0
        public void TestReadComplexWithContext()
        {
            using (var container = new RhetosTestContainer())
            {
                var context         = container.Resolve <Common.ExecutionContext>();
                var currentUserName = context.UserInfo.UserName;
                var permRepository  = container.Resolve <GenericRepository <TestRowPermissions.ComplexRPPermissions> >();

                ComplexRPPermissions[] perms = new ComplexRPPermissions[]
                {
                    new ComplexRPPermissions()
                    {
                        userName = "******", minVal = 17, maxVal = 50
                    },
                    new ComplexRPPermissions()
                    {
                        userName = currentUserName, minVal = 5, maxVal = 90
                    },
                    new ComplexRPPermissions()
                    {
                        userName = "******", minVal = 9, maxVal = 1
                    },
                };
                permRepository.Save(perms, null, permRepository.Load());

                var gRepository = container.Resolve <GenericRepository <TestRowPermissions.ComplexRP> >();
                var items       = Enumerable.Range(0, 101).Select(a => new ComplexRP()
                {
                    ID = Guid.NewGuid(), value = a
                }).ToList();
                gRepository.Save(items, null, gRepository.Load());

                // first test results with explicit RP filter calls
                {
                    var cAllowed = new ReadCommandInfo()
                    {
                        DataSource  = "TestRowPermissions.ComplexRP",
                        ReadRecords = true,
                        Filters     = new FilterCriteria[] { new FilterCriteria()
                                                             {
                                                                 Filter = _rowPermissionsReadFilter
                                                             } }
                    };
                    var result = ExecuteReadCommand(cAllowed, container);
                    var values = ((ComplexRP[])result.Records).Select(a => a.value);
                    Assert.IsTrue(Enumerable.Range(5, 86).All(a => values.Contains(a)));
                }

                // add item filter
                {
                    var cAllowedFilter = new ReadCommandInfo()
                    {
                        DataSource  = "TestRowPermissions.ComplexRP",
                        ReadRecords = true,
                        Filters     = new FilterCriteria[]
                        {
                            new FilterCriteria()
                            {
                                Filter = _rowPermissionsReadFilter
                            },
                            new FilterCriteria()
                            {
                                Filter = "TestRowPermissions.Value10"
                            }
                        }
                    };
                    var result = ExecuteReadCommand(cAllowedFilter, container);
                    var values = ((ComplexRP[])result.Records).Select(a => a.value);
                    Assert.IsTrue(Enumerable.Range(11, 80).All(a => values.Contains(a)));
                }

                // try invalid range
                {
                    var cInvalidRange = new ReadCommandInfo()
                    {
                        DataSource  = "TestRowPermissions.ComplexRP",
                        ReadRecords = true,
                        Filters     = new FilterCriteria[]
                        {
                            new FilterCriteria()
                            {
                                Property = "value", Operation = "greater", Value = 50
                            },
                        }
                    };

                    TestUtility.ShouldFail(() => ExecuteReadCommand(cInvalidRange, container), _readException);
                }

                {
                    var cInvalidRange2 = new ReadCommandInfo()
                    {
                        DataSource  = "TestRowPermissions.ComplexRP",
                        ReadRecords = true,
                        Filters     = new FilterCriteria[]
                        {
                            new FilterCriteria()
                            {
                                Property = "value", Operation = "less", Value = 2
                            },
                        }
                    };
                    TestUtility.ShouldFail(() => ExecuteReadCommand(cInvalidRange2, container), _readException);
                }

                {
                    var cValidRange = new ReadCommandInfo()
                    {
                        DataSource  = "TestRowPermissions.ComplexRP",
                        ReadRecords = true,
                        Filters     = new FilterCriteria[]
                        {
                            new FilterCriteria()
                            {
                                Property = "value", Operation = "less", Value = 60
                            },
                            new FilterCriteria()
                            {
                                Property = "value", Operation = "greater", Value = 50
                            },
                        }
                    };
                    var result = ExecuteReadCommand(cValidRange, container);
                    Assert.AreEqual(9, result.Records.Count());
                }

                {
                    var cNoRecords = new ReadCommandInfo()
                    {
                        DataSource  = "TestRowPermissions.ComplexRP",
                        ReadRecords = true,
                        Filters     = new FilterCriteria[]
                        {
                            new FilterCriteria()
                            {
                                Property = "value", Operation = "greater", Value = 200
                            },
                        }
                    };
                    var result = ExecuteReadCommand(cNoRecords, container);
                    Assert.AreEqual(0, result.Records.Count());
                }

                {
                    var cTotalCount = new ReadCommandInfo()
                    {
                        DataSource     = "TestRowPermissions.ComplexRP",
                        ReadTotalCount = true,
                    };
                    var result = ExecuteReadCommand(cTotalCount, container);
                    Assert.AreEqual(101, result.TotalCount);
                }

                {
                    var cSingleOk = new ReadCommandInfo()
                    {
                        DataSource  = "TestRowPermissions.ComplexRP",
                        ReadRecords = true,
                        Filters     = new FilterCriteria[]
                        {
                            new FilterCriteria()
                            {
                                Property = "ID", Operation = "equal", Value = items[90].ID
                            },
                        }
                    };
                    var result = ExecuteReadCommand(cSingleOk, container);
                    Assert.AreEqual(1, result.Records.Count());
                }

                {
                    var cSingleFail = new ReadCommandInfo()
                    {
                        DataSource  = "TestRowPermissions.ComplexRP",
                        ReadRecords = true,
                        Filters     = new FilterCriteria[]
                        {
                            new FilterCriteria()
                            {
                                Property = "ID", Operation = "equal", Value = items[91].ID
                            },
                        }
                    };
                    TestUtility.ShouldFail(() => ExecuteReadCommand(cSingleFail, container), _readException);
                }
            }
        }