public void ThenAllTheColumnsAreSortable()
        {
            var page = new Pages.OnHoldPrefixes(Setup.TestSetup.Driver);

            bool check <T>(string h, Func <string, T> trans) where T : IComparable =>
            page.ClickHeader(h).Map(ascending =>
            {
                Console.WriteLine($"Header {h} / Ascending {ascending}");
                var f = ascending
                        ? fun((T a, T b) => a.CompareTo(b) <= 0 ? 0 : 1)
                        : fun((T a, T b) => a.CompareTo(b) >= 0 ? 0 : 1);
                var xs = page.GetColumn(h).Select(trans);
                return(xs.Tail().Fold((s: xs.Head(), n: 0), (t, v) => (s: v, n: t.n + f(t.s, v))).n == 0);
            }).Exists(identity);

            page.ColumnHeaders().Filter(s => s != "Reason" && s != "Actions" && s != "Capacity" && s != "Date")
            .All(h => check(h, identity) && check(h, identity))
            .ShouldBeTrue();

            DateTime dateTrans(string s) => DateTime.Parse(s);

            (check("Date", dateTrans) && check("Date", dateTrans)).ShouldBeTrue();

            (check("Capacity", Int32.Parse) && check("Capacity", Int32.Parse)).ShouldBeTrue();
        }
        public void ThenFilterColumnsFetchesTheDesiredDataBasedUponFilterConditions()
        {
            var page    = new Pages.OnHoldPrefixes(Setup.TestSetup.Driver);
            var headers = page.ColumnHeaders().Filter(s => s != "Reason" && s != "Actions");

            page.MoveToLastPage();
            var values = headers.ToDictionary(identity, h => page.GetColumn(h).Last());

            string fix(string s)
            {
                var vv = s.Trim().Split((char[])null, StringSplitOptions.RemoveEmptyEntries);

                return(vv.Count() > 1 ? vv[1] : vv[0]);
            }

            bool check(string h)
            {
                var v = fix(values[h]);

                Console.WriteLine($"Header {h} / Value {v}");
                page.EnterFilter(v);
                System.Threading.Thread.Sleep(500);
                return(page.GetColumn(h).All(x => fix(x).Contains(v)));
            }

            headers.All(check).ShouldBeTrue();
        }
        public void ThenIGetMultipleColumnsSuchAsX(string names)
        {
            var page   = new Pages.OnHoldPrefixes(Setup.TestSetup.Driver);
            var header = page.ColumnHeaders();

            names.Split(',').All(s => header.Contains(s.Trim())).ShouldBeTrue();
        }
        public void ThenItemsPageFetchesTheCountBasedUponTheSelection()
        {
            var page = new Pages.OnHoldPrefixes(Setup.TestSetup.Driver);

            page.ClearFilter();
            System.Threading.Thread.Sleep(500);
            var n = page.PrefixCount();

            Console.WriteLine($"Prefix cound on page = {n}");

            bool check(int cap)
            {
                var m = Math.Min(n, cap);

                page.SelectItemsPerPage(cap);
                System.Threading.Thread.Sleep(500);
                var k = page.GetColumn("Capacity").Count();

                Console.WriteLine($"page size {cap} / expected count {m} / real count {k}");
                return(m == k);
            }

            List(10, 25, 50).All(check).ShouldBeTrue();
        }