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 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 = "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
//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