UserControllerTests.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel.DataAnnotations;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using AutoFixture.Xunit2;
  7. using Jellyfin.Api.Controllers;
  8. using Jellyfin.Database.Implementations.Entities;
  9. using MediaBrowser.Common.Net;
  10. using MediaBrowser.Controller.Configuration;
  11. using MediaBrowser.Controller.Devices;
  12. using MediaBrowser.Controller.Library;
  13. using MediaBrowser.Controller.Net;
  14. using MediaBrowser.Controller.Playlists;
  15. using MediaBrowser.Controller.QuickConnect;
  16. using MediaBrowser.Controller.Session;
  17. using MediaBrowser.Model.Users;
  18. using Microsoft.AspNetCore.Mvc;
  19. using Microsoft.Extensions.Logging;
  20. using Moq;
  21. using Nikse.SubtitleEdit.Core.Common;
  22. using Xunit;
  23. namespace Jellyfin.Api.Tests.Controllers;
  24. public class UserControllerTests
  25. {
  26. private readonly UserController _subject;
  27. private readonly Mock<IUserManager> _mockUserManager;
  28. private readonly Mock<ISessionManager> _mockSessionManager;
  29. private readonly Mock<INetworkManager> _mockNetworkManager;
  30. private readonly Mock<IDeviceManager> _mockDeviceManager;
  31. private readonly Mock<IAuthorizationContext> _mockAuthorizationContext;
  32. private readonly Mock<IServerConfigurationManager> _mockServerConfigurationManager;
  33. private readonly Mock<ILogger<UserController>> _mockLogger;
  34. private readonly Mock<IQuickConnect> _mockQuickConnect;
  35. private readonly Mock<IPlaylistManager> _mockPlaylistManager;
  36. public UserControllerTests()
  37. {
  38. _mockUserManager = new Mock<IUserManager>();
  39. _mockSessionManager = new Mock<ISessionManager>();
  40. _mockNetworkManager = new Mock<INetworkManager>();
  41. _mockDeviceManager = new Mock<IDeviceManager>();
  42. _mockAuthorizationContext = new Mock<IAuthorizationContext>();
  43. _mockServerConfigurationManager = new Mock<IServerConfigurationManager>();
  44. _mockLogger = new Mock<ILogger<UserController>>();
  45. _mockQuickConnect = new Mock<IQuickConnect>();
  46. _mockPlaylistManager = new Mock<IPlaylistManager>();
  47. _subject = new UserController(
  48. _mockUserManager.Object,
  49. _mockSessionManager.Object,
  50. _mockNetworkManager.Object,
  51. _mockDeviceManager.Object,
  52. _mockAuthorizationContext.Object,
  53. _mockServerConfigurationManager.Object,
  54. _mockLogger.Object,
  55. _mockQuickConnect.Object,
  56. _mockPlaylistManager.Object);
  57. }
  58. [Theory]
  59. [AutoData]
  60. public async Task UpdateUserPolicy_WhenUserNotFound_ReturnsNotFound(Guid userId, UserPolicy userPolicy)
  61. {
  62. User? nullUser = null;
  63. _mockUserManager.
  64. Setup(m => m.GetUserById(userId))
  65. .Returns(nullUser);
  66. Assert.IsType<NotFoundResult>(await _subject.UpdateUserPolicy(userId, userPolicy));
  67. }
  68. [Theory]
  69. [InlineAutoData(null)]
  70. [InlineAutoData("")]
  71. [InlineAutoData(" ")]
  72. public void UpdateUserPolicy_WhenPasswordResetProviderIdNotSupplied_ReturnsBadRequest(string? passwordResetProviderId)
  73. {
  74. var userPolicy = new UserPolicy
  75. {
  76. PasswordResetProviderId = passwordResetProviderId,
  77. AuthenticationProviderId = "AuthenticationProviderId"
  78. };
  79. Assert.Contains(
  80. Validate(userPolicy), v =>
  81. v.MemberNames.Contains("PasswordResetProviderId") &&
  82. v.ErrorMessage is not null &&
  83. v.ErrorMessage.Contains("required", StringComparison.CurrentCultureIgnoreCase));
  84. }
  85. [Theory]
  86. [InlineAutoData(null)]
  87. [InlineAutoData("")]
  88. [InlineAutoData(" ")]
  89. public void UpdateUserPolicy_WhenAuthenticationProviderIdNotSupplied_ReturnsBadRequest(string? authenticationProviderId)
  90. {
  91. var userPolicy = new UserPolicy
  92. {
  93. AuthenticationProviderId = authenticationProviderId,
  94. PasswordResetProviderId = "PasswordResetProviderId"
  95. };
  96. Assert.Contains(Validate(userPolicy), v =>
  97. v.MemberNames.Contains("AuthenticationProviderId") &&
  98. v.ErrorMessage is not null &&
  99. v.ErrorMessage.Contains("required", StringComparison.CurrentCultureIgnoreCase));
  100. }
  101. private List<ValidationResult> Validate(object model)
  102. {
  103. var result = new List<ValidationResult>();
  104. var context = new ValidationContext(model, null, null);
  105. Validator.TryValidateObject(model, context, result, true);
  106. return result;
  107. }
  108. }