From d7fb1d2893e75167259a7e70f461a05f714fa73c Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Wed, 5 Dec 2018 18:35:19 +0000 Subject: [PATCH] --- .../DataFilter/DataFilterFilteringLists.cs | 182 ++++++++++++++++++ 1 file changed, 182 insertions(+) diff --git a/test/raven-integration/DataFilter/DataFilterFilteringLists.cs b/test/raven-integration/DataFilter/DataFilterFilteringLists.cs index 4d2e19cf..b07adb8d 100644 --- a/test/raven-integration/DataFilter/DataFilterFilteringLists.cs +++ b/test/raven-integration/DataFilter/DataFilterFilteringLists.cs @@ -63,6 +63,52 @@ namespace raven_integration public const string TokenInTheLast6Months = "{[last6months]}"; public const string TokenInTheLastYear = "{[lastcalendaryear]}"; + //More business time frames + public const string TokenLastQuarter = "{[lastquarter]}"; + public const string TokenYearToDate = "{[yeartodate]}"; + public const string TokenQuarterToDate = "{[quartertodate]}"; + public const string TokenPast90Days = "{[past90days]}"; + public const string TokenPast30Days = "{[past30days]}"; + public const string TokenPast24Hours = "{[past24hours]}"; + + //The standard calendar quarters that make up the year are: January, February, and March (Q1); April, May, and June (Q2); July, August, and September (Q3); and October, November, and December (Q4). A quarter is often shown with its relevant year, as in Q1 2018 or Q1/18 which represents the first quarter of the year 2018. + public const string TokenQ1ThisYear = "{[q1thisyear]}"; + public const string TokenQ2ThisYear = "{[q2thisyear]}"; + public const string TokenQ3ThisYear = "{[q3thisyear]}"; + public const string TokenQ4ThisYear = "{[q4thisyear]}"; + public const string TokenQ1LastYear = "{[q1lastyear]}"; + public const string TokenQ2LastYear = "{[q2lastyear]}"; + public const string TokenQ3LastYear = "{[q3lastyear]}"; + public const string TokenQ4LastYear = "{[q4lastyear]}"; + + private static int CurrentQuarter() + { + switch (DateTime.Now.Month) + { + //are we in the first quarter? + case 1: + case 2: + case 3: + return 1; + + //are we in the second quarter? + case 4: + case 5: + case 6: + return 2; + //Are we in the third quarter? + case 7: + case 8: + case 9: + return 3; + default: + return 4; + + } + } + + + /// /// /// @@ -2391,6 +2437,142 @@ namespace raven_integration } + + /// + /// + /// + [Fact] + public async void DateTokenInTheLastQuarterFilterWorks() + { + + var WidgetNameStart = "DateTokenInTheLastQuarterFilterWorks"; + + long IncludedWidgetId = 0; + long ExcludedWidgetId = 0; + + //BUILD DATES FOR THIS TEST + var ThisQuarter = CurrentQuarter(); + DateTime InclusiveStartDate; + DateTime ExclusiveStartDate; + + //################################################################################## + var FilterToken = TokenLastQuarter; + switch (ThisQuarter) + { + case 1: + //We want 5 minutes into the start of q4 last year + InclusiveStartDate = new DateTime(DateTime.Now.AddYears(-1).Year, 10, 1, 00, 5, 00).ToUniversalTime(); + ExclusiveStartDate = DateTime.Now.ToUniversalTime(); + break; + case 2: + //We want 5 minutes into the start of q1 this year + InclusiveStartDate = new DateTime(DateTime.Now.Year, 1, 1, 00, 500, 00).ToUniversalTime(); + ExclusiveStartDate = DateTime.Now.ToUniversalTime(); + break; + case 3: + //We want 5 minutes into the start of q2 this year + InclusiveStartDate = new DateTime(DateTime.Now.Year, 4, 1, 00, 5, 00).ToUniversalTime(); + ExclusiveStartDate = DateTime.Now.ToUniversalTime(); + break; + default: + //We want 5 minutes into the start of q3 this year + InclusiveStartDate = new DateTime(DateTime.Now.Year, 7, 1, 00, 5, 00).ToUniversalTime(); + ExclusiveStartDate = DateTime.Now.ToUniversalTime(); + break; + } + //################################################################################## + + + DateTime InclusiveEndDate = InclusiveStartDate.AddHours(1); + DateTime ExclusiveEndDate = ExclusiveStartDate.AddHours(1); + + //CREATE TEST WIDGETS + //included widget + dynamic w = new JObject(); + w.name = Util.Uniquify(WidgetNameStart); + w.startDate = InclusiveStartDate; + w.endDate = InclusiveEndDate; + + + 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); + w.startDate = ExclusiveStartDate; + w.endDate = ExclusiveEndDate; + + 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.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 = WidgetNameStart; + dfilter.Add(DataFilterNameStart); + + //## INCLUSIVE FILTER + dynamic FilterItem = new JObject(); + FilterItem.fld = "startdate"; + FilterItem.op = OpEquality; + FilterItem.value = FilterToken; + 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 filter tests