public void AddFiltersAndReplacePredefinedValuesTests() { // arrange const string columnSystemName = "CreatedBy"; const string userFullName = "James Bond"; var sourceFilterList = new List<IFilterDescriptor> { new FilterDescriptor(LogicalOperators.And, new MobileObservableCollection<IFilterDescriptor>()) { ColumnName = columnSystemName, Value = new FilterValue { DisplayName = "Current User", SystemName = "user", Type = FilterValueType.SystemVariable } } }; var destinationFilterList = new List<IFilterDescriptor>(); var queryGenerator = new SearchQueryGenerator(); var tb = new TableDefinition(columnSystemName); tb.AddField(columnSystemName, ColumnTypes.String); queryGenerator.RootTable = tb; var identityMock = Mock.Create<IMQ1Identity>(); var principalMock = Mock.Create<IPrincipal>(); Mock.Arrange(() => principalMock.Identity).Returns(identityMock); Mock.Arrange(() => identityMock.FullName).Returns(userFullName); Csla.ApplicationContext.User = principalMock; // act QueryGeneratorExtensions.AddFilters(sourceFilterList, destinationFilterList, tb, queryGenerator); // assert Assert.AreEqual(userFullName, destinationFilterList.First().Value); }
/// <summary> /// Adds the filters. /// </summary> /// <param name="sourceFilterList">The source filter list.</param> /// <param name="destinationFilterList">The destination filter list.</param> /// <param name="rootTable">The root table.</param> /// <param name="queryGenerator">The query generator.</param> public static void AddFilters(IEnumerable<IFilterDescriptor> sourceFilterList, IList<IFilterDescriptor> destinationFilterList, TableDefinition rootTable, SearchQueryGenerator queryGenerator) { if (sourceFilterList == null || destinationFilterList == null || queryGenerator == null) return; foreach (var filter in sourceFilterList) { if (filter.FilterDescriptors != null && filter.FilterDescriptors.Count > 0) { var list = new List<IFilterDescriptor>(); destinationFilterList.Add(new SharedTypes.QueryGenerator.FilterDescriptor(filter.LogicalOperator, list)); AddFilters(filter.FilterDescriptors, list, rootTable, queryGenerator); } else { var column = queryGenerator.FindColumn(filter.ColumnName, true, false); if (column != null) destinationFilterList.Add(new SharedTypes.QueryGenerator.FilterDescriptor(column, filter.ColumnName, filter.Operator, filter.Value, filter.MemberType)); else { if (!string.IsNullOrWhiteSpace(filter.ColumnName)) if (filter.ColumnName.Contains('.')) { var parts = filter.ColumnName.Split('.'); if (parts.Count() < 3) return; var t = new TableDefinition(parts[0]); t.AddField(parts[1], ColumnTypes.Reference); queryGenerator.AddBaseTable(t); } else destinationFilterList.Add(new SharedTypes.QueryGenerator.FilterDescriptor(filter.ColumnName, filter.ColumnName, filter.Operator, filter.Value, filter.MemberType)); } } } }