using XafPet.Desktop.PetEngine; using Xunit; namespace XafPet.Desktop.Tests; public class StateManagerTests { [Fact] public void AllTasksCompleted_ReturnsHappy() { var tasks = new List { new() { Id = 1, Title = "喝水", Status = "COMPLETED" }, new() { Id = 2, Title = "运动", Status = "COMPLETED" } }; var state = StateManager.MapState(tasks, null, null, false); Assert.Equal(PetState.Happy, state); } [Fact] public void SomeTasksPending_ReturnsBusy() { var tasks = new List { new() { Id = 1, Title = "喝水", Status = "COMPLETED" }, new() { Id = 2, Title = "运动", Status = "PENDING" } }; var state = StateManager.MapState(tasks, null, null, false); Assert.Equal(PetState.Busy, state); } [Fact] public void NoTasks_ReturnsIdle() { var state = StateManager.MapState(new List(), null, null, false); Assert.Equal(PetState.Idle, state); } [Fact] public void CheckinDone_OverridesToExcited() { var state = StateManager.MapState(new List(), null, new DailyCheckin { Checked = true, Items = new List { "water" } }, false); Assert.Equal(PetState.Excited, state); } [Fact] public void LowBodyEnergy_ReturnsTired() { var energy = new EnergyOverview { Dimensions = new List { new() { Dimension = "身", Value = 20, Color = "#FF8C42" }, new() { Dimension = "智", Value = 80, Color = "#6366F1" } } }; var state = StateManager.MapState(new List(), energy, null, false); Assert.Equal(PetState.Tired, state); } [Fact] public void AllDimensionsLow_ReturnsSad() { var energy = new EnergyOverview { Dimensions = new List { new() { Dimension = "身", Value = 15, Color = "#FF8C42" }, new() { Dimension = "智", Value = 20, Color = "#6366F1" }, new() { Dimension = "富", Value = 25, Color = "#F59E0B" } } }; var state = StateManager.MapState(new List(), energy, null, false); Assert.Equal(PetState.Sad, state); } [Fact] public void HighBodyEnergy_ReturnsEnergetic() { var energy = new EnergyOverview { Dimensions = new List { new() { Dimension = "身", Value = 90, Color = "#FF8C42" } } }; var state = StateManager.MapState(new List(), energy, null, false); Assert.Equal(PetState.Energetic, state); } [Fact] public void UserInactive_ReturnsSleeping() { var state = StateManager.MapState(new List(), null, null, true); Assert.Equal(PetState.Sleeping, state); } [Fact] public void StateToCamelCase_ConvertsEnumName() { Assert.Equal("waitingForInteraction", StateManager.StateToCamelCase(PetState.WaitingForInteraction)); Assert.Equal("miniGame", StateManager.StateToCamelCase(PetState.MiniGame)); Assert.Equal("idle", StateManager.StateToCamelCase(PetState.Idle)); } }