JsonCommaDelimitedCollectionTests.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.Immutable;
  4. using System.Linq;
  5. using System.Text.Json;
  6. using System.Text.Json.Serialization;
  7. using Jellyfin.Extensions.Tests.Json.Models;
  8. using MediaBrowser.Model.Session;
  9. using Xunit;
  10. namespace Jellyfin.Extensions.Tests.Json.Converters
  11. {
  12. public class JsonCommaDelimitedCollectionTests
  13. {
  14. private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions()
  15. {
  16. Converters =
  17. {
  18. new JsonStringEnumConverter()
  19. }
  20. };
  21. [Fact]
  22. public void Deserialize_String_Null_Success()
  23. {
  24. var value = JsonSerializer.Deserialize<GenericBodyArrayModel<string>>(@"{ ""Value"": null }", _jsonOptions);
  25. Assert.Null(value?.Value);
  26. }
  27. [Fact]
  28. public void Deserialize_Empty_Success()
  29. {
  30. var desiredValue = new GenericBodyArrayModel<string>
  31. {
  32. Value = Array.Empty<string>()
  33. };
  34. var value = JsonSerializer.Deserialize<GenericBodyArrayModel<string>>(@"{ ""Value"": """" }", _jsonOptions);
  35. Assert.Equal(desiredValue.Value, value?.Value);
  36. }
  37. [Fact]
  38. public void Deserialize_EmptyList_Success()
  39. {
  40. var desiredValue = new GenericBodyListModel<string>
  41. {
  42. Value = []
  43. };
  44. Assert.Throws<InvalidOperationException>(() => JsonSerializer.Deserialize<GenericBodyListModel<string>>(@"{ ""Value"": """" }", _jsonOptions));
  45. }
  46. [Fact]
  47. public void Deserialize_EmptyIReadOnlyList_Success()
  48. {
  49. var desiredValue = new GenericBodyIReadOnlyListModel<string>
  50. {
  51. Value = []
  52. };
  53. var value = JsonSerializer.Deserialize<GenericBodyIReadOnlyListModel<string>>(@"{ ""Value"": """" }", _jsonOptions);
  54. Assert.Equal(desiredValue.Value, value?.Value);
  55. }
  56. [Fact]
  57. public void Deserialize_String_Valid_Success()
  58. {
  59. var desiredValue = new GenericBodyArrayModel<string>
  60. {
  61. Value = ["a", "b", "c"]
  62. };
  63. var value = JsonSerializer.Deserialize<GenericBodyArrayModel<string>>(@"{ ""Value"": ""a,b,c"" }", _jsonOptions);
  64. Assert.Equal(desiredValue.Value, value?.Value);
  65. }
  66. [Fact]
  67. public void Deserialize_StringList_Valid_Success()
  68. {
  69. var desiredValue = new GenericBodyListModel<string>
  70. {
  71. Value = ["a", "b", "c"]
  72. };
  73. Assert.Throws<InvalidOperationException>(() => JsonSerializer.Deserialize<GenericBodyListModel<string>>(@"{ ""Value"": ""a,b,c"" }", _jsonOptions));
  74. }
  75. [Fact]
  76. public void Deserialize_String_Space_Valid_Success()
  77. {
  78. var desiredValue = new GenericBodyArrayModel<string>
  79. {
  80. Value = ["a", "b", "c"]
  81. };
  82. var value = JsonSerializer.Deserialize<GenericBodyArrayModel<string>>(@"{ ""Value"": ""a, b, c"" }", _jsonOptions);
  83. Assert.Equal(desiredValue.Value, value?.Value);
  84. }
  85. [Fact]
  86. public void Deserialize_GenericCommandType_Valid_Success()
  87. {
  88. var desiredValue = new GenericBodyArrayModel<GeneralCommandType>
  89. {
  90. Value = [GeneralCommandType.MoveUp, GeneralCommandType.MoveDown]
  91. };
  92. var value = JsonSerializer.Deserialize<GenericBodyArrayModel<GeneralCommandType>>(@"{ ""Value"": ""MoveUp,MoveDown"" }", _jsonOptions);
  93. Assert.Equal(desiredValue.Value, value?.Value);
  94. }
  95. [Fact]
  96. public void Deserialize_GenericCommandType_EmptyEntry_Success()
  97. {
  98. var desiredValue = new GenericBodyArrayModel<GeneralCommandType>
  99. {
  100. Value = [GeneralCommandType.MoveUp, GeneralCommandType.MoveDown]
  101. };
  102. var value = JsonSerializer.Deserialize<GenericBodyArrayModel<GeneralCommandType>>(@"{ ""Value"": ""MoveUp,,MoveDown"" }", _jsonOptions);
  103. Assert.Equal(desiredValue.Value, value?.Value);
  104. }
  105. [Fact]
  106. public void Deserialize_GenericCommandType_Invalid_Success()
  107. {
  108. var desiredValue = new GenericBodyArrayModel<GeneralCommandType>
  109. {
  110. Value = [GeneralCommandType.MoveUp, GeneralCommandType.MoveDown]
  111. };
  112. var value = JsonSerializer.Deserialize<GenericBodyArrayModel<GeneralCommandType>>(@"{ ""Value"": ""MoveUp,TotallyNotAValidCommand,MoveDown"" }", _jsonOptions);
  113. Assert.Equal(desiredValue.Value, value?.Value);
  114. }
  115. [Fact]
  116. public void Deserialize_GenericCommandType_Space_Valid_Success()
  117. {
  118. var desiredValue = new GenericBodyArrayModel<GeneralCommandType>
  119. {
  120. Value = [GeneralCommandType.MoveUp, GeneralCommandType.MoveDown]
  121. };
  122. var value = JsonSerializer.Deserialize<GenericBodyArrayModel<GeneralCommandType>>(@"{ ""Value"": ""MoveUp, MoveDown"" }", _jsonOptions);
  123. Assert.Equal(desiredValue.Value, value?.Value);
  124. }
  125. [Fact]
  126. public void Deserialize_String_Array_Valid_Success()
  127. {
  128. var desiredValue = new GenericBodyArrayModel<string>
  129. {
  130. Value = ["a", "b", "c"]
  131. };
  132. var value = JsonSerializer.Deserialize<GenericBodyArrayModel<string>>(@"{ ""Value"": [""a"",""b"",""c""] }", _jsonOptions);
  133. Assert.Equal(desiredValue.Value, value?.Value);
  134. }
  135. [Fact]
  136. public void Deserialize_GenericCommandType_Array_Valid_Success()
  137. {
  138. var desiredValue = new GenericBodyArrayModel<GeneralCommandType>
  139. {
  140. Value = [GeneralCommandType.MoveUp, GeneralCommandType.MoveDown]
  141. };
  142. var value = JsonSerializer.Deserialize<GenericBodyArrayModel<GeneralCommandType>>(@"{ ""Value"": [""MoveUp"", ""MoveDown""] }", _jsonOptions);
  143. Assert.Equal(desiredValue.Value, value?.Value);
  144. }
  145. [Fact]
  146. public void Serialize_GenericCommandType_ReadOnlyArray_Valid_Success()
  147. {
  148. var valueToSerialize = new GenericBodyIReadOnlyCollectionModel<GeneralCommandType>
  149. {
  150. Value = new[] { GeneralCommandType.MoveUp, GeneralCommandType.MoveDown }.AsReadOnly()
  151. };
  152. string value = JsonSerializer.Serialize<GenericBodyIReadOnlyCollectionModel<GeneralCommandType>>(valueToSerialize, _jsonOptions);
  153. Assert.Equal(@"{""Value"":[""MoveUp"",""MoveDown""]}", value);
  154. }
  155. [Fact]
  156. public void Serialize_GenericCommandType_ImmutableArrayArray_Valid_Success()
  157. {
  158. var valueToSerialize = new GenericBodyIReadOnlyCollectionModel<GeneralCommandType>
  159. {
  160. Value = ImmutableArray.Create(new[] { GeneralCommandType.MoveUp, GeneralCommandType.MoveDown })
  161. };
  162. string value = JsonSerializer.Serialize<GenericBodyIReadOnlyCollectionModel<GeneralCommandType>>(valueToSerialize, _jsonOptions);
  163. Assert.Equal(@"{""Value"":[""MoveUp"",""MoveDown""]}", value);
  164. }
  165. [Fact]
  166. public void Serialize_GenericCommandType_List_Valid_Success()
  167. {
  168. var valueToSerialize = new GenericBodyIReadOnlyListModel<GeneralCommandType>
  169. {
  170. Value = new List<GeneralCommandType> { GeneralCommandType.MoveUp, GeneralCommandType.MoveDown }
  171. };
  172. string value = JsonSerializer.Serialize<GenericBodyIReadOnlyListModel<GeneralCommandType>>(valueToSerialize, _jsonOptions);
  173. Assert.Equal(@"{""Value"":[""MoveUp"",""MoveDown""]}", value);
  174. }
  175. }
  176. }