51 lines
2.2 KiB
C#
51 lines
2.2 KiB
C#
using NUnit.Framework;
|
|
using ProjectM.Simulation;
|
|
|
|
namespace ProjectM.Tests
|
|
{
|
|
/// <summary>
|
|
/// Pins <see cref="SaveService.RollTerminalCampaignForward"/>: a TERMINAL save (Victory/Loss latched)
|
|
/// Continues as a fresh campaign — outcome / goal meter / core reset to 0 (the spawn restore guards re-map
|
|
/// 0 to InProgress / empty / baked-full) — while the permanent channel (meta tiers, run counters, ledger,
|
|
/// structures) survives untouched. In-progress saves and null are no-ops.
|
|
/// </summary>
|
|
public class TerminalCampaignRollTests
|
|
{
|
|
[Test]
|
|
public void TerminalSave_RollsForward_KeepingBaseAndMeta()
|
|
{
|
|
var data = new SaveData
|
|
{
|
|
RunOutcome = 1, // Victory latched
|
|
GoalCharge = 4,
|
|
GoalTarget = 4,
|
|
CoreCurrent = 37,
|
|
RunsCompleted = 4,
|
|
MaxDepthReached = 7,
|
|
MetaUpgrades = new[] { new MetaUpgradeSave { ClassId = 0, UpgradeId = 1, Tier = 2 } },
|
|
Ledger = new[] { new LedgerRow { ItemId = ResourceId.Ore, Count = 123 } },
|
|
};
|
|
|
|
SaveService.RollTerminalCampaignForward(data);
|
|
|
|
Assert.AreEqual(0, data.RunOutcome, "outcome latch reset");
|
|
Assert.AreEqual(0, data.GoalCharge, "goal meter reset");
|
|
Assert.AreEqual(0, data.CoreCurrent, "core resets to 0 -> restore guard re-maps to baked-full");
|
|
Assert.AreEqual(4, data.RunsCompleted, "permanent counters survive");
|
|
Assert.AreEqual(7, data.MaxDepthReached, "permanent counters survive");
|
|
Assert.AreEqual(2, data.MetaUpgrades[0].Tier, "meta tiers survive");
|
|
Assert.AreEqual(123, data.Ledger[0].Count, "the ledger survives");
|
|
}
|
|
|
|
[Test]
|
|
public void InProgressSave_AndNull_AreNoOps()
|
|
{
|
|
var data = new SaveData { RunOutcome = 0, GoalCharge = 2, CoreCurrent = 50 };
|
|
SaveService.RollTerminalCampaignForward(data);
|
|
Assert.AreEqual(2, data.GoalCharge);
|
|
Assert.AreEqual(50, data.CoreCurrent);
|
|
Assert.DoesNotThrow(() => SaveService.RollTerminalCampaignForward(null));
|
|
}
|
|
}
|
|
}
|