StateManagerTests.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using XafPet.Desktop.PetEngine;
  2. using Xunit;
  3. namespace XafPet.Desktop.Tests;
  4. public class StateManagerTests
  5. {
  6. [Fact]
  7. public void AllTasksCompleted_ReturnsHappy()
  8. {
  9. var tasks = new List<CfcTask>
  10. {
  11. new() { Id = 1, Title = "喝水", Status = "COMPLETED" },
  12. new() { Id = 2, Title = "运动", Status = "COMPLETED" }
  13. };
  14. var state = StateManager.MapState(tasks, null, null, false);
  15. Assert.Equal(PetState.Happy, state);
  16. }
  17. [Fact]
  18. public void SomeTasksPending_ReturnsBusy()
  19. {
  20. var tasks = new List<CfcTask>
  21. {
  22. new() { Id = 1, Title = "喝水", Status = "COMPLETED" },
  23. new() { Id = 2, Title = "运动", Status = "PENDING" }
  24. };
  25. var state = StateManager.MapState(tasks, null, null, false);
  26. Assert.Equal(PetState.Busy, state);
  27. }
  28. [Fact]
  29. public void NoTasks_ReturnsIdle()
  30. {
  31. var state = StateManager.MapState(new List<CfcTask>(), null, null, false);
  32. Assert.Equal(PetState.Idle, state);
  33. }
  34. [Fact]
  35. public void CheckinDone_OverridesToExcited()
  36. {
  37. var state = StateManager.MapState(new List<CfcTask>(), null,
  38. new DailyCheckin { Checked = true, Items = new List<string> { "water" } }, false);
  39. Assert.Equal(PetState.Excited, state);
  40. }
  41. [Fact]
  42. public void LowBodyEnergy_ReturnsTired()
  43. {
  44. var energy = new EnergyOverview
  45. {
  46. Dimensions = new List<DimensionValue>
  47. {
  48. new() { Dimension = "身", Value = 20, Color = "#FF8C42" },
  49. new() { Dimension = "智", Value = 80, Color = "#6366F1" }
  50. }
  51. };
  52. var state = StateManager.MapState(new List<CfcTask>(), energy, null, false);
  53. Assert.Equal(PetState.Tired, state);
  54. }
  55. [Fact]
  56. public void AllDimensionsLow_ReturnsSad()
  57. {
  58. var energy = new EnergyOverview
  59. {
  60. Dimensions = new List<DimensionValue>
  61. {
  62. new() { Dimension = "身", Value = 15, Color = "#FF8C42" },
  63. new() { Dimension = "智", Value = 20, Color = "#6366F1" },
  64. new() { Dimension = "富", Value = 25, Color = "#F59E0B" }
  65. }
  66. };
  67. var state = StateManager.MapState(new List<CfcTask>(), energy, null, false);
  68. Assert.Equal(PetState.Sad, state);
  69. }
  70. [Fact]
  71. public void HighBodyEnergy_ReturnsEnergetic()
  72. {
  73. var energy = new EnergyOverview
  74. {
  75. Dimensions = new List<DimensionValue>
  76. {
  77. new() { Dimension = "身", Value = 90, Color = "#FF8C42" }
  78. }
  79. };
  80. var state = StateManager.MapState(new List<CfcTask>(), energy, null, false);
  81. Assert.Equal(PetState.Energetic, state);
  82. }
  83. [Fact]
  84. public void UserInactive_ReturnsSleeping()
  85. {
  86. var state = StateManager.MapState(new List<CfcTask>(), null, null, true);
  87. Assert.Equal(PetState.Sleeping, state);
  88. }
  89. [Fact]
  90. public void StateToCamelCase_ConvertsEnumName()
  91. {
  92. Assert.Equal("waitingForInteraction",
  93. StateManager.StateToCamelCase(PetState.WaitingForInteraction));
  94. Assert.Equal("miniGame", StateManager.StateToCamelCase(PetState.MiniGame));
  95. Assert.Equal("idle", StateManager.StateToCamelCase(PetState.Idle));
  96. }
  97. }