UserLibraryControllerTests.cs 5.1 KB

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