245 lines
8.9 KiB
C#
245 lines
8.9 KiB
C#
using System;
|
|
using Xunit;
|
|
using Newtonsoft.Json.Linq;
|
|
using FluentAssertions;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Concurrent;
|
|
|
|
namespace raven_integration
|
|
{
|
|
|
|
public class FormCustom
|
|
{
|
|
|
|
/// <summary>
|
|
/// Test create or update
|
|
/// </summary>
|
|
[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<uint>();
|
|
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<string>().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<string>().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<long>();
|
|
|
|
|
|
// //RETRIEVE
|
|
// //Get one
|
|
// a = await Util.GetAsync("DataFilter/" + Id.ToString(), await Util.GetTokenAsync("BizAdminFull"));
|
|
// Util.ValidateDataReturnResponseOk(a);
|
|
// a.ObjectResponse["data"]["name"].Value<string>().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<string>().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<uint>();
|
|
// 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<string>().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);
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
[Fact]
|
|
public async void InvalidAvailableFieldsFormKeyShouldFail()
|
|
{
|
|
|
|
ApiResponse a = await Util.GetAsync("FormCustom/AvailableFields/nonexistent", await Util.GetTokenAsync("BizAdminFull"));
|
|
Util.ValidateErrorCodeResponse(a, 2010, 404);
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
[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);
|
|
|
|
}
|
|
|
|
// /// <summary>
|
|
// ///
|
|
// /// </summary>
|
|
// [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");
|
|
|
|
// }
|
|
|
|
|
|
|
|
// /// <summary>
|
|
// ///
|
|
// /// </summary>
|
|
// [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
|