QuickConnectManagerTests.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using AutoFixture;
  5. using AutoFixture.AutoMoq;
  6. using Emby.Server.Implementations.QuickConnect;
  7. using MediaBrowser.Common.Extensions;
  8. using MediaBrowser.Controller.Authentication;
  9. using MediaBrowser.Controller.Configuration;
  10. using MediaBrowser.Controller.Net;
  11. using MediaBrowser.Model.Configuration;
  12. using Moq;
  13. using Xunit;
  14. namespace Jellyfin.Server.Implementations.Tests.QuickConnect
  15. {
  16. public class QuickConnectManagerTests
  17. {
  18. private static readonly AuthorizationInfo _quickConnectAuthInfo = new AuthorizationInfo
  19. {
  20. Device = "Device",
  21. DeviceId = "DeviceId",
  22. Client = "Client",
  23. Version = "1.0.0"
  24. };
  25. private readonly Fixture _fixture;
  26. private readonly ServerConfiguration _config;
  27. private readonly QuickConnectManager _quickConnectManager;
  28. public QuickConnectManagerTests()
  29. {
  30. _config = new ServerConfiguration();
  31. var configManager = new Mock<IServerConfigurationManager>();
  32. configManager.Setup(x => x.Configuration).Returns(_config);
  33. _fixture = new Fixture();
  34. _fixture.Customize(new AutoMoqCustomization
  35. {
  36. ConfigureMembers = true
  37. }).Inject(configManager.Object);
  38. // User object contains circular references.
  39. _fixture.Behaviors.OfType<ThrowingRecursionBehavior>().ToList()
  40. .ForEach(b => _fixture.Behaviors.Remove(b));
  41. _fixture.Behaviors.Add(new OmitOnRecursionBehavior());
  42. _quickConnectManager = _fixture.Create<QuickConnectManager>();
  43. }
  44. [Fact]
  45. public void IsEnabled_QuickConnectUnavailable_False()
  46. {
  47. _config.QuickConnectAvailable = false;
  48. Assert.False(_quickConnectManager.IsEnabled);
  49. }
  50. [Theory]
  51. [InlineData("", "DeviceId", "Client", "1.0.0")]
  52. [InlineData("Device", "", "Client", "1.0.0")]
  53. [InlineData("Device", "DeviceId", "", "1.0.0")]
  54. [InlineData("Device", "DeviceId", "Client", "")]
  55. public void TryConnect_InvalidAuthorizationInfo_ThrowsArgumentException(string device, string deviceId, string client, string version)
  56. => Assert.Throws<ArgumentException>(() => _quickConnectManager.TryConnect(
  57. new AuthorizationInfo
  58. {
  59. Device = device,
  60. DeviceId = deviceId,
  61. Client = client,
  62. Version = version
  63. }));
  64. [Fact]
  65. public void TryConnect_QuickConnectUnavailable_ThrowsAuthenticationException()
  66. {
  67. _config.QuickConnectAvailable = false;
  68. Assert.Throws<AuthenticationException>(() => _quickConnectManager.TryConnect(_quickConnectAuthInfo));
  69. }
  70. [Fact]
  71. public void CheckRequestStatus_QuickConnectUnavailable_ThrowsAuthenticationException()
  72. {
  73. _config.QuickConnectAvailable = false;
  74. Assert.Throws<AuthenticationException>(() => _quickConnectManager.CheckRequestStatus(string.Empty));
  75. }
  76. [Fact]
  77. public async Task AuthorizeRequest_QuickConnectUnavailable_ThrowsAuthenticationException()
  78. {
  79. _config.QuickConnectAvailable = false;
  80. await Assert.ThrowsAsync<AuthenticationException>(() => _quickConnectManager.AuthorizeRequest(Guid.Empty, string.Empty));
  81. }
  82. [Fact]
  83. public void GetAuthorizedRequest_QuickConnectUnavailable_ThrowsAuthenticationException()
  84. {
  85. _config.QuickConnectAvailable = false;
  86. Assert.Throws<AuthenticationException>(() => _quickConnectManager.GetAuthorizedRequest(string.Empty));
  87. }
  88. [Fact]
  89. public void IsEnabled_QuickConnectAvailable_True()
  90. {
  91. _config.QuickConnectAvailable = true;
  92. Assert.True(_quickConnectManager.IsEnabled);
  93. }
  94. [Fact]
  95. public void CheckRequestStatus_QuickConnectAvailable_Success()
  96. {
  97. _config.QuickConnectAvailable = true;
  98. var res1 = _quickConnectManager.TryConnect(_quickConnectAuthInfo);
  99. var res2 = _quickConnectManager.CheckRequestStatus(res1.Secret);
  100. Assert.Equal(res1, res2);
  101. }
  102. [Fact]
  103. public void CheckRequestStatus_UnknownSecret_ThrowsResourceNotFoundException()
  104. {
  105. _config.QuickConnectAvailable = true;
  106. Assert.Throws<ResourceNotFoundException>(() => _quickConnectManager.CheckRequestStatus("Unknown secret"));
  107. }
  108. [Fact]
  109. public void GetAuthorizedRequest_UnknownSecret_ThrowsResourceNotFoundException()
  110. {
  111. _config.QuickConnectAvailable = true;
  112. Assert.Throws<ResourceNotFoundException>(() => _quickConnectManager.GetAuthorizedRequest("Unknown secret"));
  113. }
  114. [Fact]
  115. public async Task AuthorizeRequest_QuickConnectAvailable_Success()
  116. {
  117. _config.QuickConnectAvailable = true;
  118. var res = _quickConnectManager.TryConnect(_quickConnectAuthInfo);
  119. Assert.True(await _quickConnectManager.AuthorizeRequest(Guid.Empty, res.Code));
  120. }
  121. }
  122. }