private void AssertColumnValues(IEnumerable <string> columnValues, object filterValue, ComparissonTypesEnum comparissonType)
        {
            Assert.IsNotEmpty(columnValues, $"Filter value: {filterValue}");

            switch (comparissonType)
            {
            case ComparissonTypesEnum.Equal:
                foreach (var colValue in columnValues)
                {
                    Assert.IsTrue(colValue.ToLower() == filterValue.ToString().ToLower());
                }

                break;

            case ComparissonTypesEnum.Contains:
                foreach (var colValue in columnValues)
                {
                    Assert.IsTrue(colValue.ToLower().Contains(filterValue.ToString().ToLower()));
                }

                break;

            case ComparissonTypesEnum.DateTime:
                var compareToDT = ((DateTime)filterValue).ToUniversalTime();

                Assert.IsTrue(columnValues.All(x =>
                {
                    var parsedItem = DateTime.Parse(x).ToUniversalTime();

                    return
                    (parsedItem.Year == compareToDT.Year &&
                     parsedItem.Month == compareToDT.Month &&
                     parsedItem.Day == compareToDT.Day &&
                     parsedItem.Hour == compareToDT.Hour &&
                     parsedItem.Minute == compareToDT.Minute &&
                     parsedItem.Second == compareToDT.Second);
                }));
                break;

            case ComparissonTypesEnum.DateTimeOffset:
                var compareToDTOfS = ((DateTimeOffset)filterValue).UtcDateTime;

                Assert.IsTrue(columnValues.All(x =>
                {
                    var parsedItem = DateTime.Parse(x).ToUniversalTime();

                    return
                    (parsedItem.Year == compareToDTOfS.Year &&
                     parsedItem.Month == compareToDTOfS.Month &&
                     parsedItem.Day == compareToDTOfS.Day &&
                     parsedItem.Hour == compareToDTOfS.Hour &&
                     parsedItem.Minute == compareToDTOfS.Minute &&
                     parsedItem.Second == compareToDTOfS.Second);
                }));
                break;

            default:
                throw new ArgumentException();
            }
        }
        public void FilterByColumnShouldWorkProperlyForNonDateTimes(Expression <Func <AllTypesModel, object> > selector, ComparissonTypesEnum comparissonType)
        {
            string columnName = this.GetColumnName(selector);

            if (selector.ToString().ToLower().Contains("nestedmodel"))
            {
                columnName = "Nested Model " + columnName;
            }

            this.navigator.AllTypesDataPage().GoTo();
            var inputId     = "column-search-" + columnName.Replace(' ', '-');
            var table       = new TableElement("table", this.driver);
            var filterValue = this.GetRandomValue(selector.Compile());

            table.TypeInInput($"#{inputId}", filterValue.ToString());
            var columnValues = table.GetColumnRowValuesUntilAny(columnName);

            this.AssertColumnValues(columnValues, filterValue, comparissonType);
        }
        public void FilterByColumnShouldWorkProperlyForDateTimes(Expression <Func <AllTypesModel, object> > selector, ComparissonTypesEnum comparissonType)
        {
            string columnName = this.GetColumnName(selector);

            this.navigator.AllTypesDataPage().GoTo();
            var inputId        = "column-search-" + columnName.Replace(' ', '-');
            var table          = new TableElement("table", this.driver);
            var filterValueObj = this.GetRandomValue(selector.Compile());
            var filterValueDT  = comparissonType == ComparissonTypesEnum.DateTime ? (DateTime)filterValueObj : ((DateTimeOffset)filterValueObj).DateTime;

            Thread.Sleep(GlobalConstants.GlobalThreadSleep);
            table.TypeInInput($"#{inputId}", filterValueDT.ToString("r"));
            var columnValues = table.GetColumnRowValuesUntilAny(columnName);

            this.AssertColumnValues(columnValues, filterValueObj, comparissonType);
        }