RequestHelpersTests.cs 4.5 KB

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