TestHelpers.cs 3.1 KB

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