test(upserver): 归档存档迁移与玩法闭环回归工具
This commit is contained in:
26
CodexOutput/upserver/KVGameLoadTests/PinataSchemaTests.cs
Normal file
26
CodexOutput/upserver/KVGameLoadTests/PinataSchemaTests.cs
Normal 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;
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user