using System; using Xunit; using Newtonsoft.Json.Linq; using FluentAssertions; using System.Collections.Generic; using System.Collections.Concurrent; namespace raven_integration { public class DataListFilterCrud { /// /// Test all CRUD routes /// [Fact] public async void CRUD() { //CREATE dynamic d = new JObject(); d.name = Util.Uniquify("Test DataListView"); d["public"] = true; d.listKey="TestWidgetDataList"; //"[{fld:"name",op:"!=",value:"Notequaltothis"},{fld:"tags",op:"Eq",value:"[23,456,54]"}] dynamic dListView = new JArray(); // dynamic df = new JObject(); // df.fld = "widgetname"; // df.op = "%-"; // df.value = "Generic";//lots of seed widgets start with Generic // dListView.Add(df); // d.filter = dListView.ToString();//it expects it to be a json string, not actual json dListView.Add(Util.BuildSimpleFilterDataListViewColumn("widgetname", Util.OpStartsWith, "Generic")); d.listView=dListView.ToString(Newtonsoft.Json.Formatting.None); ApiResponse a = await Util.PostAsync("data-list-view", await Util.GetTokenAsync("BizAdminFull"), d.ToString(Newtonsoft.Json.Formatting.None)); Util.ValidateDataReturnResponseOk(a); long Id = a.ObjectResponse["data"]["id"].Value(); //RETRIEVE //Get one a = await Util.GetAsync("data-list-view/" + Id.ToString(), await Util.GetTokenAsync("BizAdminFull")); Util.ValidateDataReturnResponseOk(a); a.ObjectResponse["data"]["name"].Value().Should().StartWith("Test DataListView"); //Get as alternate user should work for public filter a = await Util.GetAsync("data-list-view/" + Id.ToString(), await Util.GetTokenAsync("SubContractorLimited")); Util.ValidateDataReturnResponseOk(a); a.ObjectResponse["data"]["name"].Value().Should().StartWith("Test DataListView"); //UPDATE //PUT, make private d["public"] = false; d.name = Util.Uniquify("Put - Test DataListView (privatized)"); d.concurrency = a.ObjectResponse["data"]["concurrency"].Value(); a = await Util.PutAsync("data-list-view/" + Id.ToString(), await Util.GetTokenAsync("BizAdminFull"), d.ToString()); Util.ValidateHTTPStatusCode(a, 200); //check PUT worked a = await Util.GetAsync("data-list-view/" + 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("data-list-view/" + Id.ToString(), await Util.GetTokenAsync("SubContractorLimited")); Util.ValidateResponseNotFound(a); // //DELETE ApiResponse DELETETestResponse = await Util.DeleteAsync("data-list-view/" + Id.ToString(), await Util.GetTokenAsync("BizAdminFull")); Util.ValidateHTTPStatusCode(DELETETestResponse, 204); } /// /// /// [Fact] public async void InvalidListKeyShouldFail() { //CREATE dynamic d = new JObject(); d.name = Util.Uniquify("Test DataListView"); d["public"] = true; d.listKey = "nonexistant"; //"[{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 // ApiResponse a = await Util.PostAsync("data-list-view", await Util.GetTokenAsync("BizAdminFull"), d.ToString()); dynamic dListView = new JArray(); // dynamic df = new JObject(); // df.fld = "widgetname"; // df.op = "%-"; // df.value = "Generic";//lots of seed widgets start with Generic // dListView.Add(df); // d.filter = dListView.ToString();//it expects it to be a json string, not actual json dListView.Add(Util.BuildSimpleFilterDataListViewColumn("widgetname", Util.OpStartsWith, "Generic")); d.listView=dListView.ToString(Newtonsoft.Json.Formatting.None); ApiResponse a = await Util.PostAsync("data-list-view", await Util.GetTokenAsync("BizAdminFull"), d.ToString(Newtonsoft.Json.Formatting.None)); Util.ValidateErrorCodeResponse(a, 2200, 400); Util.ShouldContainValidationError(a, "ListKey", "2203"); } /// /// /// [Fact] public async void InvalidFieldNameShouldFail() { //CREATE dynamic d = new JObject(); d.name = Util.Uniquify("Test DataListView"); d["public"] = true; d.listKey="TestWidgetDataList"; //"[{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("data-list-view", await Util.GetTokenAsync("BizAdminFull"), d.ToString()); dynamic dListView = new JArray(); // dynamic df = new JObject(); // df.fld = "widgetname"; // df.op = "%-"; // df.value = "Generic";//lots of seed widgets start with Generic // dListView.Add(df); // d.filter = dListView.ToString();//it expects it to be a json string, not actual json dListView.Add(Util.BuildSimpleFilterDataListViewColumn("doesntexist", Util.OpStartsWith, "Generic")); d.listView=dListView.ToString(Newtonsoft.Json.Formatting.None); ApiResponse a = await Util.PostAsync("data-list-view", await Util.GetTokenAsync("BizAdminFull"), d.ToString(Newtonsoft.Json.Formatting.None)); Util.ValidateErrorCodeResponse(a, 2200, 400); Util.ShouldContainValidationError(a, "ListView", "2203"); } //REMOVED THIS VALIDATION TEST AS SWITCH TO DATALISTVIEW NO LONGER VALIDATES FILTER ANYWAY //ONLY COLUMN NAMES AND LIST NAME // /// // /// // /// // [Fact] // public async void InvalidOperatorShouldFail() // { // //CREATE // dynamic d = new JObject(); // d.name = Util.Uniquify("Test DataListView"); // d["public"] = true; // d.listKey="TestWidgetDataList"; // //"[{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("data-list-view", await Util.GetTokenAsync("BizAdminFull"), d.ToString()); // Util.ValidateErrorCodeResponse(a, 2200, 400); // Util.ShouldContainValidationError(a, "Filter", "2203"); // } //================================================== }//eoc }//eons