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))); } }
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); } } }