From d24e7f60c754620f88faa294af5bf0309b59c785 Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Sun, 24 Jan 2021 11:43:05 +0100 Subject: [PATCH 1/2] Fix GetOrderBy and add tests --- Jellyfin.Api/Helpers/RequestHelpers.cs | 19 +++--- .../Helpers/RequestHelpersTests.cs | 59 +++++++++++++++++++ 2 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 tests/Jellyfin.Api.Tests/Helpers/RequestHelpersTests.cs diff --git a/Jellyfin.Api/Helpers/RequestHelpers.cs b/Jellyfin.Api/Helpers/RequestHelpers.cs index 056ad83daf..59cb8ea2c1 100644 --- a/Jellyfin.Api/Helpers/RequestHelpers.cs +++ b/Jellyfin.Api/Helpers/RequestHelpers.cs @@ -25,22 +25,25 @@ namespace Jellyfin.Api.Helpers /// Sort By. Comma delimited string. /// Sort Order. Comma delimited string. /// Order By. - public static ValueTuple[] GetOrderBy(IReadOnlyList sortBy, IReadOnlyList requestedSortOrder) + public static (string, SortOrder)[] GetOrderBy(IReadOnlyList sortBy, IReadOnlyList requestedSortOrder) { if (sortBy.Count == 0) { return Array.Empty>(); } - var result = new ValueTuple[sortBy.Count]; - for (var i = 0; i < sortBy.Count; i++) + var result = new (string, SortOrder)[sortBy.Count]; + var i = 0; + // Add elements which have a SortOrder specified + for (; i < requestedSortOrder.Count; i++) { - var sortOrderIndex = requestedSortOrder.Count > i ? i : 0; + result[i] = (sortBy[i], requestedSortOrder[i]); + } - var sortOrder = requestedSortOrder.Count > sortOrderIndex - ? requestedSortOrder[sortOrderIndex] - : SortOrder.Ascending; - result[i] = new ValueTuple(sortBy[i], sortOrder); + // Add remaining elements with the default SortOrder + for (; i < sortBy.Count; i++) + { + result[i] = (sortBy[i], SortOrder.Ascending); } return result; diff --git a/tests/Jellyfin.Api.Tests/Helpers/RequestHelpersTests.cs b/tests/Jellyfin.Api.Tests/Helpers/RequestHelpersTests.cs new file mode 100644 index 0000000000..944472c689 --- /dev/null +++ b/tests/Jellyfin.Api.Tests/Helpers/RequestHelpersTests.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using Jellyfin.Api.Helpers; +using Jellyfin.Data.Enums; +using Xunit; + +namespace Jellyfin.Api.Tests.Helpers +{ + public class RequestHelpersTests + { + [Theory] + [MemberData(nameof(GetOrderBy_Success_TestData))] + public void GetOrderBy_Success(IReadOnlyList sortBy, IReadOnlyList requestedSortOrder, (string, SortOrder)[] expected) + { + Assert.Equal(expected, RequestHelpers.GetOrderBy(sortBy, requestedSortOrder)); + } + + public static IEnumerable GetOrderBy_Success_TestData() + { + yield return new object[] + { + Array.Empty(), + Array.Empty(), + Array.Empty<(string, SortOrder)>() + }; + yield return new object[] + { + new string[] + { + "IsFavoriteOrLiked", + "Random" + }, + Array.Empty(), + new (string, SortOrder)[] + { + ("IsFavoriteOrLiked", SortOrder.Ascending), + ("Random", SortOrder.Ascending), + } + }; + yield return new object[] + { + new string[] + { + "SortName", + "ProductionYear" + }, + new SortOrder[] + { + SortOrder.Descending + }, + new (string, SortOrder)[] + { + ("SortName", SortOrder.Descending), + ("ProductionYear", SortOrder.Ascending), + } + }; + } + } +} From f6b293203aac0dd57c93ca9e77b8441a2c1918fd Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Sun, 24 Jan 2021 17:55:25 +0100 Subject: [PATCH 2/2] Restore weird behaviour --- Jellyfin.Api/Helpers/RequestHelpers.cs | 6 ++++-- tests/Jellyfin.Api.Tests/Helpers/RequestHelpersTests.cs | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Jellyfin.Api/Helpers/RequestHelpers.cs b/Jellyfin.Api/Helpers/RequestHelpers.cs index 59cb8ea2c1..cd1e31e804 100644 --- a/Jellyfin.Api/Helpers/RequestHelpers.cs +++ b/Jellyfin.Api/Helpers/RequestHelpers.cs @@ -40,10 +40,12 @@ namespace Jellyfin.Api.Helpers result[i] = (sortBy[i], requestedSortOrder[i]); } - // Add remaining elements with the default SortOrder + // Add remaining elements with the first specified SortOrder + // or the default one if no SortOrders are specified + var order = requestedSortOrder.Count > 0 ? requestedSortOrder[0] : SortOrder.Ascending; for (; i < sortBy.Count; i++) { - result[i] = (sortBy[i], SortOrder.Ascending); + result[i] = (sortBy[i], order); } return result; diff --git a/tests/Jellyfin.Api.Tests/Helpers/RequestHelpersTests.cs b/tests/Jellyfin.Api.Tests/Helpers/RequestHelpersTests.cs index 944472c689..606041c7f4 100644 --- a/tests/Jellyfin.Api.Tests/Helpers/RequestHelpersTests.cs +++ b/tests/Jellyfin.Api.Tests/Helpers/RequestHelpersTests.cs @@ -51,7 +51,7 @@ namespace Jellyfin.Api.Tests.Helpers new (string, SortOrder)[] { ("SortName", SortOrder.Descending), - ("ProductionYear", SortOrder.Ascending), + ("ProductionYear", SortOrder.Descending), } }; }