41 lines
2.3 KiB
C#
41 lines
2.3 KiB
C#
using game.PlayerDataStorage;
|
|
using Newtonsoft.Json;
|
|
|
|
static partial class Tests
|
|
{
|
|
static async Task RunPlayerSchemaTests()
|
|
{
|
|
await Run("M01-player-additional-fields-and-ownership",() =>
|
|
{
|
|
var raw=ModernRaw(); raw["NewRodList"]="[7,8]"; raw["SeasonId"]="9"; raw["IsOpenAppraise"]=""; raw["InfiniteBuildingData"]="raw";
|
|
var modern=new Dictionary<string,string> { ["newData"]=string.Join(",",CompleteCore),["vipL"]="-1,5|0,6|1,7" };
|
|
var a=PlayerKVSaveSchema.DecodePlayer(raw,modern,SchemaSnapshot(),new());
|
|
Check(a!=null && a.VipScores[-1]==5 && a.VipScores[0]==6 && a.VipScores[1]==7 &&
|
|
a.NewRods.SequenceEqual(new[] { 7,8 }) && a.Season==9 && a.Appraise && a.Building=="raw","all extra fields");
|
|
modern["vipL"]="";
|
|
Check(a.Modern["vipL"]=="-1,5|0,6|1,7","modern copied");
|
|
var b=PlayerKVSaveSchema.DecodePlayer(ModernRaw(),modern,SchemaSnapshot(),new());
|
|
Check(b.NewRods.Count==0 && b.VipScores.Count==0 && b.Season==0 && !b.Appraise && b.Building=="0","missing building restores original zero default");
|
|
foreach(var text in new[]{"", "0", "23,7"})
|
|
{
|
|
var existing=ModernRaw(); existing["InfiniteBuildingData"]=text;
|
|
Check(PlayerKVSaveSchema.DecodePlayer(existing,modern,SchemaSnapshot(),new()).Building==text,"existing building string unchanged");
|
|
}
|
|
foreach(var vip in new[] { "0,1|00,2","0,1|","1,2,3","null",null })
|
|
{
|
|
modern["vipL"]=vip;
|
|
Check(PlayerKVSaveSchema.DecodePlayer(raw,modern,SchemaSnapshot(),new())==null,"bad vip map rejects");
|
|
}
|
|
modern["vipL"]="";
|
|
foreach(var key in new[] { "NewRodList","SeasonId","IsOpenAppraise","InfiniteBuildingData" })
|
|
{
|
|
var bad=new Dictionary<string,string>(raw) { [key]=null };
|
|
Check(PlayerKVSaveSchema.DecodePlayer(bad,modern,SchemaSnapshot(),new())==null,"present null extra fails");
|
|
}
|
|
var missingCore=new Dictionary<string,string>();
|
|
Check(PlayerKVSaveSchema.DecodePlayer(missingCore,new Dictionary<string,string>(),SchemaSnapshot(),new())==null,"no default account creation");
|
|
return Task.CompletedTask;
|
|
});
|
|
}
|
|
}
|