using System; using Xunit; using Newtonsoft.Json.Linq; using FluentAssertions; using System.Collections.Generic; using System.Collections.Concurrent; namespace raven_integration { public class FormCustom { public enum AyaDataType : int { NoType = 0, DateTime = 1, Date = 2, Time = 3, Text = 4, Integer = 5, Bool = 6, Decimal = 7, Currency = 8, Tags = 9, Enum = 10 } /// /// Test create or update /// [Fact] public async void FormCustomUpdate() { //This is a special case, you can PUT a formcustom, but you can't delete one and you can't create one /* */ dynamic d = new JObject(); d.formkey = "user"; dynamic dtemplate = new JArray(); dynamic dt = new JObject(); dt.fld = "UserCustom1"; dt.hide = false; dt.required = true; dt.type = AyaDataType.Text; dtemplate.Add(dt); dt = new JObject(); dt.fld = "UserNotes"; dt.required = true; dtemplate.Add(dt); dt = new JObject(); dt.fld = "UserCustom2"; dt.hide = true; dt.required = false; dt.type = AyaDataType.Bool; dtemplate.Add(dt); d.template = dtemplate.ToString();//it expects it to be a json string, not actual json //RETRIEVE //Get the current one (server will create if non-existent) ApiResponse a = await Util.GetAsync("FormCustom/user", await Util.GetTokenAsync("BizAdminFull")); //Update d.concurrencyToken = a.ObjectResponse["data"]["concurrencyToken"].Value(); a = await Util.PutAsync("FormCustom/user", await Util.GetTokenAsync("BizAdminFull"), d.ToString()); Util.ValidateHTTPStatusCode(a, 200); //check the concurrency token cache scheme uint token = a.ObjectResponse["data"]["concurrencyToken"].Value(); //This should return a 304 not modified a = await Util.GetAsync($"FormCustom/user?concurrencyToken={token}", await Util.GetTokenAsync("BizAdminFull")); Util.ValidateHTTPStatusCode(a, 304); //and this should return the whole object token--;//make the token not match //This should return a 200 and the whole object a = await Util.GetAsync($"FormCustom/user?concurrencyToken={token}", await Util.GetTokenAsync("BizAdminFull")); Util.ValidateDataReturnResponseOk(a); } /// /// /// [Fact] public async void InvalidObjectFieldsFormKeyShouldFail() { ApiResponse a = await Util.GetAsync("ObjectFields/ObjectFields/nonexistent", await Util.GetTokenAsync("BizAdminFull")); Util.ValidateErrorCodeResponse(a, 2010, 404); } /// /// /// [Fact] public async void ObjectFieldsWorks() { ApiResponse a = await Util.GetAsync("ObjectFields/ObjectFields/widget", await Util.GetTokenAsync("BizAdminFull")); Util.ValidateDataReturnResponseOk(a); ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(25); } /// /// /// [Fact] public async void AvailableCustomizableFormKeysWorks() { ApiResponse a = await Util.GetAsync("FormCustom/AvailableCustomizableFormKeys", await Util.GetTokenAsync("BizAdminFull")); Util.ValidateDataReturnResponseOk(a); ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(1);//is 2 as of writing (widget,user) } /// /// /// [Fact] public async void AvailableCustomTypesWorks() { ApiResponse a = await Util.GetAsync("FormCustom/AvailableCustomTypes", await Util.GetTokenAsync("BizAdminFull")); Util.ValidateDataReturnResponseOk(a); ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(4); } //================================================== }//eoc }//eons