using System; using Xunit; using Newtonsoft.Json.Linq; using FluentAssertions; using System.Collections.Generic; using System.Collections.Concurrent; namespace raven_integration { public class PickListAllTests { //NOTE: in order not to interfere in each other will use Widget picklist to test with standard unmodified picklist template //and will use User PickList to test the template functionality /// /// Test all Template editing related routes /// [Fact] public async void UserPickListTemplatesOps() { //NOTE: Due to there being only one possible template per type, this test will need to test ALL potential tests in one function //and only for the User picklist in order to not step over other potential tests running in parallel //REPLACE USER TEMPLATE dynamic d = new JObject(); d.Id = 3;//User type //template, simple test, nothing fancy dynamic dTemplateArray = new JArray(); dynamic df = new JObject(); df.fld = "useremployeenumber"; dTemplateArray.Add(df); d.Template = dTemplateArray.ToString(Newtonsoft.Json.Formatting.None); //replace the User template at the server ApiResponse a = await Util.PostAsync("PickList/Template", await Util.GetTokenAsync("BizAdminFull"), d.ToString(Newtonsoft.Json.Formatting.None)); Util.ValidateHTTPStatusCode(a, 204); //RETRIEVE //Get one a = await Util.GetAsync("PickList/Template/3/", await Util.GetTokenAsync("BizAdminFull")); Util.ValidateDataReturnResponseOk(a); //assert contains ONE record ONLY and it's the one we set var templateArray = JArray.Parse(a.ObjectResponse["data"]["template"].Value()); templateArray.Count.Should().Be(1); templateArray[0]["fld"].Value().Should().Be("useremployeenumber"); ; // RESET TO DEFAULT a = await Util.DeleteAsync("PickList/Template/3/", await Util.GetTokenAsync("BizAdminFull")); Util.ValidateHTTPStatusCode(a, 204); //RETRIEVE (Confirm it's back to default) //Get one a = await Util.GetAsync("PickList/Template/3/", await Util.GetTokenAsync("BizAdminFull")); Util.ValidateDataReturnResponseOk(a); //assert contains default template record ONLY and it's the one we set templateArray = JArray.Parse(a.ObjectResponse["data"]["template"].Value()); templateArray.Count.Should().Be(3); templateArray[0]["fld"].Value().Should().Be("username"); ; //Now test error conditions.... //BAD FIELD NAME VALIDATION ERROR d = new JObject(); d.Id = 3;//User type //template, simple test, nothing fancy dTemplateArray = new JArray(); df = new JObject(); df.fld = "DOES_NOT_EXIST";//<-- ERROR BAD FIELD NAME dTemplateArray.Add(df); d.Template = dTemplateArray.ToString(Newtonsoft.Json.Formatting.None); a = await Util.PostAsync("PickList/Template", await Util.GetTokenAsync("BizAdminFull"), d.ToString(Newtonsoft.Json.Formatting.None)); //"{\"error\":{\"code\":\"2200\",\"details\":[{\"message\":\"Template array item 0, fld property value \\\"DOES_NOT_EXIST\\\" is not a valid value for AyaType specified\",\"target\":\"Template\",\"error\":\"2203\"}],\"message\":\"Object did not pass validation\"}}" Util.ValidateErrorCodeResponse(a, 2200, 400); Util.ShouldContainValidationError(a, "Template", "2203"); //BAD AYATYPE ERROR d = new JObject(); d.Id = 0;//<==ERROR NO_TYPE, INVALID //template, simple test, nothing fancy dTemplateArray = new JArray(); df = new JObject(); df.fld = "useremployeenumber"; dTemplateArray.Add(df); d.Template = dTemplateArray.ToString(Newtonsoft.Json.Formatting.None); //replace the User template at the server a = await Util.PostAsync("PickList/Template", await Util.GetTokenAsync("BizAdminFull"), d.ToString(Newtonsoft.Json.Formatting.None)); //"{\"error\":{\"code\":\"2200\",\"details\":[{\"message\":\"Template array item 0, fld property value \\\"DOES_NOT_EXIST\\\" is not a valid value for AyaType specified\",\"target\":\"Template\",\"error\":\"2203\"}],\"message\":\"Object did not pass validation\"}}" Util.ValidateErrorCodeResponse(a, 2200, 400); Util.ShouldContainValidationError(a, "ayaType", "2203"); //RIGHTS ISSUE, //currently only bizadminfull can change a picklist template d = new JObject(); d.Id = 3;//User //template, simple test, nothing fancy dTemplateArray = new JArray(); df = new JObject(); df.fld = "useremployeenumber"; dTemplateArray.Add(df); d.Template = dTemplateArray.ToString(Newtonsoft.Json.Formatting.None); //ERROR NO RIGHTS USER a = await Util.PostAsync("PickList/Template", await Util.GetTokenAsync("CustomerLimited"), d.ToString(Newtonsoft.Json.Formatting.None)); //"{\"error\":{\"code\":\"2004\",\"message\":\"User not authorized for this resource operation (insufficient rights)\"}}" Util.ValidateErrorCodeResponse(a, 2004, 403); //EMPTY TEMPLATE VALIDATION ERROR d = new JObject(); d.Id = 3;//User d.Template = "";//<-- ERROR no template a = await Util.PostAsync("PickList/Template", await Util.GetTokenAsync("BizAdminFull"), d.ToString(Newtonsoft.Json.Formatting.None)); Util.ValidateErrorCodeResponse(a, 2200, 400); Util.ShouldContainValidationError(a, "Template", "2201"); //MALFORMED TEMPLATE JSON ERROR d = new JObject(); d.Id = 3;//User type dTemplateArray = new JArray(); df = new JObject(); df.fld = "useremployeenumber"; dTemplateArray.Add(df); string sTemplate = dTemplateArray.ToString(Newtonsoft.Json.Formatting.None); d.Template = sTemplate.Substring(2);//<-- ERROR missing first two characters of json template array a = await Util.PostAsync("PickList/Template", await Util.GetTokenAsync("BizAdminFull"), d.ToString(Newtonsoft.Json.Formatting.None)); //"{\"error\":{\"code\":\"2200\",\"details\":[{\"message\":\"Template is not valid JSON string: Error reading JArray from JsonReader. Current JsonReader item is not an array: String. Path '', line 1, position 5.\",\"target\":\"Template\",\"error\":\"2203\"}],\"message\":\"Object did not pass validation\"}}" Util.ValidateErrorCodeResponse(a, 2200, 400); Util.ShouldContainValidationError(a, "Template", "2203"); } /// /// test get templates list /// [Fact] public async void PickListTemplateList() { //RETRIEVE ApiResponse a = await Util.GetAsync("PickList/TemplateList", await Util.GetTokenAsync("BizAdminFull")); Util.ValidateDataReturnResponseOk(a); //assert contains at least two records (as we only have two at time of writing this test) var templateList = ((JArray)a.ObjectResponse["data"]); templateList.Count.Should().BeGreaterThan(1); templateList[0]["id"].Value().Should().Be(2);//first one should be a widget } /// /// test get picklist fields list for widget template /// [Fact] public async void WidgetPickListTemplateFieldList() { //RETRIEVE WIDGET PICKLIST FIELDS ApiResponse a = await Util.GetAsync("PickList/Template/ListFields/2", await Util.GetTokenAsync("BizAdminFull")); Util.ValidateDataReturnResponseOk(a); //assert contains at least two records (as we only have two at time of writing this test) var templateList = ((JArray)a.ObjectResponse["data"]); templateList.Count.Should().BeGreaterThan(4); templateList[0]["fieldKey"].Value().Should().Be("widgetactive");//first one should be a widgetactive field } /// /// test get picklist for widget without query /// [Fact] public async void FetchWidgetPickListNoQuery() { //RETRIEVE WIDGET PICKLIST no filter ApiResponse a = await Util.GetAsync("PickList/List?ayaType=2", await Util.GetTokenAsync("BizAdminFull")); Util.ValidateDataReturnResponseOk(a); //assert contains 100 records (current picklist maximum count) var pickList = ((JArray)a.ObjectResponse["data"]); pickList.Count.Should().Be(100); } /// /// test get picklist for widget with basic autocomplete query only /// [Fact] public async void FetchWidgetPickListAutoComplete() { //make key widget var WidgetNameStart = "FetchWidgetPickListAutoComplete_UnIqUe"; long IncludedWidgetId = 0; //CREATE TEST WIDGETS //included widget dynamic w = new JObject(); w.name = Util.Uniquify(WidgetNameStart); w.customFields = Util.WidgetRequiredCustomFieldsJsonString(); w.notes = "blah"; w.active = true; w.usertype = 1; w.dollarAmount = 555.55; ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString()); Util.ValidateDataReturnResponseOk(a); IncludedWidgetId = a.ObjectResponse["data"]["id"].Value(); //RETRIEVE WIDGET PICKLIST with name filter a = await Util.GetAsync("PickList/List?ayaType=2&query=IqU", await Util.GetTokenAsync("BizAdminFull")); Util.ValidateDataReturnResponseOk(a); //assert contains 100 records (current picklist maximum count) var pickList = ((JArray)a.ObjectResponse["data"]); pickList.Count.Should().Be(1); pickList[0]["id"].Value().Should().Be(IncludedWidgetId); //DELETE WIDGETS a = await Util.DeleteAsync("Widget/" + IncludedWidgetId.ToString(), await Util.GetTokenAsync("BizAdminFull")); Util.ValidateHTTPStatusCode(a, 204); } //autocomplete filter test returns record in results //tag filter test returns correct record //inactive test (make two keyed and search for ) //error condition tests //User picklist custom template works with picklist fetch //not sure where to do that, I guess up top in the consolidated User picklist type because I can't change the widget template without breaking shit //or maybe they all need to use a default custom template that is the same for all (and includes tags?) //================================================== }//eoc }//eons