using System; using Xunit; using Newtonsoft.Json.Linq; using FluentAssertions; using System.Collections.Generic; using System.Threading.Tasks; using System.Collections.Concurrent; namespace raven_integration { public class WidgetLists { /// /// /// [Fact] public async void WidgetPickListDefaultSortNoFilterWorks() { var RouteName = "Widget";//########## //NOW FETCH LIST WITH FILTER ApiResponse a = await Util.GetAsync($"{RouteName}/picklist?Offset=0&Limit=999", await Util.GetTokenAsync("manager", "l3tm3in")); Util.ValidateDataReturnResponseOk(a); Util.ValidateHTTPStatusCode(a, 200); //assert contains exactly 3 records var ItemCount = ((JArray)a.ObjectResponse["data"]).Count; for (int i = 0; i < ItemCount - 1; i++) { //Note it's necessary to replace the spaces because postgres thinks spaces go last and the string comparison thinks they go first var firstName = a.ObjectResponse["data"][i]["name"].Value().Replace(" ",""); var secondName = a.ObjectResponse["data"][i + 1]["name"].Value().Replace(" ",""); int comparison = String.Compare(firstName, secondName, comparisonType: StringComparison.OrdinalIgnoreCase); comparison.Should().BeNegative(); } } /// /// /// [Fact] public async void WidgetPickListSortByFieldAscendingWorks() { var NameStart = Util.Uniquify("WidgetPickListSortByFieldAscendingWorks"); var RouteName = "Widget"; //CREATE 3 TEST OBJECTS TO TEST ORDER long FirstInOrderId = 0; long SecondInOrderId = 0; long ThirdInOrderId = 0; dynamic d = new JObject(); d.name = Util.Uniquify(NameStart); d.notes="blah"; d.customFields = Util.WidgetRequiredCustomFieldsJsonString(); d.startDate = DateTime.Now; d.endDate = DateTime.Now.AddHours(1); ApiResponse a = await Util.PostAsync(RouteName, await Util.GetTokenAsync("manager", "l3tm3in"), d.ToString()); Util.ValidateDataReturnResponseOk(a); FirstInOrderId = a.ObjectResponse["data"]["id"].Value(); d = new JObject(); d.name = Util.Uniquify(NameStart); d.notes="blah"; d.customFields = Util.WidgetRequiredCustomFieldsJsonString(); d.startDate = DateTime.Now.AddHours(1); d.endDate = DateTime.Now.AddHours(2); a = await Util.PostAsync(RouteName, await Util.GetTokenAsync("manager", "l3tm3in"), d.ToString()); Util.ValidateDataReturnResponseOk(a); SecondInOrderId = a.ObjectResponse["data"]["id"].Value(); d = new JObject(); d.name = Util.Uniquify(NameStart); d.notes="blah"; d.customFields = Util.WidgetRequiredCustomFieldsJsonString(); d.startDate = DateTime.Now.AddHours(2); d.endDate = DateTime.Now.AddHours(3); a = await Util.PostAsync(RouteName, await Util.GetTokenAsync("manager", "l3tm3in"), d.ToString()); Util.ValidateDataReturnResponseOk(a); ThirdInOrderId = a.ObjectResponse["data"]["id"].Value(); //CREATE FILTER d = new JObject(); d.name = Util.Uniquify(NameStart); d["public"] = true; d.listKey = "widget"; //FILTER IN BY NAME FOR TESTING THIS RUN ONLY dynamic dfilter = new JArray(); //name starts with filter to constrict to objects that this test block created only dynamic DataFilterNameStart = new JObject(); DataFilterNameStart.fld = "name"; DataFilterNameStart.op = Util.OpStartsWith; DataFilterNameStart.value = NameStart; dfilter.Add(DataFilterNameStart); d.filter = dfilter.ToString(); //SORT ORDER ################### dynamic dsortarray = new JArray(); dynamic dsort = new JObject(); dsort.fld = "startdate"; dsort.dir = "+"; dsortarray.Add(dsort); d.sort = dsortarray.ToString(); a = await Util.PostAsync("DataFilter", await Util.GetTokenAsync("manager", "l3tm3in"), d.ToString()); Util.ValidateDataReturnResponseOk(a); long DataFilterId = a.ObjectResponse["data"]["id"].Value(); //NOW FETCH LIST WITH FILTER a = await Util.GetAsync($"{RouteName}/picklist?Offset=0&Limit=999&DataFilterId={DataFilterId.ToString()}", await Util.GetTokenAsync("manager", "l3tm3in")); Util.ValidateDataReturnResponseOk(a); Util.ValidateHTTPStatusCode(a, 200); //assert contains exactly 3 records ((JArray)a.ObjectResponse["data"]).Count.Should().Be(3); //assert the order returned a.ObjectResponse["data"][0]["id"].Value().Should().Be(FirstInOrderId); a.ObjectResponse["data"][1]["id"].Value().Should().Be(SecondInOrderId); a.ObjectResponse["data"][2]["id"].Value().Should().Be(ThirdInOrderId); a = await Util.DeleteAsync($"{RouteName}/" + FirstInOrderId.ToString(), await Util.GetTokenAsync("manager", "l3tm3in")); Util.ValidateHTTPStatusCode(a, 204); a = await Util.DeleteAsync($"{RouteName}/" + SecondInOrderId.ToString(), await Util.GetTokenAsync("manager", "l3tm3in")); Util.ValidateHTTPStatusCode(a, 204); a = await Util.DeleteAsync($"{RouteName}/" + ThirdInOrderId.ToString(), await Util.GetTokenAsync("manager", "l3tm3in")); Util.ValidateHTTPStatusCode(a, 204); //DELETE DATAFILTER a = await Util.DeleteAsync("DataFilter/" + DataFilterId.ToString(), await Util.GetTokenAsync("manager", "l3tm3in")); Util.ValidateHTTPStatusCode(a, 204); } /// /// Paging test /// [Fact] public async void PagingShouldWorkAsExpected() { //Get all ApiResponse a = await Util.GetAsync("Widget/listwidgets?Offset=2&Limit=3", await Util.GetTokenAsync("manager", "l3tm3in")); Util.ValidateDataReturnResponseOk(a); Util.ValidateHTTPStatusCode(a, 200); //assert aAll contains at least two records ((JArray)a.ObjectResponse["data"]).Count.Should().Be(3); JObject jp = (JObject)a.ObjectResponse["paging"]; jp["count"].Value().Should().BeGreaterThan(5); jp["offset"].Value().Should().Be(2); jp["limit"].Value().Should().Be(3); jp["first"].Value().Should().EndWith("&pageSize=3"); jp["previous"].Value().Should().EndWith("&pageSize=3"); jp["next"].Value().Should().EndWith("&pageSize=3"); jp["last"].Value().Should().EndWith("&pageSize=3"); } /// /// /// [Fact] public async void FilterOptionsRouteShouldWorkAsExpected() { //Get options with manager (english user) ApiResponse a = await Util.GetAsync("Widget/FilterOptions", await Util.GetTokenAsync("manager", "l3tm3in")); Util.ValidateDataReturnResponseOk(a); Util.ValidateHTTPStatusCode(a, 200); a.ObjectResponse["data"]["key"].Value().Should().Be("widget"); ((JArray)a.ObjectResponse["data"]["flds"]).Count.Should().Be(10); int DollarAmountFieldNumber = 4; a.ObjectResponse["data"]["flds"][DollarAmountFieldNumber]["lt"].Value().Should().Be("Price"); a = await Util.GetAsync("Widget/FilterOptions", await Util.GetTokenAsync("es", "es")); Util.ValidateDataReturnResponseOk(a); Util.ValidateHTTPStatusCode(a, 200); a.ObjectResponse["data"]["flds"][DollarAmountFieldNumber]["lt"].Value().Should().Be("Importe"); a = await Util.GetAsync("Widget/FilterOptions", await Util.GetTokenAsync("fr", "fr")); Util.ValidateDataReturnResponseOk(a); Util.ValidateHTTPStatusCode(a, 200); a.ObjectResponse["data"]["flds"][DollarAmountFieldNumber]["lt"].Value().Should().Be("Montant"); a = await Util.GetAsync("Widget/FilterOptions", await Util.GetTokenAsync("de", "de")); Util.ValidateDataReturnResponseOk(a); Util.ValidateHTTPStatusCode(a, 200); a.ObjectResponse["data"]["flds"][DollarAmountFieldNumber]["lt"].Value().Should().Be("Betrag"); } //================================================== }//eoc }//eons