mirror of
https://github.com/SoPat712/allstarr.git
synced 2026-04-27 12:02:51 -04:00
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
using System.Reflection;
|
||||
using allstarr.Controllers;
|
||||
|
||||
namespace allstarr.Tests;
|
||||
|
||||
public class JellyfinControllerSearchLimitTests
|
||||
{
|
||||
[Theory]
|
||||
[InlineData(null, 20, true, 20, 20, 20)]
|
||||
[InlineData("MusicAlbum", 20, true, 0, 20, 0)]
|
||||
[InlineData("Audio", 20, true, 20, 0, 0)]
|
||||
[InlineData("MusicArtist", 20, true, 0, 0, 20)]
|
||||
[InlineData("Playlist", 20, true, 0, 20, 0)]
|
||||
[InlineData("Playlist", 20, false, 0, 0, 0)]
|
||||
[InlineData("Audio,MusicArtist", 15, true, 15, 0, 15)]
|
||||
[InlineData("BoxSet", 10, true, 0, 0, 0)]
|
||||
public void GetExternalSearchLimits_UsesRequestedItemTypes(
|
||||
string? includeItemTypes,
|
||||
int limit,
|
||||
bool includePlaylistsAsAlbums,
|
||||
int expectedSongLimit,
|
||||
int expectedAlbumLimit,
|
||||
int expectedArtistLimit)
|
||||
{
|
||||
var requestedTypes = string.IsNullOrWhiteSpace(includeItemTypes)
|
||||
? null
|
||||
: includeItemTypes.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
|
||||
|
||||
var method = typeof(JellyfinController).GetMethod(
|
||||
"GetExternalSearchLimits",
|
||||
BindingFlags.Static | BindingFlags.NonPublic);
|
||||
|
||||
Assert.NotNull(method);
|
||||
|
||||
var result = ((int SongLimit, int AlbumLimit, int ArtistLimit))method!.Invoke(
|
||||
null,
|
||||
new object?[] { requestedTypes, limit, includePlaylistsAsAlbums })!;
|
||||
|
||||
Assert.Equal(expectedSongLimit, result.SongLimit);
|
||||
Assert.Equal(expectedAlbumLimit, result.AlbumLimit);
|
||||
Assert.Equal(expectedArtistLimit, result.ArtistLimit);
|
||||
}
|
||||
}
|
||||
@@ -299,6 +299,65 @@ public class SquidWTFMetadataServiceTests
|
||||
Assert.NotNull(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SearchAllAsync_WithZeroLimits_SkipsUnusedBuckets()
|
||||
{
|
||||
var requestKinds = new List<string>();
|
||||
var handler = new StubHttpMessageHandler(request =>
|
||||
{
|
||||
var trackQuery = GetQueryParameter(request.RequestUri!, "s");
|
||||
var albumQuery = GetQueryParameter(request.RequestUri!, "al");
|
||||
var artistQuery = GetQueryParameter(request.RequestUri!, "a");
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(trackQuery))
|
||||
{
|
||||
requestKinds.Add("song");
|
||||
return new HttpResponseMessage(HttpStatusCode.OK)
|
||||
{
|
||||
Content = new StringContent(CreateTrackSearchResponse(CreateTrackPayload(1, "Song", "USRC12345678")))
|
||||
};
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(albumQuery))
|
||||
{
|
||||
requestKinds.Add("album");
|
||||
return new HttpResponseMessage(HttpStatusCode.OK)
|
||||
{
|
||||
Content = new StringContent(CreateAlbumSearchResponse())
|
||||
};
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(artistQuery))
|
||||
{
|
||||
requestKinds.Add("artist");
|
||||
return new HttpResponseMessage(HttpStatusCode.OK)
|
||||
{
|
||||
Content = new StringContent(CreateArtistSearchResponse())
|
||||
};
|
||||
}
|
||||
|
||||
throw new InvalidOperationException($"Unexpected request URI: {request.RequestUri}");
|
||||
});
|
||||
|
||||
var httpClient = new HttpClient(handler);
|
||||
_mockHttpClientFactory.Setup(f => f.CreateClient(It.IsAny<string>())).Returns(httpClient);
|
||||
|
||||
var service = new SquidWTFMetadataService(
|
||||
_mockHttpClientFactory.Object,
|
||||
_subsonicSettings,
|
||||
_squidwtfSettings,
|
||||
_mockLogger.Object,
|
||||
_mockCache.Object,
|
||||
new List<string> { "https://test1.example.com" });
|
||||
|
||||
var result = await service.SearchAllAsync("OK Computer", 0, 5, 0);
|
||||
|
||||
Assert.Empty(result.Songs);
|
||||
Assert.Single(result.Albums);
|
||||
Assert.Empty(result.Artists);
|
||||
Assert.Equal(new[] { "album" }, requestKinds);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ExplicitFilter_RespectsSettings()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user