InstallationManagerTests.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. using System.Net.Http;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. using AutoFixture;
  8. using AutoFixture.AutoMoq;
  9. using Emby.Server.Implementations.Updates;
  10. using MediaBrowser.Model.Updates;
  11. using Moq;
  12. using Moq.Protected;
  13. using Xunit;
  14. namespace Jellyfin.Server.Implementations.Tests.Updates
  15. {
  16. public class InstallationManagerTests
  17. {
  18. private readonly Fixture _fixture;
  19. private readonly InstallationManager _installationManager;
  20. public InstallationManagerTests()
  21. {
  22. var messageHandler = new Mock<HttpMessageHandler>();
  23. messageHandler.Protected()
  24. .Setup<Task<HttpResponseMessage>>("SendAsync", ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>())
  25. .Returns<HttpRequestMessage, CancellationToken>(
  26. (m, _) =>
  27. {
  28. return Task.FromResult(new HttpResponseMessage()
  29. {
  30. Content = new StreamContent(File.OpenRead("Test Data/Updates/" + m.RequestUri?.Segments[^1]))
  31. });
  32. });
  33. var http = new Mock<IHttpClientFactory>();
  34. http.Setup(x => x.CreateClient(It.IsAny<string>()))
  35. .Returns(new HttpClient(messageHandler.Object));
  36. _fixture = new Fixture();
  37. _fixture.Customize(new AutoMoqCustomization
  38. {
  39. ConfigureMembers = true
  40. });
  41. _fixture.Inject(http);
  42. _installationManager = _fixture.Create<InstallationManager>();
  43. }
  44. [Fact]
  45. public async Task GetPackages_Valid_Success()
  46. {
  47. PackageInfo[] packages = await _installationManager.GetPackages(
  48. "Jellyfin Stable",
  49. "https://repo.jellyfin.org/files/plugin/manifest.json",
  50. false);
  51. Assert.Equal(25, packages.Length);
  52. }
  53. [Fact]
  54. public async Task FilterPackages_NameOnly_Success()
  55. {
  56. PackageInfo[] packages = await _installationManager.GetPackages(
  57. "Jellyfin Stable",
  58. "https://repo.jellyfin.org/files/plugin/manifest.json",
  59. false);
  60. packages = _installationManager.FilterPackages(packages, "Anime").ToArray();
  61. Assert.Single(packages);
  62. }
  63. [Fact]
  64. public async Task FilterPackages_GuidOnly_Success()
  65. {
  66. PackageInfo[] packages = await _installationManager.GetPackages(
  67. "Jellyfin Stable",
  68. "https://repo.jellyfin.org/files/plugin/manifest.json",
  69. false);
  70. packages = _installationManager.FilterPackages(packages, id: new Guid("a4df60c5-6ab4-412a-8f79-2cab93fb2bc5")).ToArray();
  71. Assert.Single(packages);
  72. }
  73. [Fact]
  74. public async Task InstallPackage_InvalidChecksum_ThrowsInvalidDataException()
  75. {
  76. var packageInfo = new InstallationInfo()
  77. {
  78. Name = "Test",
  79. SourceUrl = "https://repo.jellyfin.org/releases/plugin/empty/empty.zip",
  80. Checksum = "InvalidChecksum"
  81. };
  82. await Assert.ThrowsAsync<InvalidDataException>(() => _installationManager.InstallPackage(packageInfo, CancellationToken.None));
  83. }
  84. [Fact]
  85. public async Task InstallPackage_Valid_Success()
  86. {
  87. var packageInfo = new InstallationInfo()
  88. {
  89. Name = "Test",
  90. SourceUrl = "https://repo.jellyfin.org/releases/plugin/empty/empty.zip",
  91. Checksum = "11b5b2f1a9ebc4f66d6ef19018543361"
  92. };
  93. var ex = await Record.ExceptionAsync(() => _installationManager.InstallPackage(packageInfo, CancellationToken.None));
  94. Assert.Null(ex);
  95. }
  96. }
  97. }