UserLibraryControllerTests.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using System;
  2. using System.Globalization;
  3. using System.Net;
  4. using System.Text.Json;
  5. using System.Threading.Tasks;
  6. using Jellyfin.Extensions.Json;
  7. using MediaBrowser.Model.Dto;
  8. using MediaBrowser.Model.Querying;
  9. using Xunit;
  10. namespace Jellyfin.Server.Integration.Tests.Controllers;
  11. public sealed class UserLibraryControllerTests : IClassFixture<JellyfinApplicationFactory>
  12. {
  13. private readonly JellyfinApplicationFactory _factory;
  14. private readonly JsonSerializerOptions _jsonOptions = JsonDefaults.Options;
  15. private static string? _accessToken;
  16. public UserLibraryControllerTests(JellyfinApplicationFactory factory)
  17. {
  18. _factory = factory;
  19. }
  20. [Fact]
  21. public async Task GetRootFolder_NonExistenUserId_NotFound()
  22. {
  23. var client = _factory.CreateClient();
  24. client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
  25. var response = await client.GetAsync($"Users/{Guid.NewGuid()}/Items/Root").ConfigureAwait(false);
  26. Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
  27. }
  28. [Fact]
  29. public async Task GetRootFolder_UserId_Valid()
  30. {
  31. var client = _factory.CreateClient();
  32. client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
  33. _ = await AuthHelper.GetRootFolderDtoAsync(client).ConfigureAwait(false);
  34. }
  35. [Theory]
  36. [InlineData("Users/{0}/Items/{1}")]
  37. [InlineData("Users/{0}/Items/{1}/Intros")]
  38. [InlineData("Users/{0}/Items/{1}/LocalTrailers")]
  39. [InlineData("Users/{0}/Items/{1}/SpecialFeatures")]
  40. [InlineData("Users/{0}/Items/{1}/Lyrics")]
  41. public async Task GetItem_NonExistenUserId_NotFound(string format)
  42. {
  43. var client = _factory.CreateClient();
  44. client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
  45. var rootFolderDto = await AuthHelper.GetRootFolderDtoAsync(client).ConfigureAwait(false);
  46. var response = await client.GetAsync(string.Format(CultureInfo.InvariantCulture, format, Guid.NewGuid(), rootFolderDto.Id)).ConfigureAwait(false);
  47. Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
  48. }
  49. [Theory]
  50. [InlineData("Users/{0}/Items/{1}")]
  51. [InlineData("Users/{0}/Items/{1}/Intros")]
  52. [InlineData("Users/{0}/Items/{1}/LocalTrailers")]
  53. [InlineData("Users/{0}/Items/{1}/SpecialFeatures")]
  54. [InlineData("Users/{0}/Items/{1}/Lyrics")]
  55. public async Task GetItem_NonExistentItemId_NotFound(string format)
  56. {
  57. var client = _factory.CreateClient();
  58. client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
  59. var userDto = await AuthHelper.GetUserDtoAsync(client).ConfigureAwait(false);
  60. var response = await client.GetAsync(string.Format(CultureInfo.InvariantCulture, format, userDto.Id, Guid.NewGuid())).ConfigureAwait(false);
  61. Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
  62. }
  63. [Fact]
  64. public async Task GetItem_UserIdAndItemId_Valid()
  65. {
  66. var client = _factory.CreateClient();
  67. client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
  68. var userDto = await AuthHelper.GetUserDtoAsync(client).ConfigureAwait(false);
  69. var rootFolderDto = await AuthHelper.GetRootFolderDtoAsync(client, userDto.Id).ConfigureAwait(false);
  70. var response = await client.GetAsync($"Users/{userDto.Id}/Items/{rootFolderDto.Id}").ConfigureAwait(false);
  71. Assert.Equal(HttpStatusCode.OK, response.StatusCode);
  72. var rootDto = await JsonSerializer.DeserializeAsync<BaseItemDto>(
  73. await response.Content.ReadAsStreamAsync().ConfigureAwait(false),
  74. _jsonOptions).ConfigureAwait(false);
  75. Assert.NotNull(rootDto);
  76. }
  77. [Fact]
  78. public async Task GetIntros_UserIdAndItemId_Valid()
  79. {
  80. var client = _factory.CreateClient();
  81. client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
  82. var userDto = await AuthHelper.GetUserDtoAsync(client).ConfigureAwait(false);
  83. var rootFolderDto = await AuthHelper.GetRootFolderDtoAsync(client, userDto.Id).ConfigureAwait(false);
  84. var response = await client.GetAsync($"Users/{userDto.Id}/Items/{rootFolderDto.Id}/Intros").ConfigureAwait(false);
  85. Assert.Equal(HttpStatusCode.OK, response.StatusCode);
  86. var rootDto = await JsonSerializer.DeserializeAsync<QueryResult<BaseItemDto>>(
  87. await response.Content.ReadAsStreamAsync().ConfigureAwait(false),
  88. _jsonOptions).ConfigureAwait(false);
  89. Assert.NotNull(rootDto);
  90. }
  91. [Theory]
  92. [InlineData("Users/{0}/Items/{1}/LocalTrailers")]
  93. [InlineData("Users/{0}/Items/{1}/SpecialFeatures")]
  94. public async Task LocalTrailersAndSpecialFeatures_UserIdAndItemId_Valid(string format)
  95. {
  96. var client = _factory.CreateClient();
  97. client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
  98. var userDto = await AuthHelper.GetUserDtoAsync(client).ConfigureAwait(false);
  99. var rootFolderDto = await AuthHelper.GetRootFolderDtoAsync(client, userDto.Id).ConfigureAwait(false);
  100. var response = await client.GetAsync(string.Format(CultureInfo.InvariantCulture, format, userDto.Id, rootFolderDto.Id)).ConfigureAwait(false);
  101. Assert.Equal(HttpStatusCode.OK, response.StatusCode);
  102. var rootDto = await JsonSerializer.DeserializeAsync<BaseItemDto[]>(
  103. await response.Content.ReadAsStreamAsync().ConfigureAwait(false),
  104. _jsonOptions).ConfigureAwait(false);
  105. Assert.NotNull(rootDto);
  106. }
  107. }