diff --git a/DataFilter/DataFilterFilteringLists.cs b/DataFilter/DataFilterFilteringLists.cs
index d87a30d..204919e 100644
--- a/DataFilter/DataFilterFilteringLists.cs
+++ b/DataFilter/DataFilterFilteringLists.cs
@@ -65,7 +65,19 @@ same as the server does but in a central location here for all tests to use.
public const string TokenPast30Days = "{[past30days]}";
public const string TokenPast24Hours = "{[past24hours]}";
-
+ //Months THIS year
+ public const string TokenJanuary = "{[january]}";
+ public const string TokenFebruary = "{[february]}";
+ public const string TokenMarch = "{[march]}";
+ public const string TokenApril = "{[april]}";
+ public const string TokenMay = "{[may]}";
+ public const string TokenJune = "{[june]}";
+ public const string TokenJuly = "{[july]}";
+ public const string TokenAugust = "{[august]}";
+ public const string TokenSeptember = "{[september]}";
+ public const string TokenOctober = "{[october]}";
+ public const string TokenNovember = "{[november]}";
+ public const string TokenDecember = "{[december]}";
#region DATE REGULAR FILTERS
@@ -1528,7 +1540,7 @@ same as the server does but in a central location here for all tests to use.
w.name = Util.Uniquify(WidgetNameStart);
w.notes = "blah";
w.customFields = Util.WidgetRequiredCustomFieldsJsonString();
-
+
//Put it right at midnight next month to ensure boundaries are respected
w.startDate = new DateTime(RelativeToday.Year, RelativeToday.Month, 2, 00, 00, 00).AddMonths(1);
w.endDate = new DateTime(RelativeToday.Year, RelativeToday.Month, 2, 00, 00, 00).AddMonths(1).AddHours(1);
@@ -2918,6 +2930,1265 @@ same as the server does but in a central location here for all tests to use.
a = await Util.DeleteAsync("DataFilter/" + DataFilterId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
Util.ValidateHTTPStatusCode(a, 204);
}
+
+
+
+ ///
+ ///
+ ///
+ [Fact]
+ public async void DateTokenJanuaryFilterWorks()
+ {
+ int MonthNumberUnderTest = 1;
+ string DateTokenUnderTest = TokenJanuary;
+
+ var WidgetNameStart = "DateTokenJanuaryFilterWorks";
+
+ long IncludedWidgetId = 0;
+ long ExcludedWidgetId = 0;
+
+ //CREATE TEST WIDGETS
+
+ //included widget
+ dynamic w = new JObject();
+ w.name = Util.Uniquify(WidgetNameStart);
+ w.notes = "blah";
+ w.customFields = Util.WidgetRequiredCustomFieldsJsonString();
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddHours(1).ToUniversalTime();
+
+ ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ IncludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //Excluded widget
+ w.name = Util.Uniquify(WidgetNameStart);
+ //First day of this month minus 2 days equals second to last day of last month
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).AddHours(1).ToUniversalTime();
+
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ ExcludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //CREATE FILTER
+ dynamic d = new JObject();
+ d.name = Util.Uniquify(WidgetNameStart);
+
+ 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 = Util.OpStartsWith;
+ DataFilterNameStart.value = WidgetNameStart;
+ dfilter.Add(DataFilterNameStart);
+
+ //## INCLUSIVE FILTER
+ dynamic FilterItem = new JObject();
+ FilterItem.fld = "startdate";
+ FilterItem.op = Util.OpEquality;
+ FilterItem.value = DateTokenUnderTest;
+ dfilter.Add(FilterItem);
+
+ 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 this test record
+ ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(0);
+ var v = ((JArray)a.ObjectResponse["data"]);
+ List IDInResultList = new List();
+ int InclusiveMatchCount = 0;
+ int ExclusiveMatchCount = 0;
+ foreach (JObject o in v)
+ {
+ if (IncludedWidgetId == o["id"].Value())
+ InclusiveMatchCount++;
+ if (ExcludedWidgetId == o["id"].Value())//whups
+ ExclusiveMatchCount++;
+ }
+
+ InclusiveMatchCount.Should().BeGreaterOrEqualTo(1);
+ ExclusiveMatchCount.Should().Be(0);
+
+ //DELETE WIDGETS
+ a = await Util.DeleteAsync("Widget/" + IncludedWidgetId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+
+ a = await Util.DeleteAsync("Widget/" + ExcludedWidgetId.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 DateTokenFebruaryFilterWorks()
+ {
+ int MonthNumberUnderTest = 2;
+ string DateTokenUnderTest = TokenFebruary;
+
+ var WidgetNameStart = "DateTokenFebruaryFilterWorks";
+
+ long IncludedWidgetId = 0;
+ long ExcludedWidgetId = 0;
+
+ //CREATE TEST WIDGETS
+
+ //included widget
+ dynamic w = new JObject();
+ w.name = Util.Uniquify(WidgetNameStart);
+ w.notes = "blah";
+ w.customFields = Util.WidgetRequiredCustomFieldsJsonString();
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddHours(1).ToUniversalTime();
+
+ ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ IncludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //Excluded widget
+ w.name = Util.Uniquify(WidgetNameStart);
+ //First day of this month minus 2 days equals second to last day of last month
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).AddHours(1).ToUniversalTime();
+
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ ExcludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //CREATE FILTER
+ dynamic d = new JObject();
+ d.name = Util.Uniquify(WidgetNameStart);
+
+ 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 = Util.OpStartsWith;
+ DataFilterNameStart.value = WidgetNameStart;
+ dfilter.Add(DataFilterNameStart);
+
+ //## INCLUSIVE FILTER
+ dynamic FilterItem = new JObject();
+ FilterItem.fld = "startdate";
+ FilterItem.op = Util.OpEquality;
+ FilterItem.value = DateTokenUnderTest;
+ dfilter.Add(FilterItem);
+
+ 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 this test record
+ ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(0);
+ var v = ((JArray)a.ObjectResponse["data"]);
+ List IDInResultList = new List();
+ int InclusiveMatchCount = 0;
+ int ExclusiveMatchCount = 0;
+ foreach (JObject o in v)
+ {
+ if (IncludedWidgetId == o["id"].Value())
+ InclusiveMatchCount++;
+ if (ExcludedWidgetId == o["id"].Value())//whups
+ ExclusiveMatchCount++;
+ }
+
+ InclusiveMatchCount.Should().BeGreaterOrEqualTo(1);
+ ExclusiveMatchCount.Should().Be(0);
+
+ //DELETE WIDGETS
+ a = await Util.DeleteAsync("Widget/" + IncludedWidgetId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+
+ a = await Util.DeleteAsync("Widget/" + ExcludedWidgetId.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 DateTokenMarchFilterWorks()
+ {
+ int MonthNumberUnderTest = 3;
+ string DateTokenUnderTest = TokenMarch;
+
+ var WidgetNameStart = "DateTokenMarchFilterWorks";
+
+ long IncludedWidgetId = 0;
+ long ExcludedWidgetId = 0;
+
+ //CREATE TEST WIDGETS
+
+ //included widget
+ dynamic w = new JObject();
+ w.name = Util.Uniquify(WidgetNameStart);
+ w.notes = "blah";
+ w.customFields = Util.WidgetRequiredCustomFieldsJsonString();
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddHours(1).ToUniversalTime();
+
+ ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ IncludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //Excluded widget
+ w.name = Util.Uniquify(WidgetNameStart);
+ //First day of this month minus 2 days equals second to last day of last month
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).AddHours(1).ToUniversalTime();
+
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ ExcludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //CREATE FILTER
+ dynamic d = new JObject();
+ d.name = Util.Uniquify(WidgetNameStart);
+
+ 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 = Util.OpStartsWith;
+ DataFilterNameStart.value = WidgetNameStart;
+ dfilter.Add(DataFilterNameStart);
+
+ //## INCLUSIVE FILTER
+ dynamic FilterItem = new JObject();
+ FilterItem.fld = "startdate";
+ FilterItem.op = Util.OpEquality;
+ FilterItem.value = DateTokenUnderTest;
+ dfilter.Add(FilterItem);
+
+ 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 this test record
+ ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(0);
+ var v = ((JArray)a.ObjectResponse["data"]);
+ List IDInResultList = new List();
+ int InclusiveMatchCount = 0;
+ int ExclusiveMatchCount = 0;
+ foreach (JObject o in v)
+ {
+ if (IncludedWidgetId == o["id"].Value())
+ InclusiveMatchCount++;
+ if (ExcludedWidgetId == o["id"].Value())//whups
+ ExclusiveMatchCount++;
+ }
+
+ InclusiveMatchCount.Should().BeGreaterOrEqualTo(1);
+ ExclusiveMatchCount.Should().Be(0);
+
+ //DELETE WIDGETS
+ a = await Util.DeleteAsync("Widget/" + IncludedWidgetId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+
+ a = await Util.DeleteAsync("Widget/" + ExcludedWidgetId.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 DateTokenAprilFilterWorks()
+ {
+ int MonthNumberUnderTest = 4;
+ string DateTokenUnderTest = TokenApril;
+
+ var WidgetNameStart = "DateTokenAprilFilterWorks";
+
+ long IncludedWidgetId = 0;
+ long ExcludedWidgetId = 0;
+
+ //CREATE TEST WIDGETS
+
+ //included widget
+ dynamic w = new JObject();
+ w.name = Util.Uniquify(WidgetNameStart);
+ w.notes = "blah";
+ w.customFields = Util.WidgetRequiredCustomFieldsJsonString();
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddHours(1).ToUniversalTime();
+
+ ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ IncludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //Excluded widget
+ w.name = Util.Uniquify(WidgetNameStart);
+ //First day of this month minus 2 days equals second to last day of last month
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).AddHours(1).ToUniversalTime();
+
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ ExcludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //CREATE FILTER
+ dynamic d = new JObject();
+ d.name = Util.Uniquify(WidgetNameStart);
+
+ 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 = Util.OpStartsWith;
+ DataFilterNameStart.value = WidgetNameStart;
+ dfilter.Add(DataFilterNameStart);
+
+ //## INCLUSIVE FILTER
+ dynamic FilterItem = new JObject();
+ FilterItem.fld = "startdate";
+ FilterItem.op = Util.OpEquality;
+ FilterItem.value = DateTokenUnderTest;
+ dfilter.Add(FilterItem);
+
+ 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 this test record
+ ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(0);
+ var v = ((JArray)a.ObjectResponse["data"]);
+ List IDInResultList = new List();
+ int InclusiveMatchCount = 0;
+ int ExclusiveMatchCount = 0;
+ foreach (JObject o in v)
+ {
+ if (IncludedWidgetId == o["id"].Value())
+ InclusiveMatchCount++;
+ if (ExcludedWidgetId == o["id"].Value())//whups
+ ExclusiveMatchCount++;
+ }
+
+ InclusiveMatchCount.Should().BeGreaterOrEqualTo(1);
+ ExclusiveMatchCount.Should().Be(0);
+
+ //DELETE WIDGETS
+ a = await Util.DeleteAsync("Widget/" + IncludedWidgetId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+
+ a = await Util.DeleteAsync("Widget/" + ExcludedWidgetId.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 DateTokenMayFilterWorks()
+ {
+ int MonthNumberUnderTest = 5;
+ string DateTokenUnderTest = TokenMay;
+
+ var WidgetNameStart = "DateTokenMayFilterWorks";
+
+ long IncludedWidgetId = 0;
+ long ExcludedWidgetId = 0;
+
+ //CREATE TEST WIDGETS
+
+ //included widget
+ dynamic w = new JObject();
+ w.name = Util.Uniquify(WidgetNameStart);
+ w.notes = "blah";
+ w.customFields = Util.WidgetRequiredCustomFieldsJsonString();
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddHours(1).ToUniversalTime();
+
+ ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ IncludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //Excluded widget
+ w.name = Util.Uniquify(WidgetNameStart);
+ //First day of this month minus 2 days equals second to last day of last month
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).AddHours(1).ToUniversalTime();
+
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ ExcludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //CREATE FILTER
+ dynamic d = new JObject();
+ d.name = Util.Uniquify(WidgetNameStart);
+
+ 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 = Util.OpStartsWith;
+ DataFilterNameStart.value = WidgetNameStart;
+ dfilter.Add(DataFilterNameStart);
+
+ //## INCLUSIVE FILTER
+ dynamic FilterItem = new JObject();
+ FilterItem.fld = "startdate";
+ FilterItem.op = Util.OpEquality;
+ FilterItem.value = DateTokenUnderTest;
+ dfilter.Add(FilterItem);
+
+ 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 this test record
+ ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(0);
+ var v = ((JArray)a.ObjectResponse["data"]);
+ List IDInResultList = new List();
+ int InclusiveMatchCount = 0;
+ int ExclusiveMatchCount = 0;
+ foreach (JObject o in v)
+ {
+ if (IncludedWidgetId == o["id"].Value())
+ InclusiveMatchCount++;
+ if (ExcludedWidgetId == o["id"].Value())//whups
+ ExclusiveMatchCount++;
+ }
+
+ InclusiveMatchCount.Should().BeGreaterOrEqualTo(1);
+ ExclusiveMatchCount.Should().Be(0);
+
+ //DELETE WIDGETS
+ a = await Util.DeleteAsync("Widget/" + IncludedWidgetId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+
+ a = await Util.DeleteAsync("Widget/" + ExcludedWidgetId.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 DateTokenJuneFilterWorks()
+ {
+ int MonthNumberUnderTest = 6;
+ string DateTokenUnderTest = TokenJune;
+
+ var WidgetNameStart = "DateTokenJuneFilterWorks";
+
+ long IncludedWidgetId = 0;
+ long ExcludedWidgetId = 0;
+
+ //CREATE TEST WIDGETS
+
+ //included widget
+ dynamic w = new JObject();
+ w.name = Util.Uniquify(WidgetNameStart);
+ w.notes = "blah";
+ w.customFields = Util.WidgetRequiredCustomFieldsJsonString();
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddHours(1).ToUniversalTime();
+
+ ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ IncludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //Excluded widget
+ w.name = Util.Uniquify(WidgetNameStart);
+ //First day of this month minus 2 days equals second to last day of last month
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).AddHours(1).ToUniversalTime();
+
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ ExcludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //CREATE FILTER
+ dynamic d = new JObject();
+ d.name = Util.Uniquify(WidgetNameStart);
+
+ 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 = Util.OpStartsWith;
+ DataFilterNameStart.value = WidgetNameStart;
+ dfilter.Add(DataFilterNameStart);
+
+ //## INCLUSIVE FILTER
+ dynamic FilterItem = new JObject();
+ FilterItem.fld = "startdate";
+ FilterItem.op = Util.OpEquality;
+ FilterItem.value = DateTokenUnderTest;
+ dfilter.Add(FilterItem);
+
+ 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 this test record
+ ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(0);
+ var v = ((JArray)a.ObjectResponse["data"]);
+ List IDInResultList = new List();
+ int InclusiveMatchCount = 0;
+ int ExclusiveMatchCount = 0;
+ foreach (JObject o in v)
+ {
+ if (IncludedWidgetId == o["id"].Value())
+ InclusiveMatchCount++;
+ if (ExcludedWidgetId == o["id"].Value())//whups
+ ExclusiveMatchCount++;
+ }
+
+ InclusiveMatchCount.Should().BeGreaterOrEqualTo(1);
+ ExclusiveMatchCount.Should().Be(0);
+
+ //DELETE WIDGETS
+ a = await Util.DeleteAsync("Widget/" + IncludedWidgetId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+
+ a = await Util.DeleteAsync("Widget/" + ExcludedWidgetId.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 DateTokenJulyFilterWorks()
+ {
+ int MonthNumberUnderTest = 7;
+ string DateTokenUnderTest = TokenJuly;
+
+ var WidgetNameStart = "DateTokenJulyFilterWorks";
+
+ long IncludedWidgetId = 0;
+ long ExcludedWidgetId = 0;
+
+ //CREATE TEST WIDGETS
+
+ //included widget
+ dynamic w = new JObject();
+ w.name = Util.Uniquify(WidgetNameStart);
+ w.notes = "blah";
+ w.customFields = Util.WidgetRequiredCustomFieldsJsonString();
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddHours(1).ToUniversalTime();
+
+ ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ IncludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //Excluded widget
+ w.name = Util.Uniquify(WidgetNameStart);
+ //First day of this month minus 2 days equals second to last day of last month
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).AddHours(1).ToUniversalTime();
+
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ ExcludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //CREATE FILTER
+ dynamic d = new JObject();
+ d.name = Util.Uniquify(WidgetNameStart);
+
+ 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 = Util.OpStartsWith;
+ DataFilterNameStart.value = WidgetNameStart;
+ dfilter.Add(DataFilterNameStart);
+
+ //## INCLUSIVE FILTER
+ dynamic FilterItem = new JObject();
+ FilterItem.fld = "startdate";
+ FilterItem.op = Util.OpEquality;
+ FilterItem.value = DateTokenUnderTest;
+ dfilter.Add(FilterItem);
+
+ 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 this test record
+ ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(0);
+ var v = ((JArray)a.ObjectResponse["data"]);
+ List IDInResultList = new List();
+ int InclusiveMatchCount = 0;
+ int ExclusiveMatchCount = 0;
+ foreach (JObject o in v)
+ {
+ if (IncludedWidgetId == o["id"].Value())
+ InclusiveMatchCount++;
+ if (ExcludedWidgetId == o["id"].Value())//whups
+ ExclusiveMatchCount++;
+ }
+
+ InclusiveMatchCount.Should().BeGreaterOrEqualTo(1);
+ ExclusiveMatchCount.Should().Be(0);
+
+ //DELETE WIDGETS
+ a = await Util.DeleteAsync("Widget/" + IncludedWidgetId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+
+ a = await Util.DeleteAsync("Widget/" + ExcludedWidgetId.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 DateTokenTokenAugustFilterWorks()
+ {
+ int MonthNumberUnderTest = 8;
+ string DateTokenUnderTest = TokenAugust;
+
+ var WidgetNameStart = "DateTokenTokenAugustFilterWorks";
+
+ long IncludedWidgetId = 0;
+ long ExcludedWidgetId = 0;
+
+ //CREATE TEST WIDGETS
+
+ //included widget
+ dynamic w = new JObject();
+ w.name = Util.Uniquify(WidgetNameStart);
+ w.notes = "blah";
+ w.customFields = Util.WidgetRequiredCustomFieldsJsonString();
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddHours(1).ToUniversalTime();
+
+ ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ IncludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //Excluded widget
+ w.name = Util.Uniquify(WidgetNameStart);
+ //First day of this month minus 2 days equals second to last day of last month
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).AddHours(1).ToUniversalTime();
+
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ ExcludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //CREATE FILTER
+ dynamic d = new JObject();
+ d.name = Util.Uniquify(WidgetNameStart);
+
+ 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 = Util.OpStartsWith;
+ DataFilterNameStart.value = WidgetNameStart;
+ dfilter.Add(DataFilterNameStart);
+
+ //## INCLUSIVE FILTER
+ dynamic FilterItem = new JObject();
+ FilterItem.fld = "startdate";
+ FilterItem.op = Util.OpEquality;
+ FilterItem.value = DateTokenUnderTest;
+ dfilter.Add(FilterItem);
+
+ 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 this test record
+ ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(0);
+ var v = ((JArray)a.ObjectResponse["data"]);
+ List IDInResultList = new List();
+ int InclusiveMatchCount = 0;
+ int ExclusiveMatchCount = 0;
+ foreach (JObject o in v)
+ {
+ if (IncludedWidgetId == o["id"].Value())
+ InclusiveMatchCount++;
+ if (ExcludedWidgetId == o["id"].Value())//whups
+ ExclusiveMatchCount++;
+ }
+
+ InclusiveMatchCount.Should().BeGreaterOrEqualTo(1);
+ ExclusiveMatchCount.Should().Be(0);
+
+ //DELETE WIDGETS
+ a = await Util.DeleteAsync("Widget/" + IncludedWidgetId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+
+ a = await Util.DeleteAsync("Widget/" + ExcludedWidgetId.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 DateTokenSeptemberFilterWorks()
+ {
+ int MonthNumberUnderTest = 9;
+ string DateTokenUnderTest = TokenSeptember;
+
+ var WidgetNameStart = "DateTokenSeptemberFilterWorks";
+
+ long IncludedWidgetId = 0;
+ long ExcludedWidgetId = 0;
+
+ //CREATE TEST WIDGETS
+
+ //included widget
+ dynamic w = new JObject();
+ w.name = Util.Uniquify(WidgetNameStart);
+ w.notes = "blah";
+ w.customFields = Util.WidgetRequiredCustomFieldsJsonString();
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddHours(1).ToUniversalTime();
+
+ ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ IncludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //Excluded widget
+ w.name = Util.Uniquify(WidgetNameStart);
+ //First day of this month minus 2 days equals second to last day of last month
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).AddHours(1).ToUniversalTime();
+
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ ExcludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //CREATE FILTER
+ dynamic d = new JObject();
+ d.name = Util.Uniquify(WidgetNameStart);
+
+ 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 = Util.OpStartsWith;
+ DataFilterNameStart.value = WidgetNameStart;
+ dfilter.Add(DataFilterNameStart);
+
+ //## INCLUSIVE FILTER
+ dynamic FilterItem = new JObject();
+ FilterItem.fld = "startdate";
+ FilterItem.op = Util.OpEquality;
+ FilterItem.value = DateTokenUnderTest;
+ dfilter.Add(FilterItem);
+
+ 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 this test record
+ ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(0);
+ var v = ((JArray)a.ObjectResponse["data"]);
+ List IDInResultList = new List();
+ int InclusiveMatchCount = 0;
+ int ExclusiveMatchCount = 0;
+ foreach (JObject o in v)
+ {
+ if (IncludedWidgetId == o["id"].Value())
+ InclusiveMatchCount++;
+ if (ExcludedWidgetId == o["id"].Value())//whups
+ ExclusiveMatchCount++;
+ }
+
+ InclusiveMatchCount.Should().BeGreaterOrEqualTo(1);
+ ExclusiveMatchCount.Should().Be(0);
+
+ //DELETE WIDGETS
+ a = await Util.DeleteAsync("Widget/" + IncludedWidgetId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+
+ a = await Util.DeleteAsync("Widget/" + ExcludedWidgetId.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 DateTokenOctoberFilterWorks()
+ {
+ int MonthNumberUnderTest = 10;
+ string DateTokenUnderTest = TokenOctober;
+
+ var WidgetNameStart = "DateTokenOctoberFilterWorks";
+
+ long IncludedWidgetId = 0;
+ long ExcludedWidgetId = 0;
+
+ //CREATE TEST WIDGETS
+
+ //included widget
+ dynamic w = new JObject();
+ w.name = Util.Uniquify(WidgetNameStart);
+ w.notes = "blah";
+ w.customFields = Util.WidgetRequiredCustomFieldsJsonString();
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddHours(1).ToUniversalTime();
+
+ ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ IncludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //Excluded widget
+ w.name = Util.Uniquify(WidgetNameStart);
+ //First day of this month minus 2 days equals second to last day of last month
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).AddHours(1).ToUniversalTime();
+
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ ExcludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //CREATE FILTER
+ dynamic d = new JObject();
+ d.name = Util.Uniquify(WidgetNameStart);
+
+ 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 = Util.OpStartsWith;
+ DataFilterNameStart.value = WidgetNameStart;
+ dfilter.Add(DataFilterNameStart);
+
+ //## INCLUSIVE FILTER
+ dynamic FilterItem = new JObject();
+ FilterItem.fld = "startdate";
+ FilterItem.op = Util.OpEquality;
+ FilterItem.value = DateTokenUnderTest;
+ dfilter.Add(FilterItem);
+
+ 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 this test record
+ ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(0);
+ var v = ((JArray)a.ObjectResponse["data"]);
+ List IDInResultList = new List();
+ int InclusiveMatchCount = 0;
+ int ExclusiveMatchCount = 0;
+ foreach (JObject o in v)
+ {
+ if (IncludedWidgetId == o["id"].Value())
+ InclusiveMatchCount++;
+ if (ExcludedWidgetId == o["id"].Value())//whups
+ ExclusiveMatchCount++;
+ }
+
+ InclusiveMatchCount.Should().BeGreaterOrEqualTo(1);
+ ExclusiveMatchCount.Should().Be(0);
+
+ //DELETE WIDGETS
+ a = await Util.DeleteAsync("Widget/" + IncludedWidgetId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+
+ a = await Util.DeleteAsync("Widget/" + ExcludedWidgetId.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 DateTokenNovemberFilterWorks()
+ {
+ int MonthNumberUnderTest = 11;
+ string DateTokenUnderTest = TokenNovember;
+
+ var WidgetNameStart = "DateTokenNovemberFilterWorks";
+
+ long IncludedWidgetId = 0;
+ long ExcludedWidgetId = 0;
+
+ //CREATE TEST WIDGETS
+
+ //included widget
+ dynamic w = new JObject();
+ w.name = Util.Uniquify(WidgetNameStart);
+ w.notes = "blah";
+ w.customFields = Util.WidgetRequiredCustomFieldsJsonString();
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddHours(1).ToUniversalTime();
+
+ ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ IncludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //Excluded widget
+ w.name = Util.Uniquify(WidgetNameStart);
+ //First day of this month minus 2 days equals second to last day of last month
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).AddHours(1).ToUniversalTime();
+
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ ExcludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //CREATE FILTER
+ dynamic d = new JObject();
+ d.name = Util.Uniquify(WidgetNameStart);
+
+ 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 = Util.OpStartsWith;
+ DataFilterNameStart.value = WidgetNameStart;
+ dfilter.Add(DataFilterNameStart);
+
+ //## INCLUSIVE FILTER
+ dynamic FilterItem = new JObject();
+ FilterItem.fld = "startdate";
+ FilterItem.op = Util.OpEquality;
+ FilterItem.value = DateTokenUnderTest;
+ dfilter.Add(FilterItem);
+
+ 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 this test record
+ ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(0);
+ var v = ((JArray)a.ObjectResponse["data"]);
+ List IDInResultList = new List();
+ int InclusiveMatchCount = 0;
+ int ExclusiveMatchCount = 0;
+ foreach (JObject o in v)
+ {
+ if (IncludedWidgetId == o["id"].Value())
+ InclusiveMatchCount++;
+ if (ExcludedWidgetId == o["id"].Value())//whups
+ ExclusiveMatchCount++;
+ }
+
+ InclusiveMatchCount.Should().BeGreaterOrEqualTo(1);
+ ExclusiveMatchCount.Should().Be(0);
+
+ //DELETE WIDGETS
+ a = await Util.DeleteAsync("Widget/" + IncludedWidgetId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+
+ a = await Util.DeleteAsync("Widget/" + ExcludedWidgetId.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 DateTokenDecemberFilterWorks()
+ {
+ int MonthNumberUnderTest = 12;
+ string DateTokenUnderTest = TokenDecember;
+
+ var WidgetNameStart = "DateTokenDecemberFilterWorks";
+
+ long IncludedWidgetId = 0;
+ long ExcludedWidgetId = 0;
+
+ //CREATE TEST WIDGETS
+
+ //included widget
+ dynamic w = new JObject();
+ w.name = Util.Uniquify(WidgetNameStart);
+ w.notes = "blah";
+ w.customFields = Util.WidgetRequiredCustomFieldsJsonString();
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddHours(1).ToUniversalTime();
+
+ ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ IncludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //Excluded widget
+ w.name = Util.Uniquify(WidgetNameStart);
+ //First day of this month minus 2 days equals second to last day of last month
+ w.startDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).ToUniversalTime();
+ w.endDate = new DateTime(DateTime.Today.Year, MonthNumberUnderTest, 1, 00, 00, 00).AddDays(-2).AddHours(1).ToUniversalTime();
+
+
+ a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString());
+ Util.ValidateDataReturnResponseOk(a);
+ ExcludedWidgetId = a.ObjectResponse["data"]["id"].Value();
+
+ //CREATE FILTER
+ dynamic d = new JObject();
+ d.name = Util.Uniquify(WidgetNameStart);
+
+ 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 = Util.OpStartsWith;
+ DataFilterNameStart.value = WidgetNameStart;
+ dfilter.Add(DataFilterNameStart);
+
+ //## INCLUSIVE FILTER
+ dynamic FilterItem = new JObject();
+ FilterItem.fld = "startdate";
+ FilterItem.op = Util.OpEquality;
+ FilterItem.value = DateTokenUnderTest;
+ dfilter.Add(FilterItem);
+
+ 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 this test record
+ ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(0);
+ var v = ((JArray)a.ObjectResponse["data"]);
+ List IDInResultList = new List();
+ int InclusiveMatchCount = 0;
+ int ExclusiveMatchCount = 0;
+ foreach (JObject o in v)
+ {
+ if (IncludedWidgetId == o["id"].Value())
+ InclusiveMatchCount++;
+ if (ExcludedWidgetId == o["id"].Value())//whups
+ ExclusiveMatchCount++;
+ }
+
+ InclusiveMatchCount.Should().BeGreaterOrEqualTo(1);
+ ExclusiveMatchCount.Should().Be(0);
+
+ //DELETE WIDGETS
+ a = await Util.DeleteAsync("Widget/" + IncludedWidgetId.ToString(), await Util.GetTokenAsync("BizAdminFull"));
+ Util.ValidateHTTPStatusCode(a, 204);
+
+ a = await Util.DeleteAsync("Widget/" + ExcludedWidgetId.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 date token filters
//========