QuickConnectManagerTests.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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. => Assert.False(_quickConnectManager.IsEnabled);
  47. [Theory]
  48. [InlineData("", "DeviceId", "Client", "1.0.0")]
  49. [InlineData("Device", "", "Client", "1.0.0")]
  50. [InlineData("Device", "DeviceId", "", "1.0.0")]
  51. [InlineData("Device", "DeviceId", "Client", "")]
  52. public void TryConnect_InvalidAuthorizationInfo_ThrowsArgumentException(string device, string deviceId, string client, string version)
  53. => Assert.Throws<ArgumentException>(() => _quickConnectManager.TryConnect(
  54. new AuthorizationInfo
  55. {
  56. Device = device,
  57. DeviceId = deviceId,
  58. Client = client,
  59. Version = version
  60. }));
  61. [Fact]
  62. public void TryConnect_QuickConnectUnavailable_ThrowsAuthenticationException()
  63. => Assert.Throws<AuthenticationException>(() => _quickConnectManager.TryConnect(_quickConnectAuthInfo));
  64. [Fact]
  65. public void CheckRequestStatus_QuickConnectUnavailable_ThrowsAuthenticationException()
  66. => Assert.Throws<AuthenticationException>(() => _quickConnectManager.CheckRequestStatus(string.Empty));
  67. [Fact]
  68. public void AuthorizeRequest_QuickConnectUnavailable_ThrowsAuthenticationException()
  69. => Assert.ThrowsAsync<AuthenticationException>(() => _quickConnectManager.AuthorizeRequest(Guid.Empty, string.Empty));
  70. [Fact]
  71. public void GetAuthorizedRequest_QuickConnectUnavailable_ThrowsAuthenticationException()
  72. => Assert.Throws<AuthenticationException>(() => _quickConnectManager.GetAuthorizedRequest(string.Empty));
  73. [Fact]
  74. public void IsEnabled_QuickConnectAvailable_True()
  75. {
  76. _config.QuickConnectAvailable = true;
  77. Assert.True(_quickConnectManager.IsEnabled);
  78. }
  79. [Fact]
  80. public void CheckRequestStatus_QuickConnectAvailable_Success()
  81. {
  82. _config.QuickConnectAvailable = true;
  83. var res1 = _quickConnectManager.TryConnect(_quickConnectAuthInfo);
  84. var res2 = _quickConnectManager.CheckRequestStatus(res1.Secret);
  85. Assert.Equal(res1, res2);
  86. }
  87. [Fact]
  88. public void CheckRequestStatus_UnknownSecret_ThrowsResourceNotFoundException()
  89. {
  90. _config.QuickConnectAvailable = true;
  91. Assert.Throws<ResourceNotFoundException>(() => _quickConnectManager.CheckRequestStatus("Unknown secret"));
  92. }
  93. [Fact]
  94. public void GetAuthorizedRequest_UnknownSecret_ThrowsResourceNotFoundException()
  95. {
  96. _config.QuickConnectAvailable = true;
  97. Assert.Throws<ResourceNotFoundException>(() => _quickConnectManager.GetAuthorizedRequest("Unknown secret"));
  98. }
  99. [Fact]
  100. public async Task AuthorizeRequest_QuickConnectAvailable_Success()
  101. {
  102. _config.QuickConnectAvailable = true;
  103. var res = _quickConnectManager.TryConnect(_quickConnectAuthInfo);
  104. Assert.True(await _quickConnectManager.AuthorizeRequest(Guid.Empty, res.Code));
  105. }
  106. }
  107. }