geometry-tower-defense/Assets/Tests/EditMode/ProcedureMainServicesTests.cs

140 lines
6.0 KiB
C#

using GeometryTD.Definition;
using GeometryTD.Procedure;
using NUnit.Framework;
namespace GeometryTD.Tests.EditMode
{
public sealed class ProcedureMainServicesTests
{
[Test]
public void TryAdvanceRun_Returns_AdvancedToNextNode_For_Normal_Completion()
{
RunState runState = CreateTwoNodeRun();
ProcedureMainRunAdvanceResult result = ProcedureMainRunFlowService.TryAdvanceRun(
runState,
RunNodeCompletionStatus.Completed,
new BackpackInventoryData { Gold = 88 });
Assert.That(result, Is.EqualTo(ProcedureMainRunAdvanceResult.AdvancedToNextNode));
Assert.That(runState.IsCompleted, Is.False);
Assert.That(runState.Nodes[0].Status, Is.EqualTo(RunNodeStatus.Completed));
Assert.That(runState.CurrentNodeIndex, Is.EqualTo(1));
Assert.That(runState.CurrentNode.Status, Is.EqualTo(RunNodeStatus.Available));
Assert.That(runState.RunInventorySnapshot.Gold, Is.EqualTo(88));
}
[Test]
public void TryAdvanceRun_Returns_NodeException_For_Exception_Fallback()
{
RunState runState = CreateTwoNodeRun();
ProcedureMainRunAdvanceResult result = ProcedureMainRunFlowService.TryAdvanceRun(
runState,
RunNodeCompletionStatus.Exception,
new BackpackInventoryData { Gold = 5 });
Assert.That(result, Is.EqualTo(ProcedureMainRunAdvanceResult.NodeException));
Assert.That(runState.IsCompleted, Is.False);
Assert.That(runState.CurrentNodeIndex, Is.EqualTo(0));
Assert.That(runState.CurrentNode.Status, Is.EqualTo(RunNodeStatus.Exception));
Assert.That(runState.Nodes[1].Status, Is.EqualTo(RunNodeStatus.Locked));
Assert.That(runState.RunInventorySnapshot.Gold, Is.EqualTo(5));
}
[Test]
public void TryAdvanceRun_Returns_RunCompleted_When_Last_Node_Finishes()
{
RunState runState = RunStateFactory.Create(
LevelThemeType.Plain,
new BackpackInventoryData { Gold = 30 },
new[]
{
new RunNodeSeed { NodeId = 901, NodeType = RunNodeType.BossCombat, LinkedLevelId = 4 }
});
ProcedureMainRunAdvanceResult result = ProcedureMainRunFlowService.TryAdvanceRun(
runState,
RunNodeCompletionStatus.Completed,
new BackpackInventoryData { Gold = 123 });
Assert.That(result, Is.EqualTo(ProcedureMainRunAdvanceResult.RunCompleted));
Assert.That(runState.IsCompleted, Is.True);
Assert.That(runState.CurrentNodeIndex, Is.EqualTo(1));
Assert.That(runState.CompletedNodeCount, Is.EqualTo(1));
Assert.That(runState.RunInventorySnapshot.Gold, Is.EqualTo(123));
}
[Test]
public void TryAdvanceRun_Returns_NoChange_When_Run_Cannot_Advance()
{
ProcedureMainRunAdvanceResult nullRunResult = ProcedureMainRunFlowService.TryAdvanceRun(
null,
RunNodeCompletionStatus.Completed,
new BackpackInventoryData { Gold = 1 });
Assert.That(nullRunResult, Is.EqualTo(ProcedureMainRunAdvanceResult.NoChange));
RunState completedRun = RunStateFactory.Create(
LevelThemeType.Plain,
new BackpackInventoryData { Gold = 10 },
new RunNodeSeed[0]);
ProcedureMainRunAdvanceResult completedRunResult = ProcedureMainRunFlowService.TryAdvanceRun(
completedRun,
RunNodeCompletionStatus.Completed,
new BackpackInventoryData { Gold = 20 });
Assert.That(completedRunResult, Is.EqualTo(ProcedureMainRunAdvanceResult.NoChange));
Assert.That(completedRun.RunInventorySnapshot.Gold, Is.EqualTo(10));
}
[Test]
public void TryEnterCompletedPendingFinish_Shows_Dialog_Only_Once()
{
ProcedureMainRunCompletionResult firstResult =
ProcedureMainRunCompletionService.TryEnterCompletedPendingFinish(false);
ProcedureMainRunCompletionResult secondResult =
ProcedureMainRunCompletionService.TryEnterCompletedPendingFinish(true);
Assert.That(firstResult, Is.EqualTo(ProcedureMainRunCompletionResult.ShowCompletionDialog));
Assert.That(secondResult, Is.EqualTo(ProcedureMainRunCompletionResult.NoChange));
}
[Test]
public void TryConfirmReturnToMenu_Returns_Menu_Only_In_Completed_Pending_Finish()
{
ProcedureMainRunCompletionResult validResult =
ProcedureMainRunCompletionService.TryConfirmReturnToMenu(
ProcedureMainFlowPhase.RunCompletedPendingFinish,
false);
ProcedureMainRunCompletionResult hubResult =
ProcedureMainRunCompletionService.TryConfirmReturnToMenu(
ProcedureMainFlowPhase.Hub,
false);
ProcedureMainRunCompletionResult pendingResult =
ProcedureMainRunCompletionService.TryConfirmReturnToMenu(
ProcedureMainFlowPhase.RunCompletedPendingFinish,
true);
Assert.That(validResult, Is.EqualTo(ProcedureMainRunCompletionResult.ReturnToMenu));
Assert.That(hubResult, Is.EqualTo(ProcedureMainRunCompletionResult.NoChange));
Assert.That(pendingResult, Is.EqualTo(ProcedureMainRunCompletionResult.NoChange));
}
private static RunState CreateTwoNodeRun()
{
return RunStateFactory.Create(
LevelThemeType.Plain,
new BackpackInventoryData { Gold = 50 },
new[]
{
new RunNodeSeed { NodeId = 101, NodeType = RunNodeType.Combat, LinkedLevelId = 1 },
new RunNodeSeed { NodeId = 102, NodeType = RunNodeType.Event }
});
}
}
}