TestHelpers.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Net;
  5. using System.Security.Claims;
  6. using Jellyfin.Api.Constants;
  7. using Jellyfin.Data.Entities;
  8. using Jellyfin.Data.Enums;
  9. using Jellyfin.Server.Implementations.Users;
  10. using MediaBrowser.Common.Configuration;
  11. using MediaBrowser.Controller.Library;
  12. using MediaBrowser.Model.Configuration;
  13. using Microsoft.AspNetCore.Http;
  14. using Moq;
  15. using AccessSchedule = Jellyfin.Data.Entities.AccessSchedule;
  16. namespace Jellyfin.Api.Tests
  17. {
  18. public static class TestHelpers
  19. {
  20. public static ClaimsPrincipal SetupUser(
  21. Mock<IUserManager> userManagerMock,
  22. Mock<IHttpContextAccessor> httpContextAccessorMock,
  23. string role,
  24. IEnumerable<AccessSchedule>? accessSchedules = null)
  25. {
  26. var user = new User(
  27. "jellyfin",
  28. typeof(DefaultAuthenticationProvider).FullName!,
  29. typeof(DefaultPasswordResetProvider).FullName!);
  30. user.AddDefaultPermissions();
  31. user.AddDefaultPreferences();
  32. // Set administrator flag.
  33. user.SetPermission(PermissionKind.IsAdministrator, role.Equals(UserRoles.Administrator, StringComparison.OrdinalIgnoreCase));
  34. // Add access schedules if set.
  35. if (accessSchedules != null)
  36. {
  37. foreach (var accessSchedule in accessSchedules)
  38. {
  39. user.AccessSchedules.Add(accessSchedule);
  40. }
  41. }
  42. var claims = new[]
  43. {
  44. new Claim(ClaimTypes.Role, role),
  45. new Claim(ClaimTypes.Name, "jellyfin"),
  46. new Claim(InternalClaimTypes.UserId, Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture)),
  47. new Claim(InternalClaimTypes.DeviceId, Guid.Empty.ToString("N", CultureInfo.InvariantCulture)),
  48. new Claim(InternalClaimTypes.Device, "test"),
  49. new Claim(InternalClaimTypes.Client, "test"),
  50. new Claim(InternalClaimTypes.Version, "test"),
  51. new Claim(InternalClaimTypes.Token, "test"),
  52. };
  53. var identity = new ClaimsIdentity(claims);
  54. userManagerMock
  55. .Setup(u => u.GetUserById(It.IsAny<Guid>()))
  56. .Returns(user);
  57. httpContextAccessorMock
  58. .Setup(h => h.HttpContext!.Connection.RemoteIpAddress)
  59. .Returns(new IPAddress(0));
  60. return new ClaimsPrincipal(identity);
  61. }
  62. public static void SetupConfigurationManager(in Mock<IConfigurationManager> configurationManagerMock, bool startupWizardCompleted)
  63. {
  64. var commonConfiguration = new BaseApplicationConfiguration
  65. {
  66. IsStartupWizardCompleted = startupWizardCompleted
  67. };
  68. configurationManagerMock
  69. .Setup(c => c.CommonConfiguration)
  70. .Returns(commonConfiguration);
  71. }
  72. }
  73. }