mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-01 21:38:27 +01:00
Merge remote-tracking branch 'jellyfinorigin/master' into feature/pgsql_provider
This commit is contained in:
@@ -92,7 +92,7 @@ namespace Jellyfin.Extensions.Tests.Json.Converters
|
||||
Value = [GeneralCommandType.MoveUp, GeneralCommandType.MoveDown]
|
||||
};
|
||||
|
||||
var value = JsonSerializer.Deserialize<GenericBodyArrayModel<GeneralCommandType>>(@"{ ""Value"": ""MoveUp,TotallyNotAVallidCommand,MoveDown"" }", _jsonOptions);
|
||||
var value = JsonSerializer.Deserialize<GenericBodyArrayModel<GeneralCommandType>>(@"{ ""Value"": ""MoveUp,TotallyNotAValidCommand,MoveDown"" }", _jsonOptions);
|
||||
Assert.Equal(desiredValue.Value, value?.Value);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@ namespace Jellyfin.Extensions.Tests
|
||||
public class StringExtensionsTests
|
||||
{
|
||||
[Theory]
|
||||
[InlineData("", "")] // Identity edge-case (no diactritics)
|
||||
[InlineData("Indiana Jones", "Indiana Jones")] // Identity (no diactritics)
|
||||
[InlineData("", "")] // Identity edge-case (no diacritics)
|
||||
[InlineData("Indiana Jones", "Indiana Jones")] // Identity (no diacritics)
|
||||
[InlineData("a\ud800b", "ab")] // Invalid UTF-16 char stripping
|
||||
[InlineData("åäö", "aao")] // Issue #7484
|
||||
[InlineData("Jön", "Jon")] // Issue #7484
|
||||
@@ -25,8 +25,8 @@ namespace Jellyfin.Extensions.Tests
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("", false)] // Identity edge-case (no diactritics)
|
||||
[InlineData("Indiana Jones", false)] // Identity (no diactritics)
|
||||
[InlineData("", false)] // Identity edge-case (no diacritics)
|
||||
[InlineData("Indiana Jones", false)] // Identity (no diacritics)
|
||||
[InlineData("a\ud800b", true)] // Invalid UTF-16 char stripping
|
||||
[InlineData("åäö", true)] // Issue #7484
|
||||
[InlineData("Jön", true)] // Issue #7484
|
||||
|
||||
@@ -232,7 +232,7 @@ namespace Jellyfin.LiveTv.Tests.SchedulesDirect
|
||||
Assert.Equal(2, channelDto!.Map.Count);
|
||||
Assert.Equal("24326", channelDto.Map[0].StationId);
|
||||
Assert.Equal("001", channelDto.Map[0].Channel);
|
||||
Assert.Equal("BBC ONE South", channelDto.Map[0].ProvderCallsign);
|
||||
Assert.Equal("BBC ONE South", channelDto.Map[0].ProviderCallsign);
|
||||
Assert.Equal("1", channelDto.Map[0].LogicalChannelNumber);
|
||||
Assert.Equal("providerCallsign", channelDto.Map[0].MatchType);
|
||||
}
|
||||
|
||||
@@ -15,17 +15,17 @@ public class TvParserHelpersTest
|
||||
[InlineData("Unreleased", SeriesStatus.Unreleased)]
|
||||
public void SeriesStatusParserTest_Valid(string statusString, SeriesStatus? status)
|
||||
{
|
||||
var successful = TvParserHelpers.TryParseSeriesStatus(statusString, out var parsered);
|
||||
var successful = TvParserHelpers.TryParseSeriesStatus(statusString, out var parsed);
|
||||
Assert.True(successful);
|
||||
Assert.Equal(status, parsered);
|
||||
Assert.Equal(status, parsed);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("XXX")]
|
||||
public void SeriesStatusParserTest_InValid(string statusString)
|
||||
{
|
||||
var successful = TvParserHelpers.TryParseSeriesStatus(statusString, out var parsered);
|
||||
var successful = TvParserHelpers.TryParseSeriesStatus(statusString, out var parsed);
|
||||
Assert.False(successful);
|
||||
Assert.Null(parsered);
|
||||
Assert.Null(parsed);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -238,7 +238,7 @@ namespace Jellyfin.Networking.Tests
|
||||
// User on external network, internal binding only - so assumption is a proxy forward, return external override.
|
||||
[InlineData("jellyfin.org", "192.168.1.0/24", "eth16", false, "external=http://helloworld.com", "http://helloworld.com")]
|
||||
|
||||
// User on external network, no binding - so result is the 1st external which is overriden.
|
||||
// User on external network, no binding - so result is the 1st external which is overridden.
|
||||
[InlineData("jellyfin.org", "192.168.1.0/24", "", false, "external=http://helloworld.com", "http://helloworld.com")]
|
||||
|
||||
// User assumed to be internal, no binding - so result is the 1st matching interface.
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Mime;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
@@ -391,7 +392,7 @@ namespace Jellyfin.Providers.Tests.Manager
|
||||
{
|
||||
ReasonPhrase = url,
|
||||
StatusCode = HttpStatusCode.OK,
|
||||
Content = new StringContent(Content, Encoding.UTF8, "image/jpeg")
|
||||
Content = new StringContent(Content, Encoding.UTF8, MediaTypeNames.Image.Jpeg)
|
||||
});
|
||||
|
||||
var refreshOptions = fullRefresh
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace Jellyfin.Providers.Tests.Omdb
|
||||
[Theory]
|
||||
[InlineData("\"N/A\"")]
|
||||
[InlineData("null")]
|
||||
public void Deserialization_To_Nullable_Int_Shoud_Be_Null(string input)
|
||||
public void Deserialization_To_Nullable_Int_Should_Be_Null(string input)
|
||||
{
|
||||
var result = JsonSerializer.Deserialize<int?>(input, _options);
|
||||
Assert.Null(result);
|
||||
@@ -49,7 +49,7 @@ namespace Jellyfin.Providers.Tests.Omdb
|
||||
[Theory]
|
||||
[InlineData("\"N/A\"")]
|
||||
[InlineData("null")]
|
||||
public void Deserialization_To_Nullable_String_Shoud_Be_Null(string input)
|
||||
public void Deserialization_To_Nullable_String_Should_Be_Null(string input)
|
||||
{
|
||||
var result = JsonSerializer.Deserialize<string?>(input, _options);
|
||||
Assert.Null(result);
|
||||
|
||||
@@ -540,7 +540,7 @@
|
||||
{
|
||||
"guid": "022a3003-993f-45f1-8565-87d12af2e12a",
|
||||
"name": "InfuseSync",
|
||||
"description": "This plugin will track all media changes while any Infuse clients are offline to decrease sync times when logging back in to your server.",
|
||||
"description": "This plugin will track all media changes while any Infuse clients are offline to decrease sync times when logging back into your server.",
|
||||
"overview": "Blazing fast indexing for Infuse",
|
||||
"owner": "Firecore LLC",
|
||||
"category": "General",
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||
public sealed class DashboardControllerTests : IClassFixture<JellyfinApplicationFactory>
|
||||
{
|
||||
private readonly JellyfinApplicationFactory _factory;
|
||||
private readonly JsonSerializerOptions _jsonOpions = JsonDefaults.Options;
|
||||
private readonly JsonSerializerOptions _jsonOptions = JsonDefaults.Options;
|
||||
private static string? _accessToken;
|
||||
|
||||
public DashboardControllerTests(JellyfinApplicationFactory factory)
|
||||
@@ -65,7 +65,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||
|
||||
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
||||
|
||||
_ = await response.Content.ReadFromJsonAsync<ConfigurationPageInfo[]>(_jsonOpions);
|
||||
_ = await response.Content.ReadFromJsonAsync<ConfigurationPageInfo[]>(_jsonOptions);
|
||||
// TODO: check content
|
||||
}
|
||||
|
||||
@@ -81,7 +81,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||
Assert.Equal(MediaTypeNames.Application.Json, response.Content.Headers.ContentType?.MediaType);
|
||||
Assert.Equal(Encoding.UTF8.BodyName, response.Content.Headers.ContentType?.CharSet);
|
||||
|
||||
var data = await response.Content.ReadFromJsonAsync<ConfigurationPageInfo[]>(_jsonOpions);
|
||||
var data = await response.Content.ReadFromJsonAsync<ConfigurationPageInfo[]>(_jsonOptions);
|
||||
Assert.NotNull(data);
|
||||
Assert.Empty(data);
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ public sealed class ItemsControllerTests : IClassFixture<JellyfinApplicationFact
|
||||
[Theory]
|
||||
[InlineData("Users/{0}/Items")]
|
||||
[InlineData("Users/{0}/Items/Resume")]
|
||||
public async Task GetUserItems_NonExistentUserId_NotFound(string format)
|
||||
public async Task GetUserItems_NonexistentUserId_NotFound(string format)
|
||||
{
|
||||
var client = _factory.CreateClient();
|
||||
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
|
||||
|
||||
@@ -29,7 +29,7 @@ public sealed class LibraryControllerTests : IClassFixture<JellyfinApplicationFa
|
||||
[InlineData("Shows/{0}/Similar")]
|
||||
[InlineData("Movies/{0}/Similar")]
|
||||
[InlineData("Trailers/{0}/Similar")]
|
||||
public async Task Get_NonExistentItemId_NotFound(string format)
|
||||
public async Task Get_NonexistentItemId_NotFound(string format)
|
||||
{
|
||||
var client = _factory.CreateClient();
|
||||
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
|
||||
@@ -41,7 +41,7 @@ public sealed class LibraryControllerTests : IClassFixture<JellyfinApplicationFa
|
||||
[Theory]
|
||||
[InlineData("Items/{0}")]
|
||||
[InlineData("Items?ids={0}")]
|
||||
public async Task Delete_NonExistentItemId_Unauthorised(string format)
|
||||
public async Task Delete_NonexistentItemId_Unauthorised(string format)
|
||||
{
|
||||
var client = _factory.CreateClient();
|
||||
|
||||
@@ -52,7 +52,7 @@ public sealed class LibraryControllerTests : IClassFixture<JellyfinApplicationFa
|
||||
[Theory]
|
||||
[InlineData("Items/{0}")]
|
||||
[InlineData("Items?ids={0}")]
|
||||
public async Task Delete_NonExistentItemId_NotFound(string format)
|
||||
public async Task Delete_NonexistentItemId_NotFound(string format)
|
||||
{
|
||||
var client = _factory.CreateClient();
|
||||
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
|
||||
|
||||
@@ -16,7 +16,7 @@ public class PlaystateControllerTests : IClassFixture<JellyfinApplicationFactory
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DeleteMarkUnplayedItem_NonExistentUserId_NotFound()
|
||||
public async Task DeleteMarkUnplayedItem_NonexistentUserId_NotFound()
|
||||
{
|
||||
var client = _factory.CreateClient();
|
||||
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
|
||||
@@ -26,7 +26,7 @@ public class PlaystateControllerTests : IClassFixture<JellyfinApplicationFactory
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task PostMarkPlayedItem_NonExistentUserId_NotFound()
|
||||
public async Task PostMarkPlayedItem_NonexistentUserId_NotFound()
|
||||
{
|
||||
var client = _factory.CreateClient();
|
||||
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
|
||||
@@ -36,7 +36,7 @@ public class PlaystateControllerTests : IClassFixture<JellyfinApplicationFactory
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DeleteMarkUnplayedItem_NonExistentItemId_NotFound()
|
||||
public async Task DeleteMarkUnplayedItem_NonexistentItemId_NotFound()
|
||||
{
|
||||
var client = _factory.CreateClient();
|
||||
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
|
||||
@@ -48,7 +48,7 @@ public class PlaystateControllerTests : IClassFixture<JellyfinApplicationFactory
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task PostMarkPlayedItem_NonExistentItemId_NotFound()
|
||||
public async Task PostMarkPlayedItem_NonexistentItemId_NotFound()
|
||||
{
|
||||
var client = _factory.CreateClient();
|
||||
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||
private const string TestUsername = "testUser01";
|
||||
|
||||
private readonly JellyfinApplicationFactory _factory;
|
||||
private readonly JsonSerializerOptions _jsonOpions = JsonDefaults.Options;
|
||||
private readonly JsonSerializerOptions _jsonOptions = JsonDefaults.Options;
|
||||
private static string? _accessToken;
|
||||
private static Guid _testUserId = Guid.Empty;
|
||||
|
||||
@@ -30,10 +30,10 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||
}
|
||||
|
||||
private Task<HttpResponseMessage> CreateUserByName(HttpClient httpClient, CreateUserByName request)
|
||||
=> httpClient.PostAsJsonAsync("Users/New", request, _jsonOpions);
|
||||
=> httpClient.PostAsJsonAsync("Users/New", request, _jsonOptions);
|
||||
|
||||
private Task<HttpResponseMessage> UpdateUserPassword(HttpClient httpClient, Guid userId, UpdateUserPassword request)
|
||||
=> httpClient.PostAsJsonAsync("Users/" + userId.ToString("N", CultureInfo.InvariantCulture) + "/Password", request, _jsonOpions);
|
||||
=> httpClient.PostAsJsonAsync("Users/" + userId.ToString("N", CultureInfo.InvariantCulture) + "/Password", request, _jsonOptions);
|
||||
|
||||
[Fact]
|
||||
[Priority(-1)]
|
||||
@@ -43,7 +43,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||
|
||||
using var response = await client.GetAsync("Users/Public");
|
||||
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
||||
var users = await response.Content.ReadFromJsonAsync<UserDto[]>(_jsonOpions);
|
||||
var users = await response.Content.ReadFromJsonAsync<UserDto[]>(_jsonOptions);
|
||||
// User are hidden by default
|
||||
Assert.NotNull(users);
|
||||
Assert.Empty(users);
|
||||
@@ -58,7 +58,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||
|
||||
using var response = await client.GetAsync("Users");
|
||||
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
||||
var users = await response.Content.ReadFromJsonAsync<UserDto[]>(_jsonOpions);
|
||||
var users = await response.Content.ReadFromJsonAsync<UserDto[]>(_jsonOptions);
|
||||
Assert.NotNull(users);
|
||||
Assert.Single(users);
|
||||
Assert.False(users![0].HasConfiguredPassword);
|
||||
@@ -90,7 +90,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||
|
||||
using var response = await CreateUserByName(client, createRequest);
|
||||
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
||||
var user = await response.Content.ReadFromJsonAsync<UserDto>(_jsonOpions);
|
||||
var user = await response.Content.ReadFromJsonAsync<UserDto>(_jsonOptions);
|
||||
Assert.Equal(TestUsername, user!.Name);
|
||||
Assert.False(user.HasPassword);
|
||||
Assert.False(user.HasConfiguredPassword);
|
||||
@@ -151,7 +151,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||
Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
|
||||
|
||||
var users = await JsonSerializer.DeserializeAsync<UserDto[]>(
|
||||
await client.GetStreamAsync("Users"), _jsonOpions);
|
||||
await client.GetStreamAsync("Users"), _jsonOptions);
|
||||
var user = users!.First(x => x.Id.Equals(_testUserId));
|
||||
Assert.True(user.HasPassword);
|
||||
Assert.True(user.HasConfiguredPassword);
|
||||
@@ -174,7 +174,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||
Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
|
||||
|
||||
var users = await JsonSerializer.DeserializeAsync<UserDto[]>(
|
||||
await client.GetStreamAsync("Users"), _jsonOpions);
|
||||
await client.GetStreamAsync("Users"), _jsonOptions);
|
||||
var user = users!.First(x => x.Id.Equals(_testUserId));
|
||||
Assert.False(user.HasPassword);
|
||||
Assert.False(user.HasConfiguredPassword);
|
||||
|
||||
@@ -23,7 +23,7 @@ public sealed class UserLibraryControllerTests : IClassFixture<JellyfinApplicati
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetRootFolder_NonExistenUserId_NotFound()
|
||||
public async Task GetRootFolder_NonexistentUserId_NotFound()
|
||||
{
|
||||
var client = _factory.CreateClient();
|
||||
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
|
||||
@@ -47,7 +47,7 @@ public sealed class UserLibraryControllerTests : IClassFixture<JellyfinApplicati
|
||||
[InlineData("Users/{0}/Items/{1}/LocalTrailers")]
|
||||
[InlineData("Users/{0}/Items/{1}/SpecialFeatures")]
|
||||
[InlineData("Users/{0}/Items/{1}/Lyrics")]
|
||||
public async Task GetItem_NonExistenUserId_NotFound(string format)
|
||||
public async Task GetItem_NonexistentUserId_NotFound(string format)
|
||||
{
|
||||
var client = _factory.CreateClient();
|
||||
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
|
||||
@@ -64,7 +64,7 @@ public sealed class UserLibraryControllerTests : IClassFixture<JellyfinApplicati
|
||||
[InlineData("Users/{0}/Items/{1}/LocalTrailers")]
|
||||
[InlineData("Users/{0}/Items/{1}/SpecialFeatures")]
|
||||
[InlineData("Users/{0}/Items/{1}/Lyrics")]
|
||||
public async Task GetItem_NonExistentItemId_NotFound(string format)
|
||||
public async Task GetItem_NonexistentItemId_NotFound(string format)
|
||||
{
|
||||
var client = _factory.CreateClient();
|
||||
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
|
||||
|
||||
@@ -16,7 +16,7 @@ public sealed class VideosControllerTests : IClassFixture<JellyfinApplicationFac
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DeleteAlternateSources_NonExistentItemId_NotFound()
|
||||
public async Task DeleteAlternateSources_NonexistentItemId_NotFound()
|
||||
{
|
||||
var client = _factory.CreateClient();
|
||||
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
|
||||
|
||||
@@ -85,7 +85,7 @@ namespace Jellyfin.XbmcMetadata.Tests.Parsers
|
||||
Assert.Contains("Bryan Fuller", writers.Select(x => x.Name));
|
||||
Assert.Contains("Michael Green", writers.Select(x => x.Name));
|
||||
|
||||
// Direcotrs
|
||||
// Directors
|
||||
var directors = result.People.Where(x => x.Type == PersonKind.Director).ToArray();
|
||||
Assert.Single(directors);
|
||||
Assert.Contains("David Slade", directors.Select(x => x.Name));
|
||||
|
||||
Reference in New Issue
Block a user