Files
raven-test-integration/FormCustom/FormCustom.cs
2019-12-10 00:48:31 +00:00

180 lines
6.5 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 = "user";
/*
As sending from client now with fail:
{
"formKey":"widget",
"concurrencyToken":3798757,
"template":[
{"fld":"WidgetName","required":true,"hide":false},{"fld":"WidgetStartDate","required":true,"hide":false},{"fld":"WidgetEndDate","required":true,"hide":false},{"fld":"WidgetNotes","required":true,"hide":false},{"fld":"WidgetCustom1","required":false,"type":"datetime"},{"fld":"WidgetCustom2","required":true,"type":"text"},{"fld":"WidgetCustom3","required":false,"type":"number"},{"fld":"WidgetCustom4","required":false,"type":"bool"},{"fld":"WidgetCustom5","required":false,"type":"currency"},{"fld":"WidgetCustom6","required":false,"type":"date"},{"fld":"WidgetCustom7","required":false,"type":"time"}
]
}
//As it appears in this unit test to string
{{
"formkey": "user",
"template": "[\r\n {\r\n \"fld\": \"UserCustom1\",\r\n \"hide\": false,\r\n \"required\": true,\r\n \"type\": \"text\"\r\n },\r\n {\r\n \"fld\": \"UserNotes\",\r\n \"required\": true\r\n },\r\n {\r\n \"fld\": \"UserCustom2\",\r\n \"hide\": true,\r\n \"required\": false,\r\n \"type\": \"bool\"\r\n }\r\n]"
}}
//As it fetches off the server now
{
"data": {
"id": 1,
"concurrencyToken": 3798757,
"formKey": "widget",
"template": "[{\"fld\":\"WidgetNotes\",\"required\":true},{\"fld\":\"WidgetCustom1\",\"required\":false,\"type\":\"datetime\"},{\"fld\":\"WidgetCustom2\",\"required\":true,\"type\":\"text\"},
{\"fld\":\"WidgetCustom3\",\"required\":false,\"type\":\"number\"},{\"fld\":\"WidgetCustom4\",\"required\":false,\"type\":\"bool\"},{\"fld\":\"WidgetCustom5\",\"required\":false,\"type\":\"currency\"},
{\"fld\":\"WidgetCustom6\",\"required\":false,\"type\":\"date\"},{\"fld\":\"WidgetCustom7\",\"required\":false,\"type\":\"time\"}]"
}
}
*/
dynamic dtemplate = new JArray();
dynamic dt = new JObject();
dt.fld = "UserCustom1";
dt.hide = false;
dt.required = true;
dt.type = "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 = "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/user", await Util.GetTokenAsync("BizAdminFull"));
bool Exists = ((int)a.HttpResponse.StatusCode) == 200;
if (Exists)
{
//Update
d.concurrencyToken = a.ObjectResponse["data"]["concurrencyToken"].Value<uint>();
a = await Util.PutAsync("FormCustom/user", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
Util.ValidateHTTPStatusCode(a, 200);
}
else
{
//Create it
a = await Util.PostAsync("FormCustom", await Util.GetTokenAsync("BizAdminFull"), d.ToString());
Util.ValidateDataReturnResponseOk(a);
}
//check the concurrency token cache scheme
uint token = a.ObjectResponse["data"]["concurrencyToken"].Value<uint>();
//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);
}
/// <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 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)
}
/// <summary>
///
/// </summary>
[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