Files
raven-test-integration/Translation/Translation.cs
2026-02-25 16:30:23 -08:00

127 lines
5.7 KiB
C#

using System;
using Xunit;
using Newtonsoft.Json.Linq;
using FluentAssertions;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Collections.Concurrent;
namespace raven_integration
{
public class Translation
{
/*
ImportTranslation(ct, ResourceFolderPath, "en"); - id 1
ImportTranslation(ct, ResourceFolderPath, "es"); - id 2
ImportTranslation(ct, ResourceFolderPath, "fr"); - id 3
ImportTranslation(ct, ResourceFolderPath, "de"); - id 4
*/
[Fact]
public async Task TranslationListWorks()
{
//Get all
ApiResponse a = await Util.GetAsync("translation/list", await Util.GetTokenAsync("CustomerRestricted"));//lowest level test user because there are no limits on this route except to be authenticated
Util.ValidateDataReturnResponseOk(a);
Util.ValidateHTTPStatusCode(a, 200);
//there should be at least 4 of them as there are 4 stock translations
((JArray)a.ObjectResponse["data"]).Count.Should().BeGreaterThan(3);
}
[Fact]
public async Task GetFullTranslationWorks()
{
//Get all
ApiResponse a = await Util.GetAsync("translation/1", await Util.GetTokenAsync("CustomerRestricted"));//lowest level test user because there are no limits on this route except to be authenticated
Util.ValidateDataReturnResponseOk(a);
Util.ValidateHTTPStatusCode(a, 200);
//there should be dozens of keys but at times there might only be a few during development so at least verify there is more than one
((JArray)a.ObjectResponse["data"]["translationItems"]).Count.Should().BeGreaterThan(0);
}
[Fact]
public async Task GetSubsetWorks()
{
List<string> keys = new List<string>();
keys.AddRange(new string[] { "AddressCity", "CustomerName", "ServiceRate", "WorkOrder" });
dynamic d = new JObject();
d = JToken.FromObject(keys);
ApiResponse a = await Util.PostAsync("translation/subset", await Util.GetTokenAsync("CustomerRestricted"), d.ToString());
Util.ValidateDataReturnResponseOk(a);
Util.ValidateHTTPStatusCode(a, 200);
//there should be dozens of keys but at times there might only be a few during development so at least verify there is more than one
((JArray)a.ObjectResponse["data"]).Count.Should().Be(4);
}
[Fact]
public async Task DuplicateUpdateAndDeleteWorks()
{
//DUPLICATE
ApiResponse a = await Util.PostAsync("translation/Duplicate/1", await Util.GetTokenAsync("BizAdmin"));
Util.ValidateDataReturnResponseOk(a);
Util.ValidateHTTPStatusCode(a, 201);
//verify the object returned is as expected
a.ObjectResponse["data"]["name"].Value<string>().Should().Contain("en-");//based on english - 1
a.ObjectResponse["data"]["stock"].Value<bool>().Should().Be(false);
a.ObjectResponse["data"]["id"].Value<long>().Should().BeGreaterThan(4);
a.ObjectResponse["data"]["concurrency"].Value<uint>().Should().BeGreaterThan(0);
((JArray)a.ObjectResponse["data"]["translationItems"]).Count.Should().BeGreaterThan(0);
long NewId = a.ObjectResponse["data"]["id"].Value<long>();
dynamic d2 = a.ObjectResponse["data"];
//UPDATE
//Update translation name
d2.name = Util.Uniquify("INTEGRATION-TEST-LOCALE NAME UPDATE");
ApiResponse PUTTestResponse = await Util.PutAsync("translation", await Util.GetTokenAsync("BizAdmin"), d2.ToString());
Util.ValidateHTTPStatusCode(PUTTestResponse, 200);
ApiResponse checkPUTWorked = await Util.GetAsync("translation/" + NewId.ToString(), await Util.GetTokenAsync("BizAdmin"));
Util.ValidateNoErrorInResponse(checkPUTWorked);
checkPUTWorked.ObjectResponse["data"]["name"].Value<string>().Should().Be(d2.name.ToString());
//Update translation key
d2 = a.ObjectResponse["data"];
var FirstTranslationKey = ((JArray)d2["translationItems"])[0];
var FirstTranslationKeyNewText=Util.Uniquify("INTEGRATION-TEST-LOCALEITEM DISPLAY UPDATE");
FirstTranslationKey["display"] = FirstTranslationKeyNewText;
string UpdatedTranslationKey = FirstTranslationKey["key"].Value<string>();
PUTTestResponse = await Util.PutAsync("translation", await Util.GetTokenAsync("BizAdmin"), d2.ToString());
Util.ValidateHTTPStatusCode(PUTTestResponse, 200);
List<string> keys = new List<string>();
keys.AddRange(new string[] { UpdatedTranslationKey });
dynamic d = new JObject();
d = JToken.FromObject(keys);
checkPUTWorked = await Util.PostAsync($"translation/subset/{NewId}", await Util.GetTokenAsync("BizAdmin"), d.ToString());
Util.ValidateDataReturnResponseOk(checkPUTWorked);
Util.ValidateHTTPStatusCode(checkPUTWorked, 200);
((JArray)checkPUTWorked.ObjectResponse["data"]).Count.Should().Be(1);
var FirstTranslationKeyUpdated = ((JArray)checkPUTWorked.ObjectResponse["data"])[0];
FirstTranslationKeyUpdated["value"].Value<string>().Should().Be(FirstTranslationKeyNewText);
//DELETE TEMP TRANSLATION
a = await Util.DeleteAsync($"translation/{NewId}", await Util.GetTokenAsync("BizAdmin"));
Util.ValidateHTTPStatusCode(a, 204);
}
//==================================================
}//eoc
}//eons