using System; using Xunit; using Newtonsoft.Json.Linq; using FluentAssertions; using System.Collections.Generic; using System.Collections.Concurrent; namespace raven_integration { public class FormCustom { /// /// Test create or update /// [Fact] public async void FormCustomCreateUpdate() { //This is a special case, you can create or PUT a formcustom, but you can't delete one and you can't create one if one already exists //so this test will either create or update depending upon if it's already created one or not dynamic d = new JObject(); d.formkey = "widget"; /* Example: {template:[{fld:"ltkeyfieldname",hide:"true/false",required:"true/false", type:"bool"},{fld:"ltkeyfieldname",hide:"true/false",required:"true/false", type:"text"]} */ dynamic dtemplate = new JArray(); dynamic dt = new JObject(); dt.fld = "WidgetCustom1"; dt.hide = false; dt.required = true; dt.type = "date"; dtemplate.Add(dt); dt = new JObject(); dt.fld = "WidgetCustom2"; dt.hide = true; dt.required = false; dt.type = "bool"; dtemplate.Add(dt); d.template = dtemplate.ToString();//it expects it to be a json string, not actual json //Is there one already? //RETRIEVE //Get one ApiResponse a = await Util.GetAsync("FormCustom/widget", await Util.GetTokenAsync("BizAdminFull")); bool Exists = ((int)a.HttpResponse.StatusCode) == 200; if (Exists) { //Update //update it d.concurrencyToken = a.ObjectResponse["data"]["concurrencyToken"].Value(); a = await Util.PutAsync("FormCustom/widget", await Util.GetTokenAsync("BizAdminFull"), d.ToString()); Util.ValidateHTTPStatusCode(a, 200); // //check PUT worked // a = await Util.GetAsync("DataFilter/" + Id.ToString(), await Util.GetTokenAsync("BizAdminFull")); // Util.ValidateNoErrorInResponse(a); // a.ObjectResponse["data"]["name"].Value().Should().Be(d.name.ToString()); } else { //Create it // a = await Util.PostAsync("FormCustom", await Util.GetTokenAsync("BizAdminFull"), d.ToString()); // Util.ValidateDataReturnResponseOk(a); } // a.ObjectResponse["data"]["name"].Value().Should().StartWith("Test DataFilter"); // //CREATE // dynamic d = new JObject(); // d.name = Util.Uniquify("Test DataFilter"); // // d.ownerId = 1L; // d["public"] = true; // d.listKey = "widget"; // //"[{fld:"name",op:"!=",value:"Notequaltothis"},{fld:"tags",op:"Eq",value:"[23,456,54]"}] // dynamic dfilter = new JArray(); // dynamic df = new JObject(); // df.fld = "name"; // df.op = "%-"; // df.value = "Generic";//lots of seed widgets start with Generic // dfilter.Add(df); // 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 Id = a.ObjectResponse["data"]["id"].Value(); // //RETRIEVE // //Get one // a = await Util.GetAsync("DataFilter/" + Id.ToString(), await Util.GetTokenAsync("BizAdminFull")); // Util.ValidateDataReturnResponseOk(a); // a.ObjectResponse["data"]["name"].Value().Should().StartWith("Test DataFilter"); // //Get as alternate user should work for public filter // a = await Util.GetAsync("DataFilter/" + Id.ToString(), await Util.GetTokenAsync("SubContractorLimited")); // Util.ValidateDataReturnResponseOk(a); // a.ObjectResponse["data"]["name"].Value().Should().StartWith("Test DataFilter"); // //UPDATE // //PUT, make private // d["public"] = false; // d.name = Util.Uniquify("Put - Test DataFilter (privatized)"); // d.concurrencyToken = a.ObjectResponse["data"]["concurrencyToken"].Value(); // a = await Util.PutAsync("DataFilter/" + Id.ToString(), await Util.GetTokenAsync("BizAdminFull"), d.ToString()); // Util.ValidateHTTPStatusCode(a, 200); // //check PUT worked // a = await Util.GetAsync("DataFilter/" + Id.ToString(), await Util.GetTokenAsync("BizAdminFull")); // Util.ValidateNoErrorInResponse(a); // a.ObjectResponse["data"]["name"].Value().Should().Be(d.name.ToString()); // //FETCH DISALLOWED // //Get as alternate user should fail for private filter // a = await Util.GetAsync("DataFilter/" + Id.ToString(), await Util.GetTokenAsync("SubContractorLimited")); // Util.ValidateResponseNotFound(a); // // //DELETE // ApiResponse DELETETestResponse = await Util.DeleteAsync("DataFilter/" + Id.ToString(), await Util.GetTokenAsync("BizAdminFull")); // Util.ValidateHTTPStatusCode(DELETETestResponse, 204); } /// /// /// [Fact] public async void InvalidAvailableFieldsFormKeyShouldFail() { ApiResponse a = await Util.GetAsync("FormCustom/AvailableFields/nonexistent", await Util.GetTokenAsync("BizAdminFull")); Util.ValidateErrorCodeResponse(a, 2010, 404); } /// /// /// [Fact] public async void AvailableFieldsWorks() { ApiResponse a = await Util.GetAsync("FormCustom/AvailableFields/widget", await Util.GetTokenAsync("BizAdminFull")); Util.ValidateDataReturnResponseOk(a); ((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(25); } // /// // /// // /// // [Fact] // public async void InvalidFieldNameShouldFail() // { // //CREATE // dynamic d = new JObject(); // d.name = Util.Uniquify("Test DataFilter"); // // d.ownerId = 1L; // d["public"] = true; // d.listKey = "widget"; // //"[{fld:"name",op:"!=",value:"Notequaltothis"},{fld:"tags",op:"Eq",value:"[23,456,54]"}] // dynamic dfilter = new JArray(); // dynamic df = new JObject(); // df.fld = "doesntexist"; // df.op = "%-"; // df.value = "Generic";//lots of seed widgets start with Generic // dfilter.Add(df); // d.filter = dfilter.ToString();//it expects it to be a json string, not actual json // ApiResponse a = await Util.PostAsync("DataFilter", await Util.GetTokenAsync("BizAdminFull"), d.ToString()); // Util.ValidateErrorCodeResponse(a, 2200, 400); // Util.ShouldContainValidationError(a, "Filter", "InvalidValue"); // } // /// // /// // /// // [Fact] // public async void InvalidOperatorShouldFail() // { // //CREATE // dynamic d = new JObject(); // d.name = Util.Uniquify("Test DataFilter"); // // d.ownerId = 1L; // d["public"] = true; // d.listKey = "widget"; // //"[{fld:"name",op:"!=",value:"Notequaltothis"},{fld:"tags",op:"Eq",value:"[23,456,54]"}] // dynamic dfilter = new JArray(); // dynamic df = new JObject(); // df.fld = "name"; // df.op = "wtf"; // df.value = "Generic";//lots of seed widgets start with Generic // dfilter.Add(df); // d.filter = dfilter.ToString();//it expects it to be a json string, not actual json // ApiResponse a = await Util.PostAsync("DataFilter", await Util.GetTokenAsync("BizAdminFull"), d.ToString()); // Util.ValidateErrorCodeResponse(a, 2200, 400); // Util.ShouldContainValidationError(a, "Filter", "InvalidValue"); // } //================================================== }//eoc }//eons