test(upserver): 归档存档迁移与玩法闭环回归工具

This commit is contained in:
Liubing\LB
2026-09-28 18:16:14 +08:00
parent c4ae02def9
commit a6f5e107f8
232 changed files with 12903 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
using game.PlayerDataStorage;
using Newtonsoft.Json.Linq;
static partial class Tests
{
static async Task RunPinataSchemaTests()
{
await Run("M29-pinata-three-integer-record",() =>
{
var valid=JObject.Parse("{\"EventID\":1,\"PinataMainID\":2,\"PurchasedCount\":3}");
Dictionary<string,string> Raw(JObject obj)=>new() { ["EventPinataPackData"]=obj.ToString() };
var a=PlayerKVSaveSchema.DecodePinata(Raw(valid),new());
Check(a.EventID==1 && a.PinataMainID==2 && a.PurchasedCount==3,"all scalars");
foreach(var p in valid.Properties())
foreach(var invalid in new JToken[] { JValue.CreateNull(),new JValue("1"),new JValue(1.5),new JValue(2147483648L) })
{
var bad=(JObject)valid.DeepClone(); bad[p.Name]=invalid;
Check(PlayerKVSaveSchema.DecodePinata(Raw(bad),new())==null,"strict integer fields");
}
var missing=PlayerKVSaveSchema.DecodePinata(new Dictionary<string,string>(),new());
Check(missing.EventID==0 && missing.PinataMainID==0 && missing.PurchasedCount==0,"all missing zeros");
Check(PlayerKVSaveSchema.DecodePinata(new Dictionary<string,string> { ["EventPinataPackData"]="null" },new())==null,"null not missing");
return Task.CompletedTask;
});
}
}