RequestHelpersTests.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Security.Claims;
  5. using Jellyfin.Api.Constants;
  6. using Jellyfin.Api.Helpers;
  7. using Jellyfin.Data.Enums;
  8. using Jellyfin.Database.Implementations.Enums;
  9. using MediaBrowser.Controller.Net;
  10. using Xunit;
  11. namespace Jellyfin.Api.Tests.Helpers
  12. {
  13. public static class RequestHelpersTests
  14. {
  15. [Theory]
  16. [MemberData(nameof(GetOrderBy_Success_TestData))]
  17. public static void GetOrderBy_Success(IReadOnlyList<ItemSortBy> sortBy, IReadOnlyList<SortOrder> requestedSortOrder, (ItemSortBy, SortOrder)[] expected)
  18. {
  19. Assert.Equal(expected, RequestHelpers.GetOrderBy(sortBy, requestedSortOrder));
  20. }
  21. [Fact]
  22. public static void GetUserId_IsAdmin()
  23. {
  24. Guid? requestUserId = Guid.NewGuid();
  25. Guid? authUserId = Guid.NewGuid();
  26. var claims = new[]
  27. {
  28. new Claim(InternalClaimTypes.UserId, authUserId.Value.ToString("N", CultureInfo.InvariantCulture)),
  29. new Claim(InternalClaimTypes.IsApiKey, bool.FalseString),
  30. new Claim(ClaimTypes.Role, UserRoles.Administrator)
  31. };
  32. var identity = new ClaimsIdentity(claims, string.Empty);
  33. var principal = new ClaimsPrincipal(identity);
  34. var userId = RequestHelpers.GetUserId(principal, requestUserId);
  35. Assert.Equal(requestUserId, userId);
  36. }
  37. [Fact]
  38. public static void GetUserId_IsApiKey_EmptyGuid()
  39. {
  40. Guid? requestUserId = Guid.Empty;
  41. var claims = new[]
  42. {
  43. new Claim(InternalClaimTypes.IsApiKey, bool.TrueString)
  44. };
  45. var identity = new ClaimsIdentity(claims, string.Empty);
  46. var principal = new ClaimsPrincipal(identity);
  47. var userId = RequestHelpers.GetUserId(principal, requestUserId);
  48. Assert.Equal(Guid.Empty, userId);
  49. }
  50. [Fact]
  51. public static void GetUserId_IsApiKey_Null()
  52. {
  53. Guid? requestUserId = null;
  54. var claims = new[]
  55. {
  56. new Claim(InternalClaimTypes.IsApiKey, bool.TrueString)
  57. };
  58. var identity = new ClaimsIdentity(claims, string.Empty);
  59. var principal = new ClaimsPrincipal(identity);
  60. var userId = RequestHelpers.GetUserId(principal, requestUserId);
  61. Assert.Equal(Guid.Empty, userId);
  62. }
  63. [Fact]
  64. public static void GetUserId_IsUser()
  65. {
  66. Guid? requestUserId = Guid.NewGuid();
  67. Guid? authUserId = Guid.NewGuid();
  68. var claims = new[]
  69. {
  70. new Claim(InternalClaimTypes.UserId, authUserId.Value.ToString("N", CultureInfo.InvariantCulture)),
  71. new Claim(InternalClaimTypes.IsApiKey, bool.FalseString),
  72. new Claim(ClaimTypes.Role, UserRoles.User)
  73. };
  74. var identity = new ClaimsIdentity(claims, string.Empty);
  75. var principal = new ClaimsPrincipal(identity);
  76. Assert.Throws<SecurityException>(() => RequestHelpers.GetUserId(principal, requestUserId));
  77. }
  78. public static TheoryData<IReadOnlyList<ItemSortBy>, IReadOnlyList<SortOrder>, (ItemSortBy, SortOrder)[]> GetOrderBy_Success_TestData()
  79. {
  80. var data = new TheoryData<IReadOnlyList<ItemSortBy>, IReadOnlyList<SortOrder>, (ItemSortBy, SortOrder)[]>();
  81. data.Add(
  82. Array.Empty<ItemSortBy>(),
  83. Array.Empty<SortOrder>(),
  84. Array.Empty<(ItemSortBy, SortOrder)>());
  85. data.Add(
  86. new[]
  87. {
  88. ItemSortBy.IsFavoriteOrLiked,
  89. ItemSortBy.Random
  90. },
  91. Array.Empty<SortOrder>(),
  92. new (ItemSortBy, SortOrder)[]
  93. {
  94. (ItemSortBy.IsFavoriteOrLiked, SortOrder.Ascending),
  95. (ItemSortBy.Random, SortOrder.Ascending),
  96. });
  97. data.Add(
  98. new[]
  99. {
  100. ItemSortBy.SortName,
  101. ItemSortBy.ProductionYear
  102. },
  103. new[]
  104. {
  105. SortOrder.Descending
  106. },
  107. new (ItemSortBy, SortOrder)[]
  108. {
  109. (ItemSortBy.SortName, SortOrder.Descending),
  110. (ItemSortBy.ProductionYear, SortOrder.Descending),
  111. });
  112. return data;
  113. }
  114. }
  115. }