Beispiel #1
0
        public void Query_Take_Until_Matched_TakeIterator()
        {
            var items = new List <BaseItem>();

            items.AddRange(GetPage("Yes", 1));
            items.AddRange(GetPage("YeNo", 1));
            items.AddRange(GetPage("YeNo", 1));
            items.AddRange(GetPage("Yes", 1));
            items.AddRange(GetPage("YeNo", 1));
            items.AddRange(GetPage("Yes", 1));

            var urls = new object[]
            {
                TestHelpers.RequestSensor("count=2&filter_name=@sub(Ye)", UrlFlag.Columns),         //Yes, YeNo
                TestHelpers.RequestSensor("count=0&filter_name=@sub(Ye)", null),                    //Count
                TestHelpers.RequestSensor("count=1&filter_name=@sub(Ye)&start=2", UrlFlag.Columns), //YeNo
                TestHelpers.RequestSensor("count=3&filter_name=@sub(Ye)&start=3", UrlFlag.Columns)  //Yes
            };

            var client = Initialize_Client(new AddressValidatorResponse(urls)
            {
                ItemOverride = new Dictionary <Content, BaseItem[]>
                {
                    [Content.Sensors] = items.ToArray()
                }
            });

            Func <SensorParameters, Func <int>, IEnumerable <Sensor> > streamer = (p, c) => client.ObjectEngine.StreamObjects <Sensor, SensorParameters>(p, true, c);

            var parameters = new SensorParameters
            {
                SearchFilters = new List <SearchFilter> {
                    new SearchFilter(Property.Name, FilterOperator.Contains, "Ye")
                }
            };

            var iterator = new TakeIterator <Sensor, SensorParameters>(
                2,
                parameters,
                streamer,
                () => client.GetTotalObjects(parameters.Content, parameters.SearchFilters?.ToArray()),
                r => r.Where(s => s.Name == "Yes")
                );

            var response = iterator.ToList();

            Assert.AreEqual(2, response.Count);
        }