/// <summary>
        /// Adds field search criteria to the search criteria.
        /// </summary>
        /// <param name="speciesObservationFieldSearchCriteria">The field search criteria.</param>
        public void AddFieldFilterExpressions(SpeciesObservationFieldSearchCriteria speciesObservationFieldSearchCriteria)
        {
            int countBefore = FieldFilterExpressions.Count;

            if (speciesObservationFieldSearchCriteria.IsNull())
            {
                return;
            }

            if (!IsActive && !HasSettings)
            {
                IsActive = true;
            }

            var newList = new List <SpeciesObservationFieldSearchCriteria>(FieldFilterExpressions);

            newList.Add(speciesObservationFieldSearchCriteria);
            IEnumerable <SpeciesObservationFieldSearchCriteria> distinctList = newList.Distinct();
            var distinctCollection = new ObservableCollection <SpeciesObservationFieldSearchCriteria>();

            foreach (var filter in distinctList)
            {
                distinctCollection.Add(filter);
            }
            FieldFilterExpressions = distinctCollection;

            int countAfter = FieldFilterExpressions.Count;

            if (!IsActive && (countAfter > countBefore))
            {
                IsActive = true;
            }
        }
 /// <summary>
 /// Add field search criteria to MySettings.
 /// </summary>
 /// <param name="speciesObservationFieldSearchCriteria"></param>
 public void AddFieldFilterExpressions(SpeciesObservationFieldSearchCriteria speciesObservationFieldSearchCriteria)
 {
     FieldSetting.AddFieldFilterExpressions(speciesObservationFieldSearchCriteria);
 }
        public void AddAndRemoveFilteredFieldTest()
        {
            using (ShimsContext.Create())
            {
                // Assign
                string           strClass;
                string           strFieldValue;
                string           strFieldId;
                string           strFieldName;
                string           strCompareOperator;
                string           strLogicalOperator;
                FilterController filterController;
                RedirectResult   result;
                FieldViewModel   model;
                ISpeciesObservationFieldDescription fieldDescription;

                ISpeciesObservationFieldSearchCriteria expectedField =
                    new SpeciesObservationFieldSearchCriteria()
                {
                    Class = new SpeciesObservationClass()
                    {
                        Id = SpeciesObservationClassId.DarwinCore
                    },
                    Operator = CompareOperator.Like,
                    Property = new SpeciesObservationProperty()
                    {
                        Id = SpeciesObservationPropertyId.Owner
                    },
                    Type  = DataType.String,
                    Value = "flodin"
                };

                filterController   = new FilterController();
                strClass           = "DarwinCore";
                strFieldValue      = "flodin";
                strFieldId         = "146";
                strFieldName       = "Owner";
                strCompareOperator = "LIKE";
                strLogicalOperator = "OR";

                model = new FieldViewModel();
                model.FieldDescriptionTypes = new FieldViewModel.SpeciesObservationFieldDescriptionType();
                model.FieldDescriptionTypes.FieldDescriptionTypes = new Dictionary <string, List <ISpeciesObservationFieldDescription> >();
                fieldDescription      = new SpeciesObservationFieldDescription();
                fieldDescription.Type = DataType.String;
                model.FieldDescriptionTypes.FieldDescriptionTypes.Add(strClass, new List <ISpeciesObservationFieldDescription> {
                    fieldDescription
                });

                // Act
                ActionResult viewResult = filterController.Field();

                // Test add field to MySettings
                result = filterController.AddFieldToFilter(
                    strClass,
                    strFieldValue,
                    strFieldId,
                    strFieldName,
                    strCompareOperator,
                    strLogicalOperator,
                    "Home/Index");

                // Assert
                Assert.IsNotNull(viewResult);
                Assert.IsTrue(result.Url == "Home/Index");
                Assert.AreEqual(expectedField.Type, fieldDescription.Type);
                Assert.IsTrue(SessionHandler.MySettings.Filter.Field.FieldFilterExpressions.Count == 1);
                Assert.IsTrue(SessionHandler.MySettings.Filter.Field.FieldFilterExpressions[0].Class.Id.Equals(expectedField.Class.Id));
                Assert.IsTrue(SessionHandler.MySettings.Filter.Field.FieldFilterExpressions[0].Value.Equals(expectedField.Value));
                Assert.IsTrue(SessionHandler.MySettings.Filter.Field.FieldLogicalOperator == LogicalOperator.Or);

                // Test remove field from MySettings
                result = filterController.ResetFields("Home/Index");
                Assert.IsTrue(result.Url == "Home/Index");
                Assert.IsTrue(SessionHandler.MySettings.Filter.Field.FieldFilterExpressions.Count == 0);
                Assert.IsTrue(SessionHandler.MySettings.Filter.Field.FieldLogicalOperator == LogicalOperator.And);
            }
        }