diff --git a/test/raven-integration/DataFilter/DataFilterFilteringLists.cs b/test/raven-integration/DataFilter/DataFilterFilteringLists.cs
index e7a64ec2..cdd3ade1 100644
--- a/test/raven-integration/DataFilter/DataFilterFilteringLists.cs
+++ b/test/raven-integration/DataFilter/DataFilterFilteringLists.cs
@@ -540,6 +540,255 @@ namespace raven_integration
}
+ ///
+ ///
+ ///
+ [Fact]
+ public async void TextOpGreaterThanFilterWorks()
+ {
+
+ var TestName = "TextOpGreaterThanFilterWorks";
+ var WidgetRunNameStart = Util.Uniquify(TestName);
+
+ List InclusiveWidgetIdList = new List();
+ List ExclusiveWidgetIdList = new List();
+
+ //CREATE 4 TEST WIDGETS
+ //two inclusive and two not inclusive
+
+ //first inclusive widget
+ dynamic w = new JObject();
+ w.name = Util.Uniquify(WidgetRunNameStart);
+ w.notes = "Alabama";
+ w.roles = 0;
+
+ ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ InclusiveWidgetIdList.Add(a.ObjectResponse["data"]["id"].Value());
+
+ //second inclusive widget
+ w.name = Util.Uniquify(WidgetRunNameStart);
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ InclusiveWidgetIdList.Add(a.ObjectResponse["data"]["id"].Value());
+
+ //first exclusive widget
+ w.name = Util.Uniquify(WidgetRunNameStart);
+ w.notes = "Aardvark";
+ w.active = false;
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ ExclusiveWidgetIdList.Add(a.ObjectResponse["data"]["id"].Value());
+
+ //second exclusive widget
+ w.name = Util.Uniquify(WidgetRunNameStart);
+ w.active = false;
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ ExclusiveWidgetIdList.Add(a.ObjectResponse["data"]["id"].Value());
+
+
+ //CREATE FILTER
+ dynamic d = new JObject();
+ d.name = Util.Uniquify(WidgetRunNameStart);
+ // d.ownerId = 1L;
+ d["public"] = true;
+ d.listKey = "widget";
+
+ dynamic dfilter = new JArray();
+
+ //name starts with filter to constrict to widgets that this test block created only
+ dynamic DataFilterNameStart = new JObject();
+ DataFilterNameStart.fld = "name";
+ DataFilterNameStart.op = OpStartsWith;
+ DataFilterNameStart.value = WidgetRunNameStart;
+ dfilter.Add(DataFilterNameStart);
+
+ //active bool test filter
+ dynamic DataFilterActive = new JObject();
+ DataFilterActive.fld = "notes";
+ DataFilterActive.op = OpGreaterThan;
+ DataFilterActive.value = "Aardvark";
+ dfilter.Add(DataFilterActive);
+
+ d.filter = dfilter.ToString();//it expects it to be a json string, not actual json
+
+ a = await Util.PostAsync("DataFilter", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+
+ long DataFilterId = a.ObjectResponse["data"]["id"].Value();
+
+ //NOW FETCH WIDGET LIST WITH FILTER
+ a = await Util.GetAsync($"Widget/listwidgets?Offset=0&Limit=999&DataFilterId={DataFilterId.ToString()}", await Util.GetTokenAsync("manager", "l3tm3in"));
+ Util.ValidateDataReturnResponseOk(a);
+ Util.ValidateHTTPStatusCode(a, 200);
+
+ //assert contains at least two records
+ ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(1);
+ var v = ((JArray)a.ObjectResponse["data"]);
+ List IDInResultList = new List();
+ int InclusiveMatchCount = 0;
+ int ExclusiveMatchCount = 0;
+ foreach (JObject o in v)
+ {
+ if (InclusiveWidgetIdList.Contains(o["id"].Value()))
+ InclusiveMatchCount++;
+ if (ExclusiveWidgetIdList.Contains(o["id"].Value()))
+ ExclusiveMatchCount++;
+ }
+
+ InclusiveMatchCount.Should().Be(InclusiveWidgetIdList.Count);
+ ExclusiveMatchCount.Should().Be(0);
+
+ //DELETE WIDGETS
+ foreach (long l in InclusiveWidgetIdList)
+ {
+ a = await Util.DeleteAsync("Widget/" + l.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+ }
+
+ foreach (long l in ExclusiveWidgetIdList)
+ {
+ a = await Util.DeleteAsync("Widget/" + l.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+ }
+
+ //DELETE DATAFILTER
+ a = await Util.DeleteAsync("DataFilter/" + DataFilterId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+
+ }
+
+
+///
+ ///
+ ///
+ [Fact]
+ public async void TextOpGreaterThanOrEqualToFilterWorks()
+ {
+
+ var TestName = "TextOpGreaterThanOrEqualToFilterWorks";
+ var WidgetRunNameStart = Util.Uniquify(TestName);
+
+ List InclusiveWidgetIdList = new List();
+ List ExclusiveWidgetIdList = new List();
+
+ //CREATE 4 TEST WIDGETS
+ //two inclusive and two not inclusive
+
+ //first inclusive widget
+ dynamic w = new JObject();
+ w.name = Util.Uniquify(WidgetRunNameStart);
+ w.notes = "Bjorn";
+ w.roles = 0;
+
+ ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ InclusiveWidgetIdList.Add(a.ObjectResponse["data"]["id"].Value());
+
+ //second inclusive widget
+ w.name = Util.Uniquify(WidgetRunNameStart);
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ InclusiveWidgetIdList.Add(a.ObjectResponse["data"]["id"].Value());
+
+ //first exclusive widget
+ w.name = Util.Uniquify(WidgetRunNameStart);
+ w.notes = "Bing";
+ w.active = false;
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ ExclusiveWidgetIdList.Add(a.ObjectResponse["data"]["id"].Value());
+
+ //second exclusive widget
+ w.name = Util.Uniquify(WidgetRunNameStart);
+ w.active = false;
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ ExclusiveWidgetIdList.Add(a.ObjectResponse["data"]["id"].Value());
+
+
+ //CREATE FILTER
+ dynamic d = new JObject();
+ d.name = Util.Uniquify(WidgetRunNameStart);
+ // d.ownerId = 1L;
+ d["public"] = true;
+ d.listKey = "widget";
+
+ dynamic dfilter = new JArray();
+
+ //name starts with filter to constrict to widgets that this test block created only
+ dynamic DataFilterNameStart = new JObject();
+ DataFilterNameStart.fld = "name";
+ DataFilterNameStart.op = OpStartsWith;
+ DataFilterNameStart.value = WidgetRunNameStart;
+ dfilter.Add(DataFilterNameStart);
+
+ //active bool test filter
+ dynamic DataFilterActive = new JObject();
+ DataFilterActive.fld = "notes";
+ DataFilterActive.op = OpGreaterThanOrEqualTo;
+ DataFilterActive.value = "Bjarn";
+ dfilter.Add(DataFilterActive);
+
+ d.filter = dfilter.ToString();//it expects it to be a json string, not actual json
+
+ a = await Util.PostAsync("DataFilter", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+
+ long DataFilterId = a.ObjectResponse["data"]["id"].Value();
+
+ //NOW FETCH WIDGET LIST WITH FILTER
+ a = await Util.GetAsync($"Widget/listwidgets?Offset=0&Limit=999&DataFilterId={DataFilterId.ToString()}", await Util.GetTokenAsync("manager", "l3tm3in"));
+ Util.ValidateDataReturnResponseOk(a);
+ Util.ValidateHTTPStatusCode(a, 200);
+
+ //assert contains at least two records
+ ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(1);
+ var v = ((JArray)a.ObjectResponse["data"]);
+ List IDInResultList = new List();
+ int InclusiveMatchCount = 0;
+ int ExclusiveMatchCount = 0;
+ foreach (JObject o in v)
+ {
+ if (InclusiveWidgetIdList.Contains(o["id"].Value()))
+ InclusiveMatchCount++;
+ if (ExclusiveWidgetIdList.Contains(o["id"].Value()))
+ ExclusiveMatchCount++;
+ }
+
+ InclusiveMatchCount.Should().Be(InclusiveWidgetIdList.Count);
+ ExclusiveMatchCount.Should().Be(0);
+
+ //DELETE WIDGETS
+ foreach (long l in InclusiveWidgetIdList)
+ {
+ a = await Util.DeleteAsync("Widget/" + l.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+ }
+
+ foreach (long l in ExclusiveWidgetIdList)
+ {
+ a = await Util.DeleteAsync("Widget/" + l.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+ }
+
+ //DELETE DATAFILTER
+ a = await Util.DeleteAsync("DataFilter/" + DataFilterId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+
+ }
+
+
+
+//======================
+
#endregion string filter tests
///////////////////////////////////////////////////////////////////////////////