HubMessageTests.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using YZWater.Core.Models;
  2. using System.Text.Json;
  3. namespace YZWater.Core.Tests.Models;
  4. public class HubMessageTests
  5. {
  6. [Fact]
  7. public void ToJson_ProducesValidJson_WithTypeAndPayload()
  8. {
  9. var msg = HubMessage.AuthResult(true);
  10. var json = msg.ToJson();
  11. var doc = JsonDocument.Parse(json);
  12. Assert.Equal("auth_result", doc.RootElement.GetProperty("type").GetString());
  13. Assert.True(doc.RootElement.GetProperty("payload").GetBoolean());
  14. }
  15. [Fact]
  16. public void FromJson_RoundTrips_Correctly()
  17. {
  18. var original = HubMessage.CommandResult(success: true, message: "泵已启动");
  19. var json = original.ToJson();
  20. var restored = HubMessage.FromJson(json);
  21. Assert.NotNull(restored);
  22. Assert.Equal("command_result", restored!.Type);
  23. var payload = restored.GetPayload<CommandResultPayload>();
  24. Assert.NotNull(payload);
  25. Assert.True(payload!.Success);
  26. Assert.Equal("泵已启动", payload.Message);
  27. }
  28. [Fact]
  29. public void FromJson_InvalidJson_ThrowsException()
  30. {
  31. Assert.ThrowsAny<JsonException>(() => HubMessage.FromJson("not-json"));
  32. }
  33. [Fact]
  34. public void GetPayload_NullPayload_ReturnsDefault()
  35. {
  36. var msg = new HubMessage { Type = "empty" };
  37. var result = msg.GetPayload<CommandResultPayload>();
  38. Assert.Null(result);
  39. }
  40. [Fact]
  41. public void LockResult_Success_SetsPayloadCorrectly()
  42. {
  43. var msg = HubMessage.LockResult(success: true, currentOperator: "admin");
  44. Assert.Equal("lock_result", msg.Type);
  45. var payload = msg.GetPayload<LockResultPayload>();
  46. Assert.NotNull(payload);
  47. Assert.True(payload!.Success);
  48. Assert.Equal("admin", payload.CurrentOperator);
  49. }
  50. [Fact]
  51. public void LockStatus_ReflectsParameters()
  52. {
  53. var msg = HubMessage.LockStatus(currentOperator: "engineer1", isLocked: true);
  54. var payload = msg.GetPayload<LockStatusPayload>();
  55. Assert.NotNull(payload);
  56. Assert.True(payload!.IsLocked);
  57. Assert.Equal("engineer1", payload.CurrentOperator);
  58. }
  59. [Fact]
  60. public void ClientCount_SerializesIntegerPayload()
  61. {
  62. var msg = HubMessage.ClientCount(5);
  63. var json = msg.ToJson();
  64. var doc = JsonDocument.Parse(json);
  65. Assert.Equal(5, doc.RootElement.GetProperty("payload").GetInt32());
  66. }
  67. }