Files
Radicade/ServerTests/AvatarWireFormatTests.cs
T
2026-10-16 23:33:13 -07:00

58 lines
2.6 KiB
C#

using RadicadeServer.RecNet.Avatar;
using Xunit;
namespace RadicadeServer.Tests;
public class AvatarWireFormatTests
{
[Theory]
[InlineData("8aa79563-ace1-4ba7-ad0c-f3210a78142f,", "8aa79563-ace1-4ba7-ad0c-f3210a78142f,")]
[InlineData("prefab,material", "prefab,material")]
[InlineData("prefab,material,", "prefab,material,")]
[InlineData("prefab,first,second,", "prefab,first,second,")]
[InlineData("prefab,,second,", "prefab,,second,")]
public void V4PreservesTheExactMaterialCombinationKey(string catalogKey, string selectionKey)
{
var dto = new AvatarItemV4(new AvatarItem { AvatarItemDesc = catalogKey });
var json = System.Text.Json.JsonSerializer.SerializeToElement(dto);
Assert.Equal(selectionKey, json.GetProperty("AvatarItemDesc").GetString());
}
[Fact]
public void ScreenshotShirtSurvivesCatalogToWireConversion()
{
var catalog = File.ReadAllText(Path.Combine(AppContext.BaseDirectory, "Fixtures", "2022-avatar.json"));
var shirt = AvatarUnlockCatalog.ParseCatalog(catalog)
.Single(item => item.AvatarItemDesc == "8aa79563-ace1-4ba7-ad0c-f3210a78142f,");
Assert.Equal("8aa79563-ace1-4ba7-ad0c-f3210a78142f,", new AvatarItemV4(shirt).AvatarItemDesc);
Assert.True(shirt.AvatarItemId > 0);
}
[Fact]
public void BaseEndpointDoesNotReclassifyClothingAsHiddenBodyParts()
{
var originalCatalog = DBConfig.DefaultAvatarCatalog;
var originalLookup = DBConfig.ResolvableAvatarItemDescs;
try
{
DBConfig.DefaultAvatarCatalog = """
[{"AvatarItemDesc":"shirt,","IsBaseAvatarItem":false},
{"AvatarItemDesc":"base-body,","IsBaseAvatarItem":true}]
""";
DBConfig.ResolvableAvatarItemDescs = new HashSet<string>();
// These endpoints do not access the database.
var api = new RadicadeServer.API.Avatars.V1.AvatarV1(null!);
var response = Assert.IsType<Microsoft.AspNetCore.Mvc.OkObjectResult>(api.GetDefaultBaseAvatarItems());
var baseItems = Assert.IsType<List<AvatarItem>>(response.Value);
Assert.Equal("base-body,", Assert.Single(baseItems).AvatarItemDesc);
Assert.DoesNotContain(api.GetDefaultUnlocks(), item => item.AvatarItemDesc == "shirt,");
Assert.Contains(api.GetDefaultUnlocks(), item => item.AvatarItemDesc == "base-body,");
}
finally
{
DBConfig.DefaultAvatarCatalog = originalCatalog;
DBConfig.ResolvableAvatarItemDescs = originalLookup;
}
}
}