mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-10-23 03:27:39 +09:00
Backport pull request #18265 from jellyfin/release-12.z
Compare person names without regard to case in the letter range filters
Original-merge: 03544979c8
Merged-by: crobibero <cody@robibe.ro>
Backported-by: Cody Robibero <cody@robibe.ro>
This commit is contained in:
1 parent
0ca7042ed7
commit
abb7a18434
2 files changed
+55
-2
No files matched your search
@@ -0,0 +1,53 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Emby.Server.Implementations.Data;
|
||||
using Jellyfin.Database.Implementations.Entities;
|
||||
using Jellyfin.Server.Implementations.Item;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Persistence;
|
||||
using Moq;
|
||||
using Xunit;
|
||||
|
||||
namespace Jellyfin.Server.Implementations.Tests.Item;
|
||||
|
||||
/// <summary>
|
||||
/// The letter picker on the person list filters with <c>NameStartsWithOrGreater</c> and <c>NameLessThan</c>.
|
||||
/// Names keep the case a metadata provider wrote them in, so the range has to ignore case the same way
|
||||
/// the list is sorted, or a capitalised name lands before every lowercase bound.
|
||||
/// </summary>
|
||||
public sealed class PeopleRepositoryNameRangeTests : SqliteDbTestFixture
|
||||
{
|
||||
private readonly PeopleRepository _repository;
|
||||
|
||||
public PeopleRepositoryNameRangeTests()
|
||||
{
|
||||
using (var context = CreateDbContext())
|
||||
{
|
||||
foreach (var name in new[] { "50 Cent", "alpha centauri", "Brad Pitt", "bob dylan", "Zoe Saldana" })
|
||||
{
|
||||
context.Peoples.Add(new People { Id = Guid.NewGuid(), Name = name, PersonType = "Actor" });
|
||||
}
|
||||
|
||||
context.SaveChanges();
|
||||
}
|
||||
|
||||
_repository = new PeopleRepository(CreateDbContextFactory(), new ItemTypeLookup(), new Mock<IItemQueryHelpers>().Object);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(null, "A", new[] { "50 Cent" })]
|
||||
[InlineData(null, "C", new[] { "50 Cent", "alpha centauri", "bob dylan", "Brad Pitt" })]
|
||||
[InlineData("B", "C", new[] { "bob dylan", "Brad Pitt" })]
|
||||
[InlineData("Y", null, new[] { "Zoe Saldana" })]
|
||||
public void GetPeople_NameRange_IgnoresCase(string? nameStartsWithOrGreater, string? nameLessThan, string[] expected)
|
||||
{
|
||||
var result = _repository.GetPeople(new InternalPeopleQuery
|
||||
{
|
||||
NameStartsWithOrGreater = nameStartsWithOrGreater,
|
||||
NameLessThan = nameLessThan
|
||||
});
|
||||
|
||||
Assert.Equal(expected, result.Items.Select(p => p.Name));
|
||||
Assert.Equal(expected.Length, result.TotalRecordCount);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user