MediaStructureControllerTests.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. using System;
  2. using System.Net;
  3. using System.Net.Http;
  4. using System.Net.Http.Headers;
  5. using System.Net.Mime;
  6. using System.Text.Json;
  7. using System.Threading.Tasks;
  8. using Jellyfin.Api.Models.LibraryStructureDto;
  9. using Jellyfin.Extensions.Json;
  10. using Xunit;
  11. namespace Jellyfin.Server.Integration.Tests.Controllers
  12. {
  13. public sealed class MediaStructureControllerTests : IClassFixture<JellyfinApplicationFactory>
  14. {
  15. private readonly JellyfinApplicationFactory _factory;
  16. private readonly JsonSerializerOptions _jsonOptions = JsonDefaults.Options;
  17. private static string? _accessToken;
  18. public MediaStructureControllerTests(JellyfinApplicationFactory factory)
  19. {
  20. _factory = factory;
  21. }
  22. [Fact]
  23. public async Task RenameVirtualFolder_WhiteSpaceName_ReturnsBadRequest()
  24. {
  25. var client = _factory.CreateClient();
  26. client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
  27. using var postContent = new ByteArrayContent(Array.Empty<byte>());
  28. var response = await client.PostAsync("Library/VirtualFolders/Name?name=+&newName=test", postContent).ConfigureAwait(false);
  29. Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
  30. }
  31. [Fact]
  32. public async Task RenameVirtualFolder_WhiteSpaceNewName_ReturnsBadRequest()
  33. {
  34. var client = _factory.CreateClient();
  35. client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
  36. using var postContent = new ByteArrayContent(Array.Empty<byte>());
  37. var response = await client.PostAsync("Library/VirtualFolders/Name?name=test&newName=+", postContent).ConfigureAwait(false);
  38. Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
  39. }
  40. [Fact]
  41. public async Task RenameVirtualFolder_NameDoesntExist_ReturnsNotFound()
  42. {
  43. var client = _factory.CreateClient();
  44. client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
  45. using var postContent = new ByteArrayContent(Array.Empty<byte>());
  46. var response = await client.PostAsync("Library/VirtualFolders/Name?name=doesnt+exist&newName=test", postContent).ConfigureAwait(false);
  47. Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
  48. }
  49. [Fact]
  50. public async Task AddMediaPath_PathDoesntExist_ReturnsNotFound()
  51. {
  52. var client = _factory.CreateClient();
  53. client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
  54. var data = new MediaPathDto()
  55. {
  56. Name = "Test",
  57. Path = "/this/path/doesnt/exist"
  58. };
  59. using var postContent = new ByteArrayContent(JsonSerializer.SerializeToUtf8Bytes(data, _jsonOptions));
  60. postContent.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Application.Json);
  61. var response = await client.PostAsync("Library/VirtualFolders/Paths", postContent).ConfigureAwait(false);
  62. Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
  63. }
  64. [Fact]
  65. public async Task UpdateMediaPath_EmptyName_ReturnsBadRequest()
  66. {
  67. var client = _factory.CreateClient();
  68. client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
  69. var data = new UpdateMediaPathRequestDto()
  70. {
  71. Name = string.Empty,
  72. };
  73. using var postContent = new ByteArrayContent(JsonSerializer.SerializeToUtf8Bytes(data, _jsonOptions));
  74. postContent.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Application.Json);
  75. var response = await client.PostAsync("Library/VirtualFolders/Paths/Update", postContent).ConfigureAwait(false);
  76. Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
  77. }
  78. [Fact]
  79. public async Task RemoveMediaPath_WhiteSpaceName_ReturnsBadRequest()
  80. {
  81. var client = _factory.CreateClient();
  82. client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
  83. var response = await client.DeleteAsync("Library/VirtualFolders/Paths?name=+").ConfigureAwait(false);
  84. Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
  85. }
  86. [Fact]
  87. public async Task RemoveMediaPath_PathDoesntExist_ReturnsNotFound()
  88. {
  89. var client = _factory.CreateClient();
  90. client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
  91. var response = await client.DeleteAsync("Library/VirtualFolders/Paths?name=none&path=%2Fthis%2Fpath%2Fdoesnt%2Fexist").ConfigureAwait(false);
  92. Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
  93. }
  94. }
  95. }